xref: /illumos-gate/usr/src/lib/crt/i386/crti.s (revision 30165b7f6753bc3d48c52319bed7ec7b3ea36b3c)
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 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/crt/i386/mach-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/*
72 * _fini function prologue
73 */
74	.section	.fini,"ax"
75	.globl	_fini
76	.type	_fini,@function
77	.align	16
78_fini:
79	pushl	%ebp
80	movl	%esp, %ebp
81	andl	$-16,%esp
82	subl	$12,%esp
83	pushl	%ebx
84	call	.L2
85.L2:	popl	%ebx
86	addl	$_GLOBAL_OFFSET_TABLE_+[.-.L2], %ebx
87