1 ! crt1.s for sparc
& sparcv9
(SunOS
5)
3 ! Copyright
(C
) 1992 Free Software Foundation
, Inc.
4 ! Written By David Vinayak Henkel
-Wallace
, June
1992
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 2, or (at your option) any
11 ! In addition to the permissions
in the GNU General
Public License
, the
12 ! Free Software Foundation gives you unlimited permission to link the
13 ! compiled version of
this file with other programs
, and to distribute
14 ! those programs without any restriction coming from the use of
this
15 ! file.
(The General
Public License restrictions do apply
in other
16 ! respects
; for example, they cover modification of the file, and
17 ! distribution when
not linked
into another program.
)
19 ! This file is distributed
in the hope that it will be useful
, but
20 ! WITHOUT ANY WARRANTY
; without even the implied warranty of
21 ! MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22 ! General
Public License for more details.
24 ! You should have received a copy of the GNU General
Public License
25 ! along with
this program
; see the file COPYING. If not, write to
26 ! the Free Software Foundation
, 51 Franklin Street
, Fifth Floor
,
27 ! Boston
, MA
02110-1301, USA.
29 ! As a special exception
, if you link
this library with files
30 ! compiled with GCC to produce an executable
, this does
not cause
31 ! the resulting executable to be covered by the GNU General
Public License.
32 ! This exception does
not however invalidate any other reasons why
33 ! the executable file might be covered by the GNU General
Public License.
36 ! This file takes control of the process from the kernel
, as specified
37 ! in section 3 of the SVr4 ABI.
38 ! This file is the first thing linked
into any executable.
43 #define STACK_BIAS
2047
46 #define setn
(s
, scratch
, dst
) setx s
, scratch
, dst
53 #define setn
(s
, scratch
, dst
) set s
, dst
61 mov 0, %fp
! Mark bottom frame pointer
62 ldn
[%sp + (16 * CPTRSIZE
) + STACK_BIAS
], %l0
! argc
63 add %sp, (17 * CPTRSIZE
) + STACK_BIAS
, %l1
! argv
65 ! Leave some room for a
call. Sun leaves
32 octets
(to sit on
66 ! a cache line
?) so we do too.
73 ! %g1 may contain a function to be registered w
/atexit
84 ! Now make sure constructors
and destructors are handled.
91 ! We ignore the auxiliary vector
; there is no defined way to
92 ! access those data anyway. Instead
, go straight to
main:
96 setn
(___Argv
, %o4
, %o3
)
97 stn
%o1
, [%o3
] ! *___Argv
99 ! Skip argc words past argv
, to
env:
100 sll
%l0
, CPTRSHIFT
, %o2
101 add %o2
, CPTRSIZE
, %o2
102 add %l1
, %o2
, %o2
! env
103 setn
(_environ
, %o4
, %o3
)
104 stn
%o2
, [%o3
] ! *_environ
111 ! We should never get here.
113 .
type _start
,#function
114 .
size _start
,.
-_start