]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/sparc/sparc32/start.S
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / sysdeps / sparc / sparc32 / start.S
CommitLineData
f41c8091 1/* Startup code for elf32-sparc
bfff8b1b 2 Copyright (C) 1997-2017 Free Software Foundation, Inc.
41bdb6e2 3 This file is part of the GNU C Library.
f41c8091
UD
4 Contributed by Richard Henderson <richard@gnu.ai.mit.edu>, 1997.
5
6 The GNU C Library is free software; you can redistribute it and/or
41bdb6e2
AJ
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
f41c8091 10
92c6ccd1
RM
11 In addition to the permissions in the GNU Lesser General Public
12 License, the Free Software Foundation gives you unlimited
13 permission to link the compiled version of this file with other
14 programs, and to distribute those programs without any restriction
15 coming from the use of this file. (The GNU Lesser General Public
16 License restrictions do apply in other respects; for example, they
17 cover modification of the file, and distribution when not linked
18 into another program.)
19
20 Note that people who make modified versions of this file are not
21 obligated to grant this special exception for their modified
22 versions; it is their choice whether to do so. The GNU Lesser
23 General Public License gives permission to release a modified
24 version without this exception; this exception also makes it
25 possible to release a modified version which carries forward this
26 exception.
27
f41c8091
UD
28 The GNU C Library is distributed in the hope that it will be useful,
29 but WITHOUT ANY WARRANTY; without even the implied warranty of
30 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41bdb6e2 31 Lesser General Public License for more details.
f41c8091 32
41bdb6e2 33 You should have received a copy of the GNU Lesser General Public
59ba27a6
PE
34 License along with the GNU C Library; if not, see
35 <http://www.gnu.org/licenses/>. */
f41c8091
UD
36
37#include <sysdep.h>
38
39
40 .section ".text"
41 .align 4
42 .global _start
43 .type _start,#function
44_start:
4c595adb 45#ifdef SHARED
3d2b3019 46 SETUP_PIC_REG(l7)
4c595adb
UD
47#endif
48
f41c8091
UD
49 /* Terminate the stack frame, and reserve space for functions to
50 drop their arguments. */
51 mov %g0, %fp
52 sub %sp, 6*4, %sp
53
f41c8091
UD
54 /* Extract the arguments and environment as encoded on the stack. The
55 argument info starts after one register window (16 words) past the SP. */
a5540016
RH
56 ld [%sp+22*4], %o1
57 add %sp, 23*4, %o2
58
59 /* Load the addresses of the user entry points. */
3d2b3019
DM
60#ifndef SHARED
61 sethi %hi(main), %o0
62 sethi %hi(__libc_csu_init), %o3
63 sethi %hi(__libc_csu_fini), %o4
64 or %o0, %lo(main), %o0
65 or %o3, %lo(__libc_csu_init), %o3
66 or %o4, %lo(__libc_csu_fini), %o4
67#else
3d2b3019
DM
68 sethi %gdop_hix22(main), %o0
69 sethi %gdop_hix22(__libc_csu_init), %o3
70 sethi %gdop_hix22(__libc_csu_fini), %o4
71 xor %o0, %gdop_lox10(main), %o0
72 xor %o3, %gdop_lox10(__libc_csu_init), %o3
73 xor %o4, %gdop_lox10(__libc_csu_fini), %o4
74 ld [%l7 + %o0], %o0, %gdop(main)
75 ld [%l7 + %o3], %o3, %gdop(__libc_csu_init)
76 ld [%l7 + %o4], %o4, %gdop(__libc_csu_fini)
4c595adb 77#endif
a5540016
RH
78
79 /* When starting a binary via the dynamic linker, %g1 contains the
80 address of the shared library termination function, which will be
81 registered with atexit(). If we are statically linked, this will
82 be NULL. */
83 mov %g1, %o5
84
85 /* Let libc do the rest of the initialization, and call main. */
86 call __libc_start_main
f41c8091
UD
87 nop
88
89 /* Die very horribly if exit returns. */
90 unimp
91
a5540016 92 .size _start, .-_start
87f37b48
RM
93
94/* Define a symbol for the first piece of initialized data. */
95 .data
96 .globl __data_start
97__data_start:
e42e88ab 98 .long 0
87f37b48 99weak_alias (__data_start, data_start)