home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OpenStep (Enterprise)
/
OpenStepENTCD.toast
/
OEDEV
/
GNUSRC.Z
/
sol2-nextpdo-c1.asm
< prev
next >
Wrap
Assembly Source File
|
1996-02-07
|
3KB
|
101 lines
! crt1.s for solaris 2.0.
! Copyright (C) 1992 Free Software Foundation, Inc.
! Written By David Vinayak Henkel-Wallace, June 1992
!
! This file is free software; you can redistribute it and/or modify it
! under the terms of the GNU General Public License as published by the
! Free Software Foundation; either version 2, or (at your option) any
! later version.
!
! In addition to the permissions in the GNU General Public License, the
! Free Software Foundation gives you unlimited permission to link the
! compiled version of this file with other programs, and to distribute
! those programs without any restriction coming from the use of this
! file. (The General Public License restrictions do apply in other
! respects; for example, they cover modification of the file, and
! distribution when not linked into another program.)
!
! This file is distributed in the hope that it will be useful, but
! WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! General Public License for more details.
!
! You should have received a copy of the GNU General Public License
! along with this program; see the file COPYING. If not, write to
! the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
!
! As a special exception, if you link this library with files
! compiled with GCC to produce an executable, this does not cause
! the resulting executable to be covered by the GNU General Public License.
! This exception does not however invalidate any other reasons why
! the executable file might be covered by the GNU General Public License.
!
! This file takes control of the process from the kernel, as specified
! in section 3 of the SVr4 ABI.
! This file is the first thing linked into any executable.
.section ".text"
.proc 022
.global _start
_start:
mov 0, %fp ! Mark bottom frame pointer
ld [%sp + 64], %l0 ! argc
add %sp, 68, %l1 ! argv
! Leave some room for a call. Sun leaves 32 octets (to sit on
! a cache line?) so we do too.
sub %sp, 32, %sp
! %g1 may contain a function to be registered w/atexit
orcc %g0, %g1, %g0
be .nope
mov %g1, %o0
call atexit
nop
.nope:
! Now make sure constructors and destructors are handled.
set _fini, %o0
call atexit, 1
nop
call _init, 0
nop
! We ignore the auxiliary vector; there's no defined way to
! access those data anyway. Instead, go straight to main:
mov %l0, %o0 ! argc
mov %l1, %o1 ! argv
! Skip argc words past argv, to env:
sll %l0, 2, %o2
add %o2, 4, %o2
add %l1, %o2, %o2 ! env
! NeXT_PDO
set __NXArgc, %o3
st %o0, [%o3] ! *__NXArgc
set __NXArgv, %o3
st %o1, [%o3] ! *__NXArgv
! NeXT_PDO
set _environ, %o3
st %o2, [%o3] ! *_environ
! NeXT_PDO
sethi %hi(_objcInit_addr),%o4
ld [%o4+%lo(_objcInit_addr)],%o5
cmp %o5,0
be LobjcInit_addr_zero
nop
call %o5,0
nop
LobjcInit_addr_zero:
! NeXT_PDO
call main, 4
nop
call exit, 0
nop
call _exit, 0
nop
! We should never get here.
.type _start,#function
.size _start,.-_start