1*5d9d9091SRichard Lowe/* 2*5d9d9091SRichard Lowe * CDDL HEADER START 3*5d9d9091SRichard Lowe * 4*5d9d9091SRichard Lowe * The contents of this file are subject to the terms of the 5*5d9d9091SRichard Lowe * Common Development and Distribution License (the "License"). 6*5d9d9091SRichard Lowe * You may not use this file except in compliance with the License. 7*5d9d9091SRichard Lowe * 8*5d9d9091SRichard Lowe * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*5d9d9091SRichard Lowe * or http://www.opensolaris.org/os/licensing. 10*5d9d9091SRichard Lowe * See the License for the specific language governing permissions 11*5d9d9091SRichard Lowe * and limitations under the License. 12*5d9d9091SRichard Lowe * 13*5d9d9091SRichard Lowe * When distributing Covered Code, include this CDDL HEADER in each 14*5d9d9091SRichard Lowe * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*5d9d9091SRichard Lowe * If applicable, add the following below this CDDL HEADER, with the 16*5d9d9091SRichard Lowe * fields enclosed by brackets "[]" replaced with your own identifying 17*5d9d9091SRichard Lowe * information: Portions Copyright [yyyy] [name of copyright owner] 18*5d9d9091SRichard Lowe * 19*5d9d9091SRichard Lowe * CDDL HEADER END 20*5d9d9091SRichard Lowe */ 21*5d9d9091SRichard Lowe 22*5d9d9091SRichard Lowe/* 23*5d9d9091SRichard Lowe * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24*5d9d9091SRichard Lowe * Use is subject to license terms. 25*5d9d9091SRichard Lowe */ 26*5d9d9091SRichard Lowe#include <sys/asm_linkage.h> 27*5d9d9091SRichard Lowe 28*5d9d9091SRichard Lowe .file "mach-crt1.S" 29*5d9d9091SRichard Lowe .ident "" 30*5d9d9091SRichard Lowe 31*5d9d9091SRichard Lowe/* global entities defined elsewhere but used here */ 32*5d9d9091SRichard Lowe .globl _start_crt 33*5d9d9091SRichard Lowe 34*5d9d9091SRichard Lowe/* 35*5d9d9091SRichard Lowe * C language startup routine. 36*5d9d9091SRichard Lowe * Assume that exec code has cleared the direction flag in the TSS. 37*5d9d9091SRichard Lowe * Assume that %esp is set to the addr after the last word pushed. 38*5d9d9091SRichard Lowe * The stack contains (in order): argc, argv[],envp[],... 39*5d9d9091SRichard Lowe * Assume that all of the segment registers are initialized. 40*5d9d9091SRichard Lowe * 41*5d9d9091SRichard Lowe * Allocate a NULL return address and a NULL previous %ebp as if 42*5d9d9091SRichard Lowe * there was a genuine call to _start. 43*5d9d9091SRichard Lowe * debugger stack trace shows _start(argc,argv[0],argv[1],...,envp[0],...) 44*5d9d9091SRichard Lowe */ 45*5d9d9091SRichard LoweENTRY_NP(_start) 46*5d9d9091SRichard Lowe pushl $0 47*5d9d9091SRichard Lowe pushl $0 48*5d9d9091SRichard Lowe movl %esp,%ebp /* The first stack frame */ 49*5d9d9091SRichard Lowe 50*5d9d9091SRichard Lowe /* 51*5d9d9091SRichard Lowe * The stack needs to be 16-byte aligned with a 4-byte bias. See 52*5d9d9091SRichard Lowe * comment in lib/libc/i386/gen/makectxt.c. 53*5d9d9091SRichard Lowe * 54*5d9d9091SRichard Lowe * Note: If you change it, you need to change it in the following 55*5d9d9091SRichard Lowe * files as well: 56*5d9d9091SRichard Lowe * 57*5d9d9091SRichard Lowe * - lib/libc/i386/threads/machdep.c 58*5d9d9091SRichard Lowe * - lib/libc/i386/gen/makectxt.c 59*5d9d9091SRichard Lowe * - lib/crt/i386/crti.s 60*5d9d9091SRichard Lowe */ 61*5d9d9091SRichard Lowe andl $-16,%esp /* make main() and exit() be called with */ 62*5d9d9091SRichard Lowe subl $4,%esp /* a properly aligned stack pointer */ 63*5d9d9091SRichard Lowe pushl %edx /* possible atexit handler */ 64*5d9d9091SRichard Lowe leal 12(%ebp),%edx /* argv */ 65*5d9d9091SRichard Lowe movl 8(%ebp),%eax /* argc */ 66*5d9d9091SRichard Lowe pushl %edx 67*5d9d9091SRichard Lowe pushl %eax 68*5d9d9091SRichard Lowe call _start_crt 69*5d9d9091SRichard Lowe hlt 70*5d9d9091SRichard LoweSET_SIZE(_start) 71*5d9d9091SRichard Lowe 72*5d9d9091SRichard Lowe#include "fsr.S" 73*5d9d9091SRichard Lowe 74*5d9d9091SRichard Lowe/* 75*5d9d9091SRichard Lowe * The following is here in case any object module compiled with cc -p 76*5d9d9091SRichard Lowe * was linked into this module. 77*5d9d9091SRichard Lowe */ 78*5d9d9091SRichard LoweENTRY_NP(_mcount) 79*5d9d9091SRichard Lowe .weak _mcount 80*5d9d9091SRichard Lowe ret 81*5d9d9091SRichard LoweSET_SIZE(_mcount) 82