comparison gcc/config/sparc/sol2-c1.asm @ 0:a06113de4d67

first commit
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Fri, 17 Jul 2009 14:47:48 +0900
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:a06113de4d67
1 ! crt1.s for sparc & sparcv9 (SunOS 5)
2
3 ! Copyright (C) 1992, 2009 Free Software Foundation, Inc.
4 ! Written By David Vinayak Henkel-Wallace, June 1992
5 !
6 ! This file is free software; you can redistribute it and/or modify it
7 ! under the terms of the GNU General Public License as published by the
8 ! Free Software Foundation; either version 3, or (at your option) any
9 ! later version.
10 !
11 ! This file is distributed in the hope that it will be useful, but
12 ! WITHOUT ANY WARRANTY; without even the implied warranty of
13 ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 ! General Public License for more details.
15 !
16 ! Under Section 7 of GPL version 3, you are granted additional
17 ! permissions described in the GCC Runtime Library Exception, version
18 ! 3.1, as published by the Free Software Foundation.
19 !
20 ! You should have received a copy of the GNU General Public License and
21 ! a copy of the GCC Runtime Library Exception along with this program;
22 ! see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23 ! <http://www.gnu.org/licenses/>.
24
25 ! This file takes control of the process from the kernel, as specified
26 ! in section 3 of the SVr4 ABI.
27 ! This file is the first thing linked into any executable.
28
29 #ifdef __sparcv9
30 #define CPTRSIZE 8
31 #define CPTRSHIFT 3
32 #define STACK_BIAS 2047
33 #define ldn ldx
34 #define stn stx
35 #define setn(s, scratch, dst) setx s, scratch, dst
36 #else
37 #define CPTRSIZE 4
38 #define CPTRSHIFT 2
39 #define STACK_BIAS 0
40 #define ldn ld
41 #define stn st
42 #define setn(s, scratch, dst) set s, dst
43 #endif
44
45 .section ".text"
46 .proc 022
47 .global _start
48
49 _start:
50 mov 0, %fp ! Mark bottom frame pointer
51 ldn [%sp + (16 * CPTRSIZE) + STACK_BIAS], %l0 ! argc
52 add %sp, (17 * CPTRSIZE) + STACK_BIAS, %l1 ! argv
53
54 ! Leave some room for a call. Sun leaves 32 octets (to sit on
55 ! a cache line?) so we do too.
56 #ifdef __sparcv9
57 sub %sp, 48, %sp
58 #else
59 sub %sp, 32, %sp
60 #endif
61
62 ! %g1 may contain a function to be registered w/atexit
63 orcc %g0, %g1, %g0
64 #ifdef __sparcv9
65 be %xcc, .nope
66 #else
67 be .nope
68 #endif
69 mov %g1, %o0
70 call atexit
71 nop
72 .nope:
73 ! Now make sure constructors and destructors are handled.
74 setn(_fini, %o1, %o0)
75 call atexit, 1
76 nop
77 call _init, 0
78 nop
79
80 ! We ignore the auxiliary vector; there is no defined way to
81 ! access those data anyway. Instead, go straight to main:
82 mov %l0, %o0 ! argc
83 mov %l1, %o1 ! argv
84 #ifdef GCRT1
85 setn(___Argv, %o4, %o3)
86 stn %o1, [%o3] ! *___Argv
87 #endif
88 ! Skip argc words past argv, to env:
89 sll %l0, CPTRSHIFT, %o2
90 add %o2, CPTRSIZE, %o2
91 add %l1, %o2, %o2 ! env
92 setn(_environ, %o4, %o3)
93 stn %o2, [%o3] ! *_environ
94 call main, 4
95 nop
96 call exit, 0
97 nop
98 call _exit, 0
99 nop
100 ! We should never get here.
101
102 .type _start,#function
103 .size _start,.-_start