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 /*
|
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 the stack needs to be 16-byte
44 * aligned with a 4-byte bias. See comment in lib/libc/i386/gen/makectxt.c.
45 *
46 * Note: If you change it, you need to change it in the following files as
47 * well:
48 *
49 * - lib/libc/i386/threads/machdep.c
50 * - lib/libc/i386/gen/makectxt.c
51 * - lib/common/i386/crt1.s
52 */
53
54 /*
55 * _init function prologue
56 */
57 .section .init,"ax"
58 .globl _init
59 .type _init,@function
60 .align 16
61 _init:
62 pushl %ebp
63 movl %esp, %ebp
64 andl $-16,%esp
65 subl $12,%esp
66 pushl %ebx
67 call .L1
68 .L1: popl %ebx
69 addl $_GLOBAL_OFFSET_TABLE_+[.-.L1], %ebx
70
71 /*
|