
gcc: * config/t-slibgcc-darwin: Move to ... * config/t-slibgcc-dummy: .. this. Clarify comments. * config.gcc (i[34567]86-*-darwin*, x86_64-*-darwin*, powerpc-*-darwin*, powerpc64-*-darwin*): Reflect this. (i[3456x]86-*-netware*): Add t-slibgcc-dummy to tmake_file. (i[34567]86-*-rtems*): Remove extra_parts. Use i386/t-rtems. Remove i386/t-crtstuff from tmake_file. (i[34567]86-*-solaris2*): Remove t-svr4, t-slibgcc-elf-ver, t-slibgcc-sld from tmake_file, add t-slibgcc-dummy. (sparc-*-elf*, sparc64-*-elf*): Remove tmake_file, extra_parts. (sparc-*-rtems*, sparc64-*-rtems*): Remove sparc/t-crtin, sparc/t-crtfm from tmake_file. (sparc*-*-solaris2*): Remove sparc/t-sol2, sparc/t-crtfm, t-slibgcc-elf-ver, t-slibgcc-sld, add t-slibgcc-dummy. Remove extra_parts. * config/t-sol2 (TARGET_LIBGCC2_CFLAGS): Define. * config/i386/t-nwld (SHLIB_LINK): Remove. * config/i386/t-rtems-i386: Rename to ... * config/i386/t-rtems: ... this. ($(T)crti.o, $(T)crtn.o): Remove. (FPBIT, DPBIT, LIB2FUNCS_EXTRA): Remove. (dp-bit.c, fp-bit.c, xp-bit.c): Remove. (EXTRA_MULTILIB_PARTS, LIBGCC, INSTALL_LIBGCC): Remove. * config/i386/t-sol2-10 (LIBGCC, INSTALL_LIBGCC, EXTRA_MULTILIB_PARTS): Remove. * config/sparc/t-sol2-64: Likewise. * config/sparc/t-sol2: Remove. * config/sparc/t-crtin: Remove. * config/sparc/gmon-sol2.c: Move to ../libgcc/config. * config/i386/gmon-sol2.c: Remove. * config/i386/sol2-c1.asm: Move to ../libgcc/config/i386/sol2-c1.S. * config/i386/sol2-ci.asm: Move to ../libgcc/config/i386/sol2-ci.S. * config/i386/sol2-cn.asm: Move to ../libgcc/config/i386/sol2-cn.S. * config/i386/sol2-gc1.asm: Remove. * config/sparc/sol2-c1.asm: Move to ../libgcc/config/sparc/sol2-c1.S. * config/sparc/sol2-ci.asm: Move to ../libgcc/config/sparc/sol2-ci.S. * config/sparc/sol2-cn.asm: Move to ../libgcc/config/sparc/sol2-cn.S. * config/t-slibgcc-sld: Remove. libgcc: * Makefile.in (cpu_type): Define. * config.host (i[34567]86-*-rtems*): Handle it. (i[34567]86-*-solaris2*): Move body ... (*-*-solaris2*): ... here. New case, generalize. (sparc-*-elf*): Handle it. (sparc-*-linux*, sparc64-*-linux*): Replace sparc/t-crtfm by t-crtfm. (sparc-*-rtems*, sparc64-*-rtems*); Handle it. (sparc64-*-solaris2*, sparcv9-*-solaris2*, sparc-*-solaris2*): Fold into ... (sparc*-*-solaris2*): ... this. New case. (sparc64-*-elf*): Handle it. * config/gmon-sol2.c: Move from ../gcc/config/sparc. Merge ../gcc/config/i386/gmon-sol2.c. * config/i386/sol2-c1.S: Move from ../gcc/config/i386/sol2-c1.asm. Use C comments. Merge ../gcc/config/i386/sol2-gc1.asm. * config/i386/sol2-ci.S: Move from ../gcc/config/i386/sol2-ci.asm. Use C comments. * config/i386/sol2-cn.S: Move from ../gcc/config/i386/sol2-cn.asm. Use C comments. * config/i386/t-crtfm (crtfastmath.o): Use $<. * config/i386/t-crtstuff: New file. * config/i386/t-softfp: New file. * config/i386/t-sol2 ($(T)gmon.o, $(T)gcrt1.o, $(T)crt1.o), $(T)crti.o, $(T)crtn.o): Remove. (gcrt1.o): New rule. (TARGET_LIBGCC2_CFLAGS): Remove. * config/sparc/sol2-c1.S: Move from ../gcc/config/sparc/sol2-c1.asm. * config/sparc/sol2-ci.S: Move from ../gcc/config/sparc/sol2-ci.asm. * config/sparc/sol2-cn.S: Move from ../gcc/config/sparc/sol2-cn.asm. * config/sparc/t-sol2: New file. * config/sparc/t-crtfm: Move to ... * config/t-crtfm: ... this. Use $(cpu_type), $<. * config/t-crtin: New file. * config/sparc/t-softfp: New file. * config/sparc/t-softmul: New file. * config/t-rtems: New file. * config/t-slibgcc: New file. * config/t-slibgcc-elf-ver: New file. * config/t-slibgcc-gld: New file. * config/t-slibgcc-sld: New file. * config/t-sol2: New file. * configure.ac: Include ../config/lib-ld.m4. Call AC_LIB_PROG_LD_GNU. Substitute cpu_type. * configure: Regenerate. From-SVN: r174529
103 lines
2.7 KiB
ArmAsm
103 lines
2.7 KiB
ArmAsm
! 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 pointer
|
|
ldn [%sp + (16 * CPTRSIZE) + STACK_BIAS], %l0 ! argc
|
|
add %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 __sparcv9
|
|
sub %sp, 48, %sp
|
|
#else
|
|
sub %sp, 32, %sp
|
|
#endif
|
|
|
|
! %g1 may contain a function to be registered w/atexit
|
|
orcc %g0, %g1, %g0
|
|
#ifdef __sparcv9
|
|
be %xcc, .nope
|
|
#else
|
|
be .nope
|
|
#endif
|
|
mov %g1, %o0
|
|
call atexit
|
|
nop
|
|
.nope:
|
|
! Now make sure constructors and destructors are handled.
|
|
setn(_fini, %o1, %o0)
|
|
call atexit, 1
|
|
nop
|
|
call _init, 0
|
|
nop
|
|
|
|
! We ignore the auxiliary vector; there is no defined way to
|
|
! access those data anyway. Instead, go straight to main:
|
|
mov %l0, %o0 ! argc
|
|
mov %l1, %o1 ! argv
|
|
#ifdef GCRT1
|
|
setn(___Argv, %o4, %o3)
|
|
stn %o1, [%o3] ! *___Argv
|
|
#endif
|
|
! Skip argc words past argv, to env:
|
|
sll %l0, CPTRSHIFT, %o2
|
|
add %o2, CPTRSIZE, %o2
|
|
add %l1, %o2, %o2 ! env
|
|
setn(_environ, %o4, %o3)
|
|
stn %o2, [%o3] ! *_environ
|
|
call main, 4
|
|
nop
|
|
call exit, 0
|
|
nop
|
|
call _exit, 0
|
|
nop
|
|
! We should never get here.
|
|
|
|
.type _start,#function
|
|
.size _start,.-_start
|