1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22/* 23 * Copyright (c) 2001 by Sun Microsystems, Inc. 24 * All rights reserved. 25 */ 26/* 27 * Copyright (c) 2013, Joyent, Inc. All rights reserved. 28 */ 29 30/* 31 * These crt*.o modules are provided as the bare minimum required 32 * from a crt*.o for inclusion in building low level system 33 * libraries. The are only be to included in libraries which 34 * contain *no* C++ code and want to avoid the startup code 35 * that the C++ runtime has introduced into the crt*.o modules. 36 * 37 * For further details - see bug#4433015 38 */ 39 40 .file "crti.s" 41 .ident "" 42 43/* 44 * Note that when _init and _fini are called the stack needs to be 16-byte 45 * aligned with a 4-byte bias. See comment in lib/libc/i386/gen/makectxt.c. 46 * 47 * Note: If you change it, you need to change it in the following files as 48 * well: 49 * 50 * - lib/libc/i386/threads/machdep.c 51 * - lib/libc/i386/gen/makectxt.c 52 * - lib/crt/i386/mach-crt1.s 53 */ 54 55/* 56 * _init function prologue 57 */ 58 .section .init,"ax" 59 .globl _init 60 .type _init,@function 61 .align 16 62_init: 63 pushl %ebp 64 movl %esp, %ebp 65 andl $-16,%esp 66 subl $12,%esp 67 pushl %ebx 68 call .L1 69.L1: popl %ebx 70 addl $_GLOBAL_OFFSET_TABLE_+[.-.L1], %ebx 71 72/* 73 * _fini function prologue 74 */ 75 .section .fini,"ax" 76 .globl _fini 77 .type _fini,@function 78 .align 16 79_fini: 80 pushl %ebp 81 movl %esp, %ebp 82 andl $-16,%esp 83 subl $12,%esp 84 pushl %ebx 85 call .L2 86.L2: popl %ebx 87 addl $_GLOBAL_OFFSET_TABLE_+[.-.L2], %ebx 88