URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [config/] [sparc/] [sol2-c1.asm] - Rev 282
Compare with Previous | Blame | View Log
! crt1.s for sparc & sparcv9 (SunOS 5)! Copyright (C) 1992, 2009 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 3, or (at your option) any! later version.!! 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.!! Under Section 7 of GPL version 3, you are granted additional! permissions described in the GCC Runtime Library Exception, version! 3.1, as published by the Free Software Foundation.!! You should have received a copy of the GNU General Public License and! a copy of the GCC Runtime Library Exception along with this program;! see the files COPYING3 and COPYING.RUNTIME respectively. If not, see! <http://www.gnu.org/licenses/>.! 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.#ifdef __sparcv9#define CPTRSIZE 8#define CPTRSHIFT 3#define STACK_BIAS 2047#define ldn ldx#define stn stx#define setn(s, scratch, dst) setx s, scratch, dst#else#define CPTRSIZE 4#define CPTRSHIFT 2#define STACK_BIAS 0#define ldn ld#define stn st#define setn(s, scratch, dst) set s, dst#endif.section ".text".proc 022.global _start_start:mov 0, %fp ! Mark bottom frame pointerldn [%sp + (16 * CPTRSIZE) + STACK_BIAS], %l0 ! argcadd %sp, (17 * CPTRSIZE) + STACK_BIAS, %l1 ! argv! Leave some room for a call. Sun leaves 32 octets (to sit on! a cache line?) so we do too.#ifdef __sparcv9sub %sp, 48, %sp#elsesub %sp, 32, %sp#endif! %g1 may contain a function to be registered w/atexitorcc %g0, %g1, %g0#ifdef __sparcv9be %xcc, .nope#elsebe .nope#endifmov %g1, %o0call atexitnop.nope:! Now make sure constructors and destructors are handled.setn(_fini, %o1, %o0)call atexit, 1nopcall _init, 0nop! We ignore the auxiliary vector; there is no defined way to! access those data anyway. Instead, go straight to main:mov %l0, %o0 ! argcmov %l1, %o1 ! argv#ifdef GCRT1setn(___Argv, %o4, %o3)stn %o1, [%o3] ! *___Argv#endif! Skip argc words past argv, to env:sll %l0, CPTRSHIFT, %o2add %o2, CPTRSIZE, %o2add %l1, %o2, %o2 ! envsetn(_environ, %o4, %o3)stn %o2, [%o3] ! *_environcall main, 4nopcall exit, 0nopcall _exit, 0nop! We should never get here..type _start,#function.size _start,.-_start
