Commit ca24c5ad by Rainer Orth Committed by Rainer Orth

t-slibgcc-darwin: Move to ...

	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
parent ce4fc506
2011-06-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* 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.
2011-06-01 Jakub Jelinek <jakub@redhat.com> 2011-06-01 Jakub Jelinek <jakub@redhat.com>
* dwarf2out.c (mem_loc_descriptor) <do_ucompare>: Call * dwarf2out.c (mem_loc_descriptor) <do_ucompare>: Call
......
...@@ -1172,12 +1172,12 @@ i[34567]86-*-darwin*) ...@@ -1172,12 +1172,12 @@ i[34567]86-*-darwin*)
need_64bit_isa=yes need_64bit_isa=yes
# Baseline choice for a machine that allows m64 support. # Baseline choice for a machine that allows m64 support.
with_cpu=${with_cpu:-core2} with_cpu=${with_cpu:-core2}
tmake_file="${tmake_file} t-slibgcc-darwin i386/t-crtpc i386/t-crtfm" tmake_file="${tmake_file} t-slibgcc-dummy i386/t-crtpc i386/t-crtfm"
libgcc_tm_file="$libgcc_tm_file i386/darwin-lib.h" libgcc_tm_file="$libgcc_tm_file i386/darwin-lib.h"
;; ;;
x86_64-*-darwin*) x86_64-*-darwin*)
with_cpu=${with_cpu:-core2} with_cpu=${with_cpu:-core2}
tmake_file="${tmake_file} ${cpu_type}/t-darwin64 t-slibgcc-darwin i386/t-crtpc i386/t-crtfm" tmake_file="${tmake_file} ${cpu_type}/t-darwin64 t-slibgcc-dummy i386/t-crtpc i386/t-crtfm"
tm_file="${tm_file} ${cpu_type}/darwin64.h" tm_file="${tm_file} ${cpu_type}/darwin64.h"
libgcc_tm_file="$libgcc_tm_file i386/darwin-lib.h" libgcc_tm_file="$libgcc_tm_file i386/darwin-lib.h"
;; ;;
...@@ -1301,7 +1301,7 @@ i[3456x]86-*-netware*) ...@@ -1301,7 +1301,7 @@ i[3456x]86-*-netware*)
*/nwld) */nwld)
extra_objs="$extra_objs nwld.o" extra_objs="$extra_objs nwld.o"
tm_file="${tm_file} i386/nwld.h" tm_file="${tm_file} i386/nwld.h"
tmake_file="${tmake_file} i386/t-nwld" tmake_file="${tmake_file} i386/t-nwld t-slibgcc-dummy"
extra_parts="crt0.o libgcc.def libc.def libcpre.def posixpre.def" extra_parts="crt0.o libgcc.def libc.def libcpre.def posixpre.def"
;; ;;
esac esac
...@@ -1321,8 +1321,7 @@ i[34567]86-*-nto-qnx*) ...@@ -1321,8 +1321,7 @@ i[34567]86-*-nto-qnx*)
;; ;;
i[34567]86-*-rtems*) i[34567]86-*-rtems*)
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/i386elf.h i386/rtemself.h rtems.h newlib-stdint.h" tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/i386elf.h i386/rtemself.h rtems.h newlib-stdint.h"
extra_parts="crtbegin.o crtend.o crti.o crtn.o" tmake_file="${tmake_file} i386/t-rtems t-rtems"
tmake_file="${tmake_file} i386/t-rtems-i386 i386/t-crtstuff t-rtems"
;; ;;
i[34567]86-*-solaris2*) i[34567]86-*-solaris2*)
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/sysv4.h sol2.h" tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/sysv4.h sol2.h"
...@@ -1351,16 +1350,13 @@ i[34567]86-*-solaris2*) ...@@ -1351,16 +1350,13 @@ i[34567]86-*-solaris2*)
if test x$gas = xyes; then if test x$gas = xyes; then
tm_file="${tm_file} i386/sol2-gas.h" tm_file="${tm_file} i386/sol2-gas.h"
fi fi
tmake_file="${tmake_file} t-sol2 t-svr4" tmake_file="${tmake_file} t-sol2 t-slibgcc-dummy"
c_target_objs="${c_target_objs} sol2-c.o" c_target_objs="${c_target_objs} sol2-c.o"
cxx_target_objs="${cxx_target_objs} sol2-c.o" cxx_target_objs="${cxx_target_objs} sol2-c.o"
extra_objs="sol2.o" extra_objs="sol2.o"
tm_p_file="${tm_p_file} sol2-protos.h" tm_p_file="${tm_p_file} sol2-protos.h"
if test x$gnu_ld = xyes; then if test x$gnu_ld = xyes; then
tmake_file="$tmake_file t-slibgcc-elf-ver"
tm_defines="${tm_defines} TARGET_GNU_LD=1" tm_defines="${tm_defines} TARGET_GNU_LD=1"
else
tmake_file="$tmake_file t-slibgcc-sld"
fi fi
if test x$gas = xyes; then if test x$gas = xyes; then
tm_file="usegas.h ${tm_file}" tm_file="usegas.h ${tm_file}"
...@@ -1371,9 +1367,6 @@ i[34567]86-*-solaris2*) ...@@ -1371,9 +1367,6 @@ i[34567]86-*-solaris2*)
tm_file="${tm_file} i386/x86-64.h i386/sol2-10.h" tm_file="${tm_file} i386/x86-64.h i386/sol2-10.h"
tm_defines="${tm_defines} TARGET_BI_ARCH=1" tm_defines="${tm_defines} TARGET_BI_ARCH=1"
tmake_file="$tmake_file i386/t-sol2-10" tmake_file="$tmake_file i386/t-sol2-10"
# i386/t-crtstuff only affects libgcc. Its inclusion
# depends on a runtime test and is thus performed in
# libgcc/configure.ac instead.
need_64bit_hwint=yes need_64bit_hwint=yes
need_64bit_isa=yes need_64bit_isa=yes
use_gcc_stdint=wrap use_gcc_stdint=wrap
...@@ -2010,13 +2003,13 @@ powerpc-*-darwin*) ...@@ -2010,13 +2003,13 @@ powerpc-*-darwin*)
*-darwin[0-6]*) *-darwin[0-6]*)
;; ;;
esac esac
tmake_file="${tmake_file} t-slibgcc-darwin" tmake_file="${tmake_file} t-slibgcc-dummy"
extra_headers=altivec.h extra_headers=altivec.h
;; ;;
powerpc64-*-darwin*) powerpc64-*-darwin*)
extra_options="${extra_options} ${cpu_type}/darwin.opt" extra_options="${extra_options} ${cpu_type}/darwin.opt"
extra_parts="crt2.o" extra_parts="crt2.o"
tmake_file="${tmake_file} ${cpu_type}/t-darwin64 t-slibgcc-darwin" tmake_file="${tmake_file} ${cpu_type}/t-darwin64 t-slibgcc-dummy"
tm_file="${tm_file} ${cpu_type}/darwin8.h ${cpu_type}/darwin64.h" tm_file="${tm_file} ${cpu_type}/darwin8.h ${cpu_type}/darwin64.h"
extra_headers=altivec.h extra_headers=altivec.h
;; ;;
...@@ -2442,13 +2435,10 @@ sparc-*-elf*) ...@@ -2442,13 +2435,10 @@ sparc-*-elf*)
tmake_file="sparc/t-elf" tmake_file="sparc/t-elf"
;; ;;
esac esac
tmake_file="${tmake_file} sparc/t-crtin sparc/t-crtfm"
extra_parts="crtbegin.o crtend.o"
;; ;;
sparc-*-rtems*) sparc-*-rtems*)
tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h newlib-stdint.h" tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h sparc/sp-elf.h sparc/rtemself.h rtems.h newlib-stdint.h"
tmake_file="sparc/t-elf sparc/t-crtin sparc/t-crtfm t-rtems" tmake_file="sparc/t-elf t-rtems"
extra_parts="crtbegin.o crtend.o"
;; ;;
sparc-*-linux*) sparc-*-linux*)
tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h" tm_file="${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h"
...@@ -2505,12 +2495,7 @@ sparc*-*-solaris2*) ...@@ -2505,12 +2495,7 @@ sparc*-*-solaris2*)
tm_file="${tm_file} sol2-gld.h sparc/sol2-gld-bi.h" tm_file="${tm_file} sol2-gld.h sparc/sol2-gld-bi.h"
fi fi
tm_file="${tm_file} tm-dwarf2.h" tm_file="${tm_file} tm-dwarf2.h"
tmake_file="t-sol2 sparc/t-sol2 sparc/t-sol2-64 sparc/t-crtin sparc/t-crtfm" tmake_file="t-sol2 t-slibgcc-dummy sparc/t-sol2-64"
if test x$gnu_ld = xyes; then
tmake_file="$tmake_file t-slibgcc-elf-ver"
else
tmake_file="$tmake_file t-slibgcc-sld"
fi
if test x$gas = xyes; then if test x$gas = xyes; then
tm_file="usegas.h ${tm_file}" tm_file="usegas.h ${tm_file}"
fi fi
...@@ -2518,7 +2503,6 @@ sparc*-*-solaris2*) ...@@ -2518,7 +2503,6 @@ sparc*-*-solaris2*)
cxx_target_objs="sol2-c.o" cxx_target_objs="sol2-c.o"
extra_objs="sol2.o" extra_objs="sol2.o"
tm_p_file="${tm_p_file} sol2-protos.h" tm_p_file="${tm_p_file} sol2-protos.h"
extra_parts="crt1.o gcrt1.o gmon.o crtbegin.o crtend.o"
case ${enable_threads}:${have_pthread_h}:${have_thread_h} in case ${enable_threads}:${have_pthread_h}:${have_thread_h} in
"":yes:* | yes:yes:* ) "":yes:* | yes:yes:* )
thread_file=posix thread_file=posix
...@@ -2532,14 +2516,11 @@ sparc-wrs-vxworks) ...@@ -2532,14 +2516,11 @@ sparc-wrs-vxworks)
sparc64-*-elf*) sparc64-*-elf*)
tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h sparc/sysv4.h sparc/sp64-elf.h" tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h sparc/sysv4.h sparc/sp64-elf.h"
extra_options="${extra_options} sparc/little-endian.opt" extra_options="${extra_options} sparc/little-endian.opt"
tmake_file="${tmake_file} sparc/t-crtin sparc/t-crtfm"
extra_parts="crtbegin.o crtend.o"
;; ;;
sparc64-*-rtems*) sparc64-*-rtems*)
tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h sparc/sysv4.h sparc/sp64-elf.h sparc/rtemself.h rtems.h" tm_file="${tm_file} dbxelf.h elfos.h newlib-stdint.h sparc/sysv4.h sparc/sp64-elf.h sparc/rtemself.h rtems.h"
extra_options="${extra_options} sparc/little-endian.opt" extra_options="${extra_options} sparc/little-endian.opt"
tmake_file="${tmake_file} sparc/t-crtin sparc/t-crtfm t-rtems" tmake_file="${tmake_file} t-rtems"
extra_parts="crtbegin.o crtend.o"
;; ;;
sparc64-*-linux*) sparc64-*-linux*)
tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/linux64.h" tm_file="sparc/biarch64.h ${tm_file} dbxelf.h elfos.h sparc/sysv4.h gnu-user.h linux.h glibc-stdint.h sparc/linux64.h"
......
! crt1.s for Solaris 2, x86
! Copyright (C) 1993, 1998, 2008, 2009 Free Software Foundation, Inc.
! Written By Fred Fish, Nov 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 System V Application Binary Interface, Intel386
! Processor Supplement. It has been constructed from information obtained
! from the ABI, information obtained from single stepping existing
! Solaris executables through their startup code with gdb, and from
! information obtained by single stepping executables on other i386 SVR4
! implementations. This file is the first thing linked into any executable.
.ident "GNU C crt1.s"
.weak _cleanup
.weak _DYNAMIC
.text
! Start creating the initial frame by pushing a NULL value for the return
! address of the initial frame, and mark the end of the stack frame chain
! (the innermost stack frame) with a NULL value, per page 3-32 of the ABI.
! Initialize the first stack frame pointer in %ebp (the contents of which
! are unspecified at process initialization).
.globl _start
_start:
pushl $0x0
pushl $0x0
movl %esp,%ebp
! As specified per page 3-32 of the ABI, %edx contains a function
! pointer that should be registered with atexit(), for proper
! shared object termination. Just push it onto the stack for now
! to preserve it. We want to register _cleanup() first.
pushl %edx
! Check to see if there is an _cleanup() function linked in, and if
! so, register it with atexit() as the last thing to be run by
! atexit().
movl $_cleanup,%eax
testl %eax,%eax
je .L1
pushl $_cleanup
call atexit
addl $0x4,%esp
.L1:
! Now check to see if we have an _DYNAMIC table, and if so then
! we need to register the function pointer previously in %edx, but
! now conveniently saved on the stack as the argument to pass to
! atexit().
movl $_DYNAMIC,%eax
testl %eax,%eax
je .L2
call atexit
.L2:
! Register _fini() with atexit(). We will take care of calling _init()
! directly.
pushl $_fini
call atexit
! Compute the address of the environment vector on the stack and load
! it into the global variable _environ. Currently argc is at 8 off
! the frame pointer. Fetch the argument count into %eax, scale by the
! size of each arg (4 bytes) and compute the address of the environment
! vector which is 16 bytes (the two zero words we pushed, plus argc,
! plus the null word terminating the arg vector) further up the stack,
! off the frame pointer (whew!).
movl 8(%ebp),%eax
leal 16(%ebp,%eax,4),%edx
movl %edx,_environ
! Push the environment vector pointer, the argument vector pointer,
! and the argument count on to the stack to set up the arguments
! for _init(), _fpstart(), and main(). Note that the environment
! vector pointer and the arg count were previously loaded into
! %edx and %eax respectively. The only new value we need to compute
! is the argument vector pointer, which is at a fixed address off
! the initial frame pointer.
!
! Make sure the stack is properly aligned.
!
andl $0xfffffff0,%esp
subl $4,%esp
pushl %edx
leal 12(%ebp),%edx
pushl %edx
pushl %eax
! Call _init(argc, argv, environ), _fpstart(argc, argv, environ), and
! main(argc, argv, environ).
call _init
call __fpstart
call main
! Pop the argc, argv, and environ arguments off the stack, push the
! value returned from main(), and call exit().
addl $12,%esp
pushl %eax
call exit
! An inline equivalent of _exit, as specified in Figure 3-26 of the ABI.
pushl $0x0
movl $0x1,%eax
lcall $7,$0
! If all else fails, just try a halt!
hlt
.type _start,@function
.size _start,.-_start
! A dummy profiling support routine for non-profiling executables,
! in case we link in some objects that have been compiled for profiling.
.weak _mcount
_mcount:
ret
.type _mcount,@function
.size _mcount,.-_mcount
! crti.s for Solaris 2, x86.
! Copyright (C) 1993, 2008, 2009 Free Software Foundation, Inc.
! Written By Fred Fish, Nov 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 just supplies labeled starting points for the .init and .fini
! sections. It is linked in before the values-Xx.o files and also before
! crtbegin.o.
.ident "GNU C crti.s"
.section .init
.globl _init
.type _init,@function
_init:
.section .fini
.globl _fini
.type _fini,@function
_fini:
! crtn.s for Solaris 2, x86.
! Copyright (C) 1993, 2008, 2009 Free Software Foundation, Inc.
! Written By Fred Fish, Nov 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 just supplies returns for the .init and .fini sections. It is
! linked in after all other files.
.ident "GNU C crtn.o"
.section .init
ret $0x0
.section .fini
ret $0x0
! gcrt1.s for Solaris 2, x86
! Copyright (C) 1993, 2008, 2009 Free Software Foundation, Inc.
! Written By Fred Fish, Nov 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 System V Application Binary Interface, Intel386
! Processor Supplement. It has been constructed from information obtained
! from the ABI, information obtained from single stepping existing
! Solaris executables through their startup code with gdb, and from
! information obtained by single stepping executables on other i386 SVR4
! implementations. This file is the first thing linked into any executable.
! This is a modified crt1.s by J.W.Hawtin <oolon@ankh.org> 15/8/96,
! to allow program profiling, by calling monstartup on entry and _mcleanup
! on exit
.ident "GNU C gcrt1.s"
.weak _DYNAMIC
.text
! Start creating the initial frame by pushing a NULL value for the return
! address of the initial frame, and mark the end of the stack frame chain
! (the innermost stack frame) with a NULL value, per page 3-32 of the ABI.
! Initialize the first stack frame pointer in %ebp (the contents of which
! are unspecified at process initialization).
.globl _start
_start:
pushl $0x0
pushl $0x0
movl %esp,%ebp
! As specified per page 3-32 of the ABI, %edx contains a function
! pointer that should be registered with atexit(), for proper
! shared object termination. Just push it onto the stack for now
! to preserve it. We want to register _cleanup() first.
pushl %edx
! Check to see if there is an _cleanup() function linked in, and if
! so, register it with atexit() as the last thing to be run by
! atexit().
movl $_mcleanup,%eax
testl %eax,%eax
je .L1
pushl $_mcleanup
call atexit
addl $0x4,%esp
.L1:
! Now check to see if we have an _DYNAMIC table, and if so then
! we need to register the function pointer previously in %edx, but
! now conveniently saved on the stack as the argument to pass to
! atexit().
movl $_DYNAMIC,%eax
testl %eax,%eax
je .L2
call atexit
.L2:
! Register _fini() with atexit(). We will take care of calling _init()
! directly.
pushl $_fini
call atexit
! Start profiling
pushl %ebp
movl %esp,%ebp
pushl $_etext
pushl $_start
call monstartup
addl $8,%esp
popl %ebp
! Compute the address of the environment vector on the stack and load
! it into the global variable _environ. Currently argc is at 8 off
! the frame pointer. Fetch the argument count into %eax, scale by the
! size of each arg (4 bytes) and compute the address of the environment
! vector which is 16 bytes (the two zero words we pushed, plus argc,
! plus the null word terminating the arg vector) further up the stack,
! off the frame pointer (whew!).
movl 8(%ebp),%eax
leal 16(%ebp,%eax,4),%edx
movl %edx,_environ
! Push the environment vector pointer, the argument vector pointer,
! and the argument count on to the stack to set up the arguments
! for _init(), _fpstart(), and main(). Note that the environment
! vector pointer and the arg count were previously loaded into
! %edx and %eax respectively. The only new value we need to compute
! is the argument vector pointer, which is at a fixed address off
! the initial frame pointer.
!
! Make sure the stack is properly aligned.
!
andl $0xfffffff0,%esp
subl $4,%esp
pushl %edx
leal 12(%ebp),%edx
pushl %edx
pushl %eax
! Call _init(argc, argv, environ), _fpstart(argc, argv, environ), and
! main(argc, argv, environ).
call _init
call __fpstart
call main
! Pop the argc, argv, and environ arguments off the stack, push the
! value returned from main(), and call exit().
addl $12,%esp
pushl %eax
call exit
! An inline equivalent of _exit, as specified in Figure 3-26 of the ABI.
pushl $0x0
movl $0x1,%eax
lcall $7,$0
! If all else fails, just try a halt!
hlt
.type _start,@function
.size _start,.-_start
...@@ -45,6 +45,3 @@ nwld.o: $(srcdir)/config/i386/nwld.c $(RTL_H) $(TREE_H) $(CONFIG_H) $(TM_P_H) ...@@ -45,6 +45,3 @@ nwld.o: $(srcdir)/config/i386/nwld.c $(RTL_H) $(TREE_H) $(CONFIG_H) $(TM_P_H)
s-crt0: $(srcdir)/unwind-dw2-fde.h s-crt0: $(srcdir)/unwind-dw2-fde.h
# To keep DRIVER_DEFINES correct.
SHLIB_LINK = dummy
# Copyright (C) 1999, 2001, 2002, 2005, 2007 Free Software Foundation, Inc. # Copyright (C) 1999, 2001, 2002, 2005, 2007, 2011
# Free Software Foundation, Inc.
# #
# This file is part of GCC. # This file is part of GCC.
# #
...@@ -16,43 +17,6 @@ ...@@ -16,43 +17,6 @@
# along with GCC; see the file COPYING3. If not see # along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>. # <http://www.gnu.org/licenses/>.
# #
#
# This file was based on t-sol2 - x68 Solaris implementation. Actually,
# the source code to create crti.o anf crtn.o are exactly the same
# as the ones for Solaris. Later, we might want to have a RTEMS's
# version of these files.
#
$(T)crti.o: $(srcdir)/config/i386/sol2-ci.asm $(GCC_PASSES)
sed -e '/^!/d' <$(srcdir)/config/i386/sol2-ci.asm >crti.s
$(GCC_FOR_TARGET) -c -o $(T)crti.o crti.s
$(T)crtn.o: $(srcdir)/config/i386/sol2-cn.asm $(GCC_PASSES)
sed -e '/^!/d' <$(srcdir)/config/i386/sol2-cn.asm >crtn.s
$(GCC_FOR_TARGET) -c -o $(T)crtn.o crtn.s
# We want fine grained libraries, so use the new code to build the
# floating point emulation libraries.
FPBIT = fp-bit.c
DPBIT = dp-bit.c
LIB2FUNCS_EXTRA = xp-bit.c
dp-bit.c: $(srcdir)/config/fp-bit.c
echo '#ifdef __LITTLE_ENDIAN__' > dp-bit.c
echo '#define FLOAT_BIT_ORDER_MISMATCH' >>dp-bit.c
echo '#endif' >> dp-bit.c
cat $(srcdir)/config/fp-bit.c >> dp-bit.c
fp-bit.c: $(srcdir)/config/fp-bit.c
echo '#define FLOAT' > fp-bit.c
echo '#ifdef __LITTLE_ENDIAN__' >> fp-bit.c
echo '#define FLOAT_BIT_ORDER_MISMATCH' >>fp-bit.c
echo '#endif' >> fp-bit.c
cat $(srcdir)/config/fp-bit.c >> fp-bit.c
xp-bit.c: $(srcdir)/config/fp-bit.c
echo '#define EXTENDED_FLOAT_STUBS' > xp-bit.c
cat $(srcdir)/config/fp-bit.c >> xp-bit.c
MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro \ MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro \
msoft-float msoft-float
...@@ -62,8 +26,3 @@ MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?mathlon ...@@ -62,8 +26,3 @@ MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?mathlon
MULTILIB_EXCEPTIONS = \ MULTILIB_EXCEPTIONS = \
mtune=pentium/*msoft-float* \ mtune=pentium/*msoft-float* \
mtune=pentiumpro/*msoft-float* mtune=pentiumpro/*msoft-float*
EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
# Copyright (C) 2004 Free Software Foundation, Inc. # Copyright (C) 2004, 2011 Free Software Foundation, Inc.
# #
# This file is part of GCC. # This file is part of GCC.
# #
...@@ -19,11 +19,3 @@ ...@@ -19,11 +19,3 @@
MULTILIB_OPTIONS = m32/m64 MULTILIB_OPTIONS = m32/m64
MULTILIB_DIRNAMES = 32 amd64 MULTILIB_DIRNAMES = 32 amd64
MULTILIB_OSDIRNAMES = . amd64 MULTILIB_OSDIRNAMES = . amd64
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
# GCC contains i386 assembler sources for some of the startfiles
# which aren't appropriate for amd64. Just use the installed
# versions of: crt1.o crti.o crtn.o gcrt1.o
EXTRA_MULTILIB_PARTS=gmon.o crtbegin.o crtend.o
EXTRA_PARTS += crti.o crtn.o
$(T)crti.o: $(srcdir)/config/sparc/sol2-ci.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-ci.asm
$(T)crtn.o: $(srcdir)/config/sparc/sol2-cn.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-cn.asm
...@@ -2,6 +2,3 @@ MULTILIB_OPTIONS = m32/m64 ...@@ -2,6 +2,3 @@ MULTILIB_OPTIONS = m32/m64
MULTILIB_DIRNAMES = sparcv8plus sparcv9 MULTILIB_DIRNAMES = sparcv8plus sparcv9
MULTILIB_MATCHES = MULTILIB_MATCHES =
MULTILIB_OSDIRNAMES = . sparcv9 MULTILIB_OSDIRNAMES = . sparcv9
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib
# To keep DRIVER_DEFINES correct.
SHLIB_LINK = dummy
# SHLIB_LINK must be non-empty so ENABLE_SHARED_LIBGCC is defined correctly
# in DRIVER_DEFINES if libgcc configuration has been moved to toplevel.
SHLIB_LINK = dummy
...@@ -29,6 +29,9 @@ sol2.o: $(srcdir)/config/sol2.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ ...@@ -29,6 +29,9 @@ sol2.o: $(srcdir)/config/sol2.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
$(srcdir)/config/sol2.c $(srcdir)/config/sol2.c
# This is required by gcc/ada/gcc-interface/Makefile.in.
TARGET_LIBGCC2_CFLAGS = -fPIC
# Use unwind-dw2-fde-glibc.c. Unless linker support and dl_iterate_phdr # Use unwind-dw2-fde-glibc.c. Unless linker support and dl_iterate_phdr
# are present, automatically falls back to unwind-dw2-fde.c. # are present, automatically falls back to unwind-dw2-fde.c.
LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \ LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \
......
2011-06-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* 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.
2011-05-27 Bernd Schmidt <bernds@codesourcery.com> 2011-05-27 Bernd Schmidt <bernds@codesourcery.com>
PR bootstrap/49173 PR bootstrap/49173
......
# Makefile.in # Makefile.in
# Copyright (C) 2005, 2006, 2009, 2010 Free Software Foundation # Copyright (C) 2005, 2006, 2009, 2010, 2011 Free Software Foundation
# #
# This file is part of GCC. # This file is part of GCC.
# #
...@@ -35,6 +35,7 @@ shlib_slibdir = @slibdir@ ...@@ -35,6 +35,7 @@ shlib_slibdir = @slibdir@
SHELL = @SHELL@ SHELL = @SHELL@
cpu_type = @cpu_type@
enable_shared = @enable_shared@ enable_shared = @enable_shared@
decimal_float = @decimal_float@ decimal_float = @decimal_float@
enable_decimal_float = @enable_decimal_float@ enable_decimal_float = @enable_decimal_float@
......
# libgcc host-specific configuration file. # libgcc host-specific configuration file.
# Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, # Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
# 2008, 2009, 2010 Free Software Foundation, Inc. # 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
#This file is part of GCC. #This file is part of GCC.
...@@ -168,6 +168,31 @@ case ${host} in ...@@ -168,6 +168,31 @@ case ${host} in
;; ;;
*-*-rtems*) *-*-rtems*)
;; ;;
*-*-solaris2*)
tmake_file="$tmake_file t-sol2 t-slibgcc t-slibgcc-elf-ver"
if test $with_gnu_ld = yes; then
tmake_file="$tmake_file t-slibgcc-gld"
else
tmake_file="$tmake_file t-slibgcc-sld"
fi
# Add cpu-specific t-sol2 after t-slibgcc-* so it can augment SHLIB_MAPFILES.
tmake_file="$tmake_file $cpu_type/t-sol2"
extra_parts="gmon.o crtbegin.o crtend.o"
case ${host} in
i?86-*-solaris2.1[0-9]*)
# Solaris 10+/x86 provides crt1.o, crti.o, crtn.o, and gcrt1.o as
# part of the base system.
;;
sparc*-*-solaris2.1[0-9]*)
# Solaris 10+/SPARC lacks crt1.o and gcrt1.o.
extra_parts="$extra_parts crt1.o gcrt1.o"
;;
*)
tmake_file="$tmake_file t-crtin"
extra_parts="$extra_parts crt1.o crti.o crtn.o gcrt1.o"
;;
esac
;;
*-*-vxworks*) *-*-vxworks*)
;; ;;
*-*-elf) *-*-elf)
...@@ -309,19 +334,10 @@ i[3456x]86-*-netware*) ...@@ -309,19 +334,10 @@ i[3456x]86-*-netware*)
i[34567]86-*-nto-qnx*) i[34567]86-*-nto-qnx*)
;; ;;
i[34567]86-*-rtems*) i[34567]86-*-rtems*)
extra_parts="crtbegin.o crtend.o crti.o crtn.o"
tmake_file="${tmake_file} t-crtin i386/t-softfp i386/t-crtstuff t-rtems"
;; ;;
i[34567]86-*-solaris2*) i[34567]86-*-solaris2*)
tmake_file="${tmake_file} i386/t-sol2"
case ${host} in
*-*-solaris2.1[0-9]*)
# Solaris 2.10 provides crt1.o, crti.o, crtn.o, and gcrt1.o as
# part of the base system.
extra_parts="gmon.o crtbegin.o crtend.o"
;;
*)
extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
;;
esac
;; ;;
i[4567]86-wrs-vxworks|i[4567]86-wrs-vxworksae) i[4567]86-wrs-vxworks|i[4567]86-wrs-vxworksae)
;; ;;
...@@ -519,18 +535,31 @@ sparc-*-netbsdelf*) ...@@ -519,18 +535,31 @@ sparc-*-netbsdelf*)
sparc64-*-openbsd*) sparc64-*-openbsd*)
;; ;;
sparc-*-elf*) sparc-*-elf*)
case ${host} in
*-leon[3-9]*)
;;
*)
tmake_file="sparc/t-softmul"
;;
esac
tmake_file="${tmake_file} sparc/t-softfp t-crtin t-crtfm"
extra_parts="crtbegin.o crtend.o crti.o crtn.o crtfastmath.o"
;; ;;
sparc-*-linux*) # SPARC's running GNU/Linux, libc6 sparc-*-linux*) # SPARC's running GNU/Linux, libc6
extra_parts="$extra_parts crtfastmath.o" extra_parts="$extra_parts crtfastmath.o"
tmake_file="${tmake_file} sparc/t-crtfm" tmake_file="${tmake_file} t-crtfm"
;; ;;
sparc-*-rtems* | sparc64-*-rtems* ) sparc-*-rtems* | sparc64-*-rtems* )
tmake_file="sparc/t-elf t-crtin t-crtfm t-rtems"
extra_parts="crtbegin.o crtend.o crti.o crtn.o crtfastmath.o"
;; ;;
sparc64-*-solaris2* | sparcv9-*-solaris2*) sparc*-*-solaris2*)
;; tmake_file="$tmake_file t-crtfm"
sparc-*-solaris2*) extra_parts="$extra_parts crtfastmath.o"
;; ;;
sparc64-*-elf*) sparc64-*-elf*)
tmake_file="${tmake_file} t-crtin t-crtfm"
extra_parts="crtbegin.o crtend.o crti.o crtn.o crtfastmath.o"
;; ;;
sparc-wrs-vxworks) sparc-wrs-vxworks)
;; ;;
...@@ -538,7 +567,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd*) ...@@ -538,7 +567,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd*)
;; ;;
sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux
extra_parts="$extra_parts crtfastmath.o" extra_parts="$extra_parts crtfastmath.o"
tmake_file="${tmake_file} sparc/t-crtfm" tmake_file="${tmake_file} t-crtfm"
;; ;;
sparc64-*-netbsd*) sparc64-*-netbsd*)
;; ;;
......
...@@ -28,7 +28,10 @@ ...@@ -28,7 +28,10 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
/* /* FIXME: Check comment. */
/* Mangled into a form that works on SPARC Solaris 2 by Mark Eichin
* for Cygnus Support, July 1992.
*
* This is a modified gmon.c by J.W.Hawtin <oolon@ankh.org>, * This is a modified gmon.c by J.W.Hawtin <oolon@ankh.org>,
* 14/8/96 based on the original gmon.c in GCC and the hacked version * 14/8/96 based on the original gmon.c in GCC and the hacked version
* solaris 2 sparc version (config/sparc/gmon-sol.c) by Mark Eichin. To do * solaris 2 sparc version (config/sparc/gmon-sol.c) by Mark Eichin. To do
...@@ -64,19 +67,11 @@ ...@@ -64,19 +67,11 @@
static void moncontrol (int); static void moncontrol (int);
extern void monstartup (char *, char *); extern void monstartup (char *, char *);
extern void _mcleanup (void); extern void _mcleanup (void);
extern void internal_mcount (
#ifdef __x86_64__
char *, unsigned short *
#else
void
#endif
);
struct phdr { struct phdr {
char *lpc; char *lpc;
char *hpc; char *hpc;
int ncnt; int ncnt;
}; };
...@@ -102,11 +97,15 @@ struct rawarc { ...@@ -102,11 +97,15 @@ struct rawarc {
#define ROUNDDOWN(x,y) (((x)/(y))*(y)) #define ROUNDDOWN(x,y) (((x)/(y))*(y))
#define ROUNDUP(x,y) ((((x)+(y)-1)/(y))*(y)) #define ROUNDUP(x,y) ((((x)+(y)-1)/(y))*(y))
/* char *minbrk; */ /* extern mcount() asm ("mcount"); */
/*extern*/ char *minbrk /* asm ("minbrk") */;
typedef __SIZE_TYPE__ size_t; typedef __SIZE_TYPE__ size_t;
typedef __PTRDIFF_TYPE__ intptr_t; typedef __PTRDIFF_TYPE__ intptr_t;
extern int errno;
extern void *sbrk (intptr_t);
/* /*
* froms is actually a bunch of unsigned shorts indexing tos * froms is actually a bunch of unsigned shorts indexing tos
*/ */
...@@ -126,12 +125,11 @@ static int s_scale; ...@@ -126,12 +125,11 @@ static int s_scale;
#define MSG "No space for profiling buffer(s)\n" #define MSG "No space for profiling buffer(s)\n"
extern int errno; static void moncontrol (int);
extern void monstartup (char *, char *);
extern void *sbrk (intptr_t); extern void _mcleanup (void);
void void monstartup(char *lowpc, char *highpc)
monstartup(char *lowpc, char *highpc)
{ {
size_t monsize; size_t monsize;
char *buffer; char *buffer;
...@@ -173,7 +171,7 @@ monstartup(char *lowpc, char *highpc) ...@@ -173,7 +171,7 @@ monstartup(char *lowpc, char *highpc)
tos = 0; tos = 0;
return; return;
} }
/* minbrk = (char *) sbrk(0);*/ minbrk = sbrk(0);
tos[0].link = 0; tos[0].link = 0;
sbuf = buffer; sbuf = buffer;
ssiz = monsize; ssiz = monsize;
...@@ -207,7 +205,7 @@ monstartup(char *lowpc, char *highpc) ...@@ -207,7 +205,7 @@ monstartup(char *lowpc, char *highpc)
} }
void void
_mcleanup (void) _mcleanup(void)
{ {
int fd; int fd;
int fromindex; int fromindex;
...@@ -215,11 +213,35 @@ _mcleanup (void) ...@@ -215,11 +213,35 @@ _mcleanup (void)
char *frompc; char *frompc;
int toindex; int toindex;
struct rawarc rawarc; struct rawarc rawarc;
char *profdir;
const char *proffile;
char *progname;
char buf[PATH_MAX];
extern char **___Argv;
moncontrol(0); moncontrol(0);
fd = creat( "gmon.out" , 0666 );
if ((profdir = getenv("PROFDIR")) != NULL) {
/* If PROFDIR contains a null value, no profiling output is produced */
if (*profdir == '\0') {
return;
}
progname=strrchr(___Argv[0], '/');
if (progname == NULL)
progname=___Argv[0];
else
progname++;
sprintf(buf, "%s/%ld.%s", profdir, (long) getpid(), progname);
proffile = buf;
} else {
proffile = "gmon.out";
}
fd = creat( proffile, 0666 );
if ( fd < 0 ) { if ( fd < 0 ) {
perror( "mcount: gmon.out" ); perror( proffile );
return; return;
} }
# ifdef DEBUG # ifdef DEBUG
...@@ -248,7 +270,53 @@ _mcleanup (void) ...@@ -248,7 +270,53 @@ _mcleanup (void)
close( fd ); close( fd );
} }
#ifdef __x86_64__ #ifdef __sparc__
/*
* The SPARC stack frame is only held together by the frame pointers
* in the register windows. According to the SVR4 SPARC ABI
* Supplement, Low Level System Information/Operating System
* Interface/Software Trap Types, a type 3 trap will flush all of the
* register windows to the stack, which will make it possible to walk
* the frames and find the return addresses.
* However, it seems awfully expensive to incur a trap (system
* call) for every function call. It turns out that "call" simply puts
* the return address in %o7 expecting the "save" in the procedure to
* shift it into %i7; this means that before the "save" occurs, %o7
* contains the address of the call to mcount, and %i7 still contains
* the caller above that. The asm mcount here simply saves those
* registers in argument registers and branches to internal_mcount,
* simulating a call with arguments.
* Kludges:
* 1) the branch to internal_mcount is hard coded; it should be
* possible to tell asm to use the assembler-name of a symbol.
* 2) in theory, the function calling mcount could have saved %i7
* somewhere and reused the register; in practice, I *think* this will
* break longjmp (and maybe the debugger) but I'm not certain. (I take
* some comfort in the knowledge that it will break the native mcount
* as well.)
* 3) if builtin_return_address worked, this could be portable.
* However, it would really have to be optimized for arguments of 0
* and 1 and do something like what we have here in order to avoid the
* trap per function call performance hit.
* 4) the atexit and monsetup calls prevent this from simply
* being a leaf routine that doesn't do a "save" (and would thus have
* access to %o7 and %i7 directly) but the call to write() at the end
* would have also prevented this.
*
* -- [eichin:19920702.1107EST]
*/
static void internal_mcount (char *, unsigned short *) __attribute__ ((used));
/* i7 == last ret, -> frompcindex */
/* o7 == current ret, -> selfpc */
/* Solaris 2 libraries use _mcount. */
asm(".global _mcount; _mcount: mov %i7,%o1; mov %o7,%o0;b,a internal_mcount");
/* This is for compatibility with old versions of gcc which used mcount. */
asm(".global mcount; mcount: mov %i7,%o1; mov %o7,%o0;b,a internal_mcount");
#elif defined __x86_64__
extern void internal_mcount (char *, unsigned short *);
/* See GLIBC for additional information about this technique. */ /* See GLIBC for additional information about this technique. */
asm(".globl _mcount\n" asm(".globl _mcount\n"
"\t.type\t_mcount, @function\n" "\t.type\t_mcount, @function\n"
...@@ -281,15 +349,20 @@ asm(".globl _mcount\n" ...@@ -281,15 +349,20 @@ asm(".globl _mcount\n"
"\tretq\n" "\tretq\n"
); );
#else #else
/* Solaris 2 libraries use _mcount. */ extern void internal_mcount (void);
/* Solaris 2 libraries use _mcount. */
asm(".globl _mcount; _mcount: jmp internal_mcount"); asm(".globl _mcount; _mcount: jmp internal_mcount");
/* This is for compatibility with old versions of gcc which used mcount. */ /* This is for compatibility with old versions of gcc which used mcount. */
asm(".globl mcount; mcount: jmp internal_mcount"); asm(".globl mcount; mcount: jmp internal_mcount");
#endif #endif
#ifdef __sparc__
static
#endif
void void
internal_mcount ( internal_mcount (
#ifdef __x86_64__ #if defined __sparc__ || defined __x86_64__
char *selfpc, char *selfpc,
unsigned short *frompcindex unsigned short *frompcindex
#else #else
...@@ -297,7 +370,7 @@ internal_mcount ( ...@@ -297,7 +370,7 @@ internal_mcount (
#endif #endif
) )
{ {
#ifndef __x86_64__ #if !defined __sparc__ && !defined __x86_64__
register char *selfpc; register char *selfpc;
register unsigned short *frompcindex; register unsigned short *frompcindex;
#endif #endif
...@@ -306,7 +379,7 @@ internal_mcount ( ...@@ -306,7 +379,7 @@ internal_mcount (
register long toindex; register long toindex;
static char already_setup; static char already_setup;
#ifndef __x86_64__ #if !defined __sparc__ && !defined __x86_64__
/* /*
* find the return address for mcount, * find the return address for mcount,
* and the return address for mcount's caller. * and the return address for mcount's caller.
...@@ -322,8 +395,14 @@ internal_mcount ( ...@@ -322,8 +395,14 @@ internal_mcount (
if(!already_setup) { if(!already_setup) {
extern char etext[]; extern char etext[];
#ifdef __sparc__
extern char _start[];
extern char _init[];
#endif
already_setup = 1; already_setup = 1;
#ifdef __x86_64__ #if defined __sparc__
monstartup(_start < _init ? _start : _init, etext);
#elif defined __x86_64__
monstartup(0, etext); monstartup(0, etext);
#else #else
monstartup((char*)0x08040000, etext); monstartup((char*)0x08040000, etext);
...@@ -440,20 +519,18 @@ overflow: ...@@ -440,20 +519,18 @@ overflow:
* profiling is what mcount checks to see if * profiling is what mcount checks to see if
* all the data structures are ready. * all the data structures are ready.
*/ */
static void static void moncontrol(int mode)
moncontrol(int mode)
{ {
if (mode) if (mode) {
{ /* start */
/* start */ profil((unsigned short *)(sbuf + sizeof(struct phdr)),
profil((unsigned short *)(sbuf + sizeof(struct phdr)), ssiz - sizeof(struct phdr),
ssiz - sizeof(struct phdr), (size_t)s_lowpc, s_scale);
(size_t)s_lowpc, s_scale);
profiling = 0;
profiling = 0;
} else { } else {
/* stop */ /* stop */
profil((unsigned short *)0, 0, 0, 0); profil((unsigned short *)0, 0, 0, 0);
profiling = 3; profiling = 3;
} }
} }
/* crt1.s for Solaris 2, x86
Copyright (C) 1993, 1998, 2008, 2009, 2011 Free Software Foundation, Inc.
Written By Fred Fish, Nov 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 System V Application Binary Interface, Intel386
Processor Supplement. It has been constructed from information obtained
from the ABI, information obtained from single stepping existing
Solaris executables through their startup code with gdb, and from
information obtained by single stepping executables on other i386 SVR4
implementations. This file is the first thing linked into any
executable. */
#ifndef GCRT1
.ident "GNU C crt1.s"
#define CLEANUP _cleanup
#else
/* This is a modified crt1.s by J.W.Hawtin <oolon@ankh.org> 15/8/96,
to allow program profiling, by calling monstartup on entry and _mcleanup
on exit. */
.ident "GNU C gcrt1.s"
#define CLEANUP _mcleanup
#endif
.weak _cleanup
.weak _DYNAMIC
.text
/* Start creating the initial frame by pushing a NULL value for the return
address of the initial frame, and mark the end of the stack frame chain
(the innermost stack frame) with a NULL value, per page 3-32 of the ABI.
Initialize the first stack frame pointer in %ebp (the contents of which
are unspecified at process initialization). */
.globl _start
_start:
pushl $0x0
pushl $0x0
movl %esp,%ebp
/* As specified per page 3-32 of the ABI, %edx contains a function
pointer that should be registered with atexit(), for proper
shared object termination. Just push it onto the stack for now
to preserve it. We want to register _cleanup() first. */
pushl %edx
/* Check to see if there is an _cleanup() function linked in, and if
so, register it with atexit() as the last thing to be run by
atexit(). */
movl $CLEANUP,%eax
testl %eax,%eax
je .L1
pushl $CLEANUP
call atexit
addl $0x4,%esp
.L1:
/* Now check to see if we have an _DYNAMIC table, and if so then
we need to register the function pointer previously in %edx, but
now conveniently saved on the stack as the argument to pass to
atexit(). */
movl $_DYNAMIC,%eax
testl %eax,%eax
je .L2
call atexit
.L2:
/* Register _fini() with atexit(). We will take care of calling _init()
directly. */
pushl $_fini
call atexit
#ifdef GCRT1
/* Start profiling. */
pushl %ebp
movl %esp,%ebp
pushl $_etext
pushl $_start
call monstartup
addl $8,%esp
popl %ebp
#endif
/* Compute the address of the environment vector on the stack and load
it into the global variable _environ. Currently argc is at 8 off
the frame pointer. Fetch the argument count into %eax, scale by the
size of each arg (4 bytes) and compute the address of the environment
vector which is 16 bytes (the two zero words we pushed, plus argc,
plus the null word terminating the arg vector) further up the stack,
off the frame pointer (whew!). */
movl 8(%ebp),%eax
leal 16(%ebp,%eax,4),%edx
movl %edx,_environ
/* Push the environment vector pointer, the argument vector pointer,
and the argument count on to the stack to set up the arguments
for _init(), _fpstart(), and main(). Note that the environment
vector pointer and the arg count were previously loaded into
%edx and %eax respectively. The only new value we need to compute
is the argument vector pointer, which is at a fixed address off
the initial frame pointer. */
/* Make sure the stack is properly aligned. */
andl $0xfffffff0,%esp
subl $4,%esp
pushl %edx
leal 12(%ebp),%edx
pushl %edx
pushl %eax
/* Call _init(argc, argv, environ), _fpstart(argc, argv, environ), and
main(argc, argv, environ). */
call _init
call __fpstart
call main
/* Pop the argc, argv, and environ arguments off the stack, push the
value returned from main(), and call exit(). */
addl $12,%esp
pushl %eax
call exit
/* An inline equivalent of _exit, as specified in Figure 3-26 of the ABI. */
pushl $0x0
movl $0x1,%eax
lcall $7,$0
/* If all else fails, just try a halt! */
hlt
.type _start,@function
.size _start,.-_start
#ifndef GCRT1
/* A dummy profiling support routine for non-profiling executables,
in case we link in some objects that have been compiled for profiling. */
.weak _mcount
_mcount:
ret
.type _mcount,@function
.size _mcount,.-_mcount
#endif
/* crti.s for Solaris 2, x86.
Copyright (C) 1993, 2008, 2009 Free Software Foundation, Inc.
Written By Fred Fish, Nov 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 just supplies labeled starting points for the .init and .fini
sections. It is linked in before the values-Xx.o files and also before
crtbegin.o. */
.ident "GNU C crti.s"
.section .init
.globl _init
.type _init,@function
_init:
.section .fini
.globl _fini
.type _fini,@function
_fini:
/* crtn.s for Solaris 2, x86.
Copyright (C) 1993, 2008, 2009 Free Software Foundation, Inc.
Written By Fred Fish, Nov 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 just supplies returns for the .init and .fini sections. It is
linked in after all other files. */
.ident "GNU C crtn.o"
.section .init
ret $0x0
.section .fini
ret $0x0
# This is an endfile, Use -minline-all-stringops to ensure # This is an endfile, Use -minline-all-stringops to ensure
# that __builtin_memset doesn't refer to the lib function memset(). # that __builtin_memset doesn't refer to the lib function memset().
crtfastmath.o: $(gcc_srcdir)/config/i386/crtfastmath.c crtfastmath.o: $(gcc_srcdir)/config/i386/crtfastmath.c
$(gcc_compile) -msse -minline-all-stringops -c \ $(gcc_compile) -msse -minline-all-stringops -c $<
$(gcc_srcdir)/config/i386/crtfastmath.c
# The pushl in CTOR initialization interferes with frame pointer elimination.
# crtend*.o cannot be compiled without -fno-asynchronous-unwind-tables,
# because then __FRAME_END__ might not be the last thing in .eh_frame
# section. -fno-asynchronous-unwind-tables is off by default for i386
# and is on by default for x86-64. We turn it off for both i386 and
# x86-64.
CRTSTUFF_T_CFLAGS += -fno-omit-frame-pointer -fno-asynchronous-unwind-tables
# gmon build rule:
$(T)gmon.o: $(gcc_srcdir)/config/i386/gmon-sol2.c $(GCC_PASSES) $(CONFIG_H)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CFLAGS) \
-c $(gcc_srcdir)/config/i386/gmon-sol2.c -o $(T)gmon.o
# Assemble startup files.
# Apparently Sun believes that assembler files don't need comments, because no
# single ASCII character is valid (tried them all). So we manually strip out
# the comments with sed. This bug may only be in the Early Access releases.
$(T)gcrt1.o: $(gcc_srcdir)/config/i386/sol2-gc1.asm $(GCC_PASSES)
sed -e '/^!/d' <$(gcc_srcdir)/config/i386/sol2-gc1.asm >gcrt1.s
$(GCC_FOR_TARGET) $(CFLAGS) -c -o $(T)gcrt1.o gcrt1.s
$(T)crt1.o: $(gcc_srcdir)/config/i386/sol2-c1.asm $(GCC_PASSES)
sed -e '/^!/d' <$(gcc_srcdir)/config/i386/sol2-c1.asm >crt1.s
$(GCC_FOR_TARGET) $(CFLAGS) -c -o $(T)crt1.o crt1.s
$(T)crti.o: $(gcc_srcdir)/config/i386/sol2-ci.asm $(GCC_PASSES)
sed -e '/^!/d' <$(gcc_srcdir)/config/i386/sol2-ci.asm >crti.s
$(GCC_FOR_TARGET) $(CFLAGS) -c -o $(T)crti.o crti.s
$(T)crtn.o: $(gcc_srcdir)/config/i386/sol2-cn.asm $(GCC_PASSES)
sed -e '/^!/d' <$(gcc_srcdir)/config/i386/sol2-cn.asm >crtn.s
$(GCC_FOR_TARGET) $(CFLAGS) -c -o $(T)crtn.o crtn.s
# We need to use -fPIC when we are using gcc to compile the routines in # We need to use -fPIC when we are using gcc to compile the routines in
# crtstuff.c. This is only really needed when we are going to use gcc/g++ # crtstuff.c. This is only really needed when we are going to use gcc/g++
# to produce a shared library, but since we don't know ahead of time when # to produce a shared library, but since we don't know ahead of time when
...@@ -29,9 +7,7 @@ $(T)crtn.o: $(gcc_srcdir)/config/i386/sol2-cn.asm $(GCC_PASSES) ...@@ -29,9 +7,7 @@ $(T)crtn.o: $(gcc_srcdir)/config/i386/sol2-cn.asm $(GCC_PASSES)
# We must also enable optimization to avoid having any code appear after # We must also enable optimization to avoid having any code appear after
# the call & alignment statement, but before we switch back to the # the call & alignment statement, but before we switch back to the
# .text section. # .text section.
CRTSTUFF_T_CFLAGS = -fPIC -O2 CRTSTUFF_T_CFLAGS = -fPIC -O2
TARGET_LIBGCC2_CFLAGS = -fPIC
# Add support for the introduction of 128-bit long double. # Add support for the introduction of 128-bit long double.
SHLIB_MAPFILES += $(srcdir)/config/i386/libgcc-sol2.ver SHLIB_MAPFILES += $(srcdir)/config/i386/libgcc-sol2.ver
crtfastmath.o: $(gcc_srcdir)/config/sparc/crtfastmath.c
$(gcc_compile) -c $(gcc_srcdir)/config/sparc/crtfastmath.c
# Copyright (C) 2010, 2011 Free Software Foundation, Inc.
#
# This file is part of GCC.
#
# GCC 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.
#
# GCC 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 GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
# We want fine grained libraries, so use the new code to build the
# floating point emulation libraries.
FPBIT = fp-bit.c
DPBIT = dp-bit.c
$(gcc_objdir)/dp-bit.c: $(gcc_srcdir)/config/fp-bit.c
cat $< > $@
$(gcc_objdir)/fp-bit.c: $(gcc_srcdir)/config/fp-bit.c
echo '#define FLOAT' > $@
cat $< >> $@
LIB1ASMSRC = sparc/lb1spc.asm
LIB1ASMFUNCS = _mulsi3 _divsi3 _modsi3
# We need to use -fPIC when we are using gcc to compile the routines in
# crtstuff.c. This is only really needed when we are going to use gcc/g++
# to produce a shared library, but since we don't know ahead of time when
# we will be doing that, we just always use -fPIC when compiling the
# routines in crtstuff.c.
CRTSTUFF_T_CFLAGS = -fPIC
crtfastmath.o: $(gcc_srcdir)/config/$(cpu_type)/crtfastmath.c
$(gcc_compile) -c $<
crti.o: $(srcdir)/config/$(cpu_type)/sol2-ci.S
$(crt_compile) -c $<
crtn.o: $(srcdir)/config/$(cpu_type)/sol2-cn.S
$(crt_compile) -c $<
# If we are building next to newlib, this will let us find the RTEMS
# limits.h when building libgcc2. Otherwise, newlib must be installed
# first.
HOST_LIBGCC2_CFLAGS = -I$(srcdir)/../newlib/libc/sys/rtems/include
# Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. # Copyright (C) 2001, 2002, 2003, 2004, 2005, 2011
# Free Software Foundation, Inc.
# #
# This file is part of GCC. # This file is part of GCC.
# #
...@@ -16,35 +17,35 @@ ...@@ -16,35 +17,35 @@
# along with GCC; see the file COPYING3. If not see # along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>. # <http://www.gnu.org/licenses/>.
# Build a shared libgcc library with the Solaris linker. # Build a shared libgcc library.
SHLIB_EXT = .so SHLIB_EXT = .so
SHLIB_SOLINK = @shlib_base_name@.so SHLIB_SOLINK = @shlib_base_name@.so
SHLIB_SONAME = @shlib_base_name@.so.1 SHLIB_SOVERSION = 1
SHLIB_SONAME = @shlib_base_name@.so.$(SHLIB_SOVERSION)
SHLIB_MAP = @shlib_map_file@ SHLIB_MAP = @shlib_map_file@
SHLIB_OBJS = @shlib_objs@ SHLIB_OBJS = @shlib_objs@
SHLIB_DIR = @multilib_dir@ SHLIB_DIR = @multilib_dir@
SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@ SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
SHLIB_LC = -lc
SHLIB_MAKE_SOLINK = $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK)
SHLIB_INSTALL_SOLINK = $(LN_S) $(SHLIB_SONAME) \
$(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \ SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
-Wl,-h,$(SHLIB_SONAME) -Wl,-z,text -Wl,-z,defs \ $(SHLIB_LDFLAGS) \
-Wl,-M,$(SHLIB_MAP) -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp \ -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ \
@multilib_flags@ $(SHLIB_OBJS) -lc && \ $(SHLIB_OBJS) $(SHLIB_LC) && \
rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \ rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \
if [ -f $(SHLIB_DIR)/$(SHLIB_SONAME) ]; then \ if [ -f $(SHLIB_DIR)/$(SHLIB_SONAME) ]; then \
mv -f $(SHLIB_DIR)/$(SHLIB_SONAME) \ mv -f $(SHLIB_DIR)/$(SHLIB_SONAME) \
$(SHLIB_DIR)/$(SHLIB_SONAME).backup; \ $(SHLIB_DIR)/$(SHLIB_SONAME).backup; \
else true; fi && \ else true; fi && \
mv $(SHLIB_DIR)/$(SHLIB_SONAME).tmp $(SHLIB_DIR)/$(SHLIB_SONAME) && \ mv $(SHLIB_DIR)/$(SHLIB_SONAME).tmp $(SHLIB_DIR)/$(SHLIB_SONAME) && \
$(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK) $(SHLIB_MAKE_SOLINK)
# $(slibdir) double quoted to protect it from expansion while building
# libgcc.mk. We want this delayed until actual install time.
SHLIB_INSTALL = \ SHLIB_INSTALL = \
$$(mkinstalldirs) $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL); \ $(mkinstalldirs) $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL); \
$(INSTALL_DATA) $(SHLIB_DIR)/$(SHLIB_SONAME) \ $(INSTALL_DATA) $(SHLIB_DIR)/$(SHLIB_SONAME) \
$$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SONAME); \ $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SONAME); \
rm -f $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK); \ rm -f $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK); \
$(LN_S) $(SHLIB_SONAME) \ $(SHLIB_INSTALL_SOLINK)
$$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK)
SHLIB_MKMAP = $(srcdir)/mkmap-symver.awk
SHLIB_MAPFILES = $$(libgcc_objdir)/libgcc-std.ver
# Build a shared libgcc library for ELF with symbol versioning.
SHLIB_MKMAP = $(gcc_srcdir)/mkmap-symver.awk
SHLIB_MAPFILES = libgcc-std.ver
# Build a shared libgcc library for ELF with symbol versioning
# with the GNU linker.
SHLIB_LDFLAGS = -Wl,--soname=$(SHLIB_SONAME) \
-Wl,--version-script=$(SHLIB_MAP)
# Build a shared libgcc library for ELF with symbol versioning
# with the Solaris linker.
SHLIB_LDFLAGS = -Wl,-h,$(SHLIB_SONAME) -Wl,-z,text -Wl,-z,defs \
-Wl,-M,$(SHLIB_MAP)
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, # Copyright (C) 2004, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
# 2002 Free Software Foundation, Inc.
# #
# This file is part of GCC. # This file is part of GCC.
# #
...@@ -17,23 +16,19 @@ ...@@ -17,23 +16,19 @@
# along with GCC; see the file COPYING3. If not see # along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>. # <http://www.gnu.org/licenses/>.
# Use unwind-dw2-fde-glibc.c. Unless linker support and dl_iterate_phdr
# are present, automatically falls back to unwind-dw2-fde.c.
LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \
$(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
# gmon build rule: # gmon build rule:
$(T)gmon.o: $(srcdir)/config/sparc/gmon-sol2.c $(GCC_PASSES) \ gmon.o: $(srcdir)/config/gmon-sol2.c
$(TCONFIG_H) tsystem.h coretypes.h $(TM_H) stmp-int-hdrs $(gcc_compile) -c $<
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) \
-c $(srcdir)/config/sparc/gmon-sol2.c -o $(T)gmon.o
# Assemble startup files. # Assemble startup files.
$(T)crt1.o: $(srcdir)/config/sparc/sol2-c1.asm $(GCC_PASSES) crt1.o: $(srcdir)/config/$(cpu_type)/sol2-c1.S
$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crt1.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-c1.asm $(crt_compile) -c $<
$(T)gcrt1.o: $(srcdir)/config/sparc/sol2-c1.asm $(GCC_PASSES) gcrt1.o: $(srcdir)/config/$(cpu_type)/sol2-c1.S
$(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -DGCRT1 -o $(T)gcrt1.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-c1.asm $(crt_compile) -c -DGCRT1 $<
# We need to use -fPIC when we are using gcc to compile the routines in
# crtstuff.c. This is only really needed when we are going to use gcc/g++
# to produce a shared library, but since we don't know ahead of time when
# we will be doing that, we just always use -fPIC when compiling the
# routines in crtstuff.c.
CRTSTUFF_T_CFLAGS = -fPIC HOST_LIBGCC2_CFLAGS = -fPIC
TARGET_LIBGCC2_CFLAGS = -fPIC
...@@ -555,6 +555,7 @@ ac_subst_vars='LTLIBOBJS ...@@ -555,6 +555,7 @@ ac_subst_vars='LTLIBOBJS
LIBOBJS LIBOBJS
asm_hidden_op asm_hidden_op
extra_parts extra_parts
cpu_type
tmake_file tmake_file
set_use_emutls set_use_emutls
set_have_cc_tls set_have_cc_tls
...@@ -3742,6 +3743,23 @@ $as_echo "$libgcc_cv_fixed_point" >&6; } ...@@ -3742,6 +3743,23 @@ $as_echo "$libgcc_cv_fixed_point" >&6; }
fixed_point=$libgcc_cv_fixed_point fixed_point=$libgcc_cv_fixed_point
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
if test "${acl_cv_prog_gnu_ld+set}" = set; then :
$as_echo_n "(cached) " >&6
else
# I'd rather use --version here, but apparently some GNU ld's only accept -v.
if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
acl_cv_prog_gnu_ld=yes
else
acl_cv_prog_gnu_ld=no
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
$as_echo "$acl_cv_prog_gnu_ld" >&6; }
with_gnu_ld=$acl_cv_prog_gnu_ld
# Check for assembler CFI support. # Check for assembler CFI support.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether assembler supports CFI directives" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether assembler supports CFI directives" >&5
$as_echo_n "checking whether assembler supports CFI directives... " >&6; } $as_echo_n "checking whether assembler supports CFI directives... " >&6; }
...@@ -3938,6 +3956,7 @@ tmake_file="${tmake_file_}" ...@@ -3938,6 +3956,7 @@ tmake_file="${tmake_file_}"
# We need multilib support. # We need multilib support.
ac_config_files="$ac_config_files Makefile" ac_config_files="$ac_config_files Makefile"
......
...@@ -4,6 +4,7 @@ sinclude(../config/enable.m4) ...@@ -4,6 +4,7 @@ sinclude(../config/enable.m4)
sinclude(../config/tls.m4) sinclude(../config/tls.m4)
sinclude(../config/acx.m4) sinclude(../config/acx.m4)
sinclude(../config/no-executables.m4) sinclude(../config/no-executables.m4)
sinclude(../config/lib-ld.m4)
sinclude(../config/override.m4) sinclude(../config/override.m4)
sinclude(../config/dfp.m4) sinclude(../config/dfp.m4)
...@@ -166,6 +167,8 @@ AC_CACHE_CHECK([whether fixed-point is supported], [libgcc_cv_fixed_point], ...@@ -166,6 +167,8 @@ AC_CACHE_CHECK([whether fixed-point is supported], [libgcc_cv_fixed_point],
fixed_point=$libgcc_cv_fixed_point fixed_point=$libgcc_cv_fixed_point
AC_SUBST(fixed_point) AC_SUBST(fixed_point)
AC_LIB_PROG_LD_GNU
# Check for assembler CFI support. # Check for assembler CFI support.
AC_CACHE_CHECK([whether assembler supports CFI directives], [libgcc_cv_cfi], AC_CACHE_CHECK([whether assembler supports CFI directives], [libgcc_cv_cfi],
[AC_COMPILE_IFELSE( [AC_COMPILE_IFELSE(
...@@ -268,6 +271,7 @@ tmake_file="${tmake_file_}" ...@@ -268,6 +271,7 @@ tmake_file="${tmake_file_}"
AC_SUBST(tmake_file) AC_SUBST(tmake_file)
# Substitute configuration variables # Substitute configuration variables
AC_SUBST(cpu_type)
AC_SUBST(extra_parts) AC_SUBST(extra_parts)
AC_SUBST(asm_hidden_op) AC_SUBST(asm_hidden_op)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment