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 42/* 43 * Note that when _init and _fini are called we have 16-byte alignment per the 44 * ABI. We need to make sure that our asm leaves it such that subsequent calls 45 * will be aligned. gcc expects stack alignment before the call instruction is 46 * executed. Specifically if we call function foo(), the stack pointer will be 47 * 0xc aligned after executing the call instruction and before executing foo's 48 * prologue. Note that because 16-byte alignment also ensures 4-byte alignment 49 * we will not be breaking compatibility with older applications. 50 */ 51 52/* 53 * _init function prologue 54 */ 55 .section .init,"ax" 56 .globl _init 57 .type _init,@function 58 .align 16 59_init: 60 pushl %ebp 61 movl %esp, %ebp 62 andl $-16,%esp 63 subl $12,%esp 64 pushl %ebx 65 call .L1 66.L1: popl %ebx 67 addl $_GLOBAL_OFFSET_TABLE_+[.-.L1], %ebx 68 69/* 70 * _fini function prologue 71 */ 72 .section .fini,"ax" 73 .globl _fini 74 .type _fini,@function 75 .align 16 76_fini: 77 pushl %ebp 78 movl %esp, %ebp 79 andl $-16,%esp 80 subl $12,%esp 81 pushl %ebx 82 call .L2 83.L2: popl %ebx 84 addl $_GLOBAL_OFFSET_TABLE_+[.-.L2], %ebx 85