From ca24c5ad7371a5b1947ccd01d4b163d666179669 Mon Sep 17 00:00:00 2001 From: Rainer Orth Date: Wed, 1 Jun 2011 14:39:17 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 44 ++ gcc/config.gcc | 39 +- gcc/config/i386/gmon-sol2.c | 459 ------------------ gcc/config/i386/sol2-c1.asm | 151 ------ gcc/config/i386/sol2-ci.asm | 40 -- gcc/config/i386/sol2-cn.asm | 35 -- gcc/config/i386/sol2-gc1.asm | 155 ------ gcc/config/i386/t-nwld | 3 - gcc/config/i386/t-rtems | 28 ++ gcc/config/i386/t-rtems-i386 | 69 --- gcc/config/i386/t-sol2-10 | 10 +- gcc/config/sparc/t-crtin | 6 - gcc/config/sparc/t-sol2 | 39 -- gcc/config/sparc/t-sol2-64 | 3 - gcc/config/t-slibgcc-darwin | 2 - gcc/config/t-slibgcc-dummy | 3 + gcc/config/t-sol2 | 3 + libgcc/ChangeLog | 52 ++ libgcc/Makefile.in | 3 +- libgcc/config.host | 63 ++- .../sparc => libgcc/config}/gmon-sol2.c | 148 +++++- libgcc/config/i386/sol2-c1.S | 173 +++++++ libgcc/config/i386/sol2-ci.S | 40 ++ libgcc/config/i386/sol2-cn.S | 35 ++ libgcc/config/i386/t-crtfm | 3 +- libgcc/config/i386/t-crtstuff | 7 + libgcc/config/i386/t-sol2 | 24 - .../config/sparc/sol2-c1.S | 0 .../config/sparc/sol2-ci.S | 0 .../config/sparc/sol2-cn.S | 0 libgcc/config/sparc/t-crtfm | 2 - libgcc/config/sparc/t-softfp | 29 ++ libgcc/config/sparc/t-softmul | 2 + libgcc/config/sparc/t-sol2 | 6 + libgcc/config/t-crtfm | 2 + libgcc/config/t-crtin | 4 + libgcc/config/t-rtems | 4 + .../t-slibgcc-sld => libgcc/config/t-slibgcc | 35 +- libgcc/config/t-slibgcc-elf-ver | 4 + libgcc/config/t-slibgcc-gld | 5 + libgcc/config/t-slibgcc-sld | 5 + libgcc/config/t-sol2 | 34 ++ libgcc/configure | 19 + libgcc/configure.ac | 4 + 44 files changed, 713 insertions(+), 1079 deletions(-) delete mode 100644 gcc/config/i386/gmon-sol2.c delete mode 100644 gcc/config/i386/sol2-c1.asm delete mode 100644 gcc/config/i386/sol2-ci.asm delete mode 100644 gcc/config/i386/sol2-cn.asm delete mode 100644 gcc/config/i386/sol2-gc1.asm create mode 100644 gcc/config/i386/t-rtems delete mode 100644 gcc/config/i386/t-rtems-i386 delete mode 100644 gcc/config/sparc/t-crtin delete mode 100644 gcc/config/sparc/t-sol2 delete mode 100644 gcc/config/t-slibgcc-darwin create mode 100644 gcc/config/t-slibgcc-dummy rename {gcc/config/sparc => libgcc/config}/gmon-sol2.c (74%) create mode 100644 libgcc/config/i386/sol2-c1.S create mode 100644 libgcc/config/i386/sol2-ci.S create mode 100644 libgcc/config/i386/sol2-cn.S create mode 100644 libgcc/config/i386/t-crtstuff rename gcc/config/sparc/sol2-c1.asm => libgcc/config/sparc/sol2-c1.S (100%) rename gcc/config/sparc/sol2-ci.asm => libgcc/config/sparc/sol2-ci.S (100%) rename gcc/config/sparc/sol2-cn.asm => libgcc/config/sparc/sol2-cn.S (100%) delete mode 100644 libgcc/config/sparc/t-crtfm create mode 100644 libgcc/config/sparc/t-softfp create mode 100644 libgcc/config/sparc/t-softmul create mode 100644 libgcc/config/sparc/t-sol2 create mode 100644 libgcc/config/t-crtfm create mode 100644 libgcc/config/t-crtin create mode 100644 libgcc/config/t-rtems rename gcc/config/t-slibgcc-sld => libgcc/config/t-slibgcc (54%) create mode 100644 libgcc/config/t-slibgcc-elf-ver create mode 100644 libgcc/config/t-slibgcc-gld create mode 100644 libgcc/config/t-slibgcc-sld create mode 100644 libgcc/config/t-sol2 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6ff07a34c14..72fc84bbc1c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,47 @@ +2011-06-01 Rainer Orth + + * 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 * dwarf2out.c (mem_loc_descriptor) : Call diff --git a/gcc/config.gcc b/gcc/config.gcc index 71aeacdb20a..c4915baabbe 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1172,12 +1172,12 @@ i[34567]86-*-darwin*) need_64bit_isa=yes # Baseline choice for a machine that allows m64 support. 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" ;; x86_64-*-darwin*) 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" libgcc_tm_file="$libgcc_tm_file i386/darwin-lib.h" ;; @@ -1301,7 +1301,7 @@ i[3456x]86-*-netware*) */nwld) extra_objs="$extra_objs nwld.o" 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" ;; esac @@ -1321,8 +1321,7 @@ i[34567]86-*-nto-qnx*) ;; 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" - extra_parts="crtbegin.o crtend.o crti.o crtn.o" - tmake_file="${tmake_file} i386/t-rtems-i386 i386/t-crtstuff t-rtems" + tmake_file="${tmake_file} i386/t-rtems t-rtems" ;; i[34567]86-*-solaris2*) 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*) if test x$gas = xyes; then tm_file="${tm_file} i386/sol2-gas.h" 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" cxx_target_objs="${cxx_target_objs} sol2-c.o" extra_objs="sol2.o" tm_p_file="${tm_p_file} sol2-protos.h" if test x$gnu_ld = xyes; then - tmake_file="$tmake_file t-slibgcc-elf-ver" tm_defines="${tm_defines} TARGET_GNU_LD=1" - else - tmake_file="$tmake_file t-slibgcc-sld" fi if test x$gas = xyes; then tm_file="usegas.h ${tm_file}" @@ -1371,9 +1367,6 @@ i[34567]86-*-solaris2*) tm_file="${tm_file} i386/x86-64.h i386/sol2-10.h" tm_defines="${tm_defines} TARGET_BI_ARCH=1" 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_isa=yes use_gcc_stdint=wrap @@ -2010,13 +2003,13 @@ powerpc-*-darwin*) *-darwin[0-6]*) ;; esac - tmake_file="${tmake_file} t-slibgcc-darwin" + tmake_file="${tmake_file} t-slibgcc-dummy" extra_headers=altivec.h ;; powerpc64-*-darwin*) extra_options="${extra_options} ${cpu_type}/darwin.opt" 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" extra_headers=altivec.h ;; @@ -2442,13 +2435,10 @@ sparc-*-elf*) tmake_file="sparc/t-elf" ;; esac - tmake_file="${tmake_file} sparc/t-crtin sparc/t-crtfm" - extra_parts="crtbegin.o crtend.o" ;; 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" - tmake_file="sparc/t-elf sparc/t-crtin sparc/t-crtfm t-rtems" - extra_parts="crtbegin.o crtend.o" + tmake_file="sparc/t-elf t-rtems" ;; sparc-*-linux*) 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*) tm_file="${tm_file} sol2-gld.h sparc/sol2-gld-bi.h" fi tm_file="${tm_file} tm-dwarf2.h" - tmake_file="t-sol2 sparc/t-sol2 sparc/t-sol2-64 sparc/t-crtin sparc/t-crtfm" - if test x$gnu_ld = xyes; then - tmake_file="$tmake_file t-slibgcc-elf-ver" - else - tmake_file="$tmake_file t-slibgcc-sld" - fi + tmake_file="t-sol2 t-slibgcc-dummy sparc/t-sol2-64" if test x$gas = xyes; then tm_file="usegas.h ${tm_file}" fi @@ -2518,7 +2503,6 @@ sparc*-*-solaris2*) cxx_target_objs="sol2-c.o" extra_objs="sol2.o" 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 "":yes:* | yes:yes:* ) thread_file=posix @@ -2532,14 +2516,11 @@ sparc-wrs-vxworks) sparc64-*-elf*) 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" - tmake_file="${tmake_file} sparc/t-crtin sparc/t-crtfm" - extra_parts="crtbegin.o crtend.o" ;; 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" extra_options="${extra_options} sparc/little-endian.opt" - tmake_file="${tmake_file} sparc/t-crtin sparc/t-crtfm t-rtems" - extra_parts="crtbegin.o crtend.o" + tmake_file="${tmake_file} t-rtems" ;; 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" diff --git a/gcc/config/i386/gmon-sol2.c b/gcc/config/i386/gmon-sol2.c deleted file mode 100644 index 44bbb44488f..00000000000 --- a/gcc/config/i386/gmon-sol2.c +++ /dev/null @@ -1,459 +0,0 @@ -/*- - * Copyright (c) 1991 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. [rescinded 22 July 1999] - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - * This is a modified gmon.c by J.W.Hawtin , - * 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 - * process profiling on solaris 2.X X86 - * - * It must be used in conjunction with sol2-gc1.asm, which is used to start - * and stop process monitoring. - * - * Differences. - * - * On Solaris 2 _mcount is called by library functions not mcount, so support - * has been added for both. - * - * Also the prototype for profil() is different - * - * Solaris 2 does not seem to have char *minbrk whcih allows the setting of - * the minimum SBRK region so this code has been removed and lets pray malloc - * does not mess it up. - * - * Notes - * - * This code could easily be integrated with the original gmon.c and perhaps - * should be. - */ -#include "tconfig.h" -#include "tsystem.h" -#include /* for creat() */ - -#ifdef DEBUG -#include -#endif - -static void moncontrol (int); -extern void monstartup (char *, char *); -extern void _mcleanup (void); -extern void internal_mcount ( -#ifdef __x86_64__ - char *, unsigned short * -#else - void -#endif - ); - - -struct phdr { - char *lpc; - char *hpc; - int ncnt; -}; - - -#define HISTFRACTION 2 -#define HISTCOUNTER unsigned short -#define HASHFRACTION 1 -#define ARCDENSITY 2 -#define MINARCS 50 -#define BASEADDRESS 0x8000000 /* On Solaris 2 X86 all executables start here - and not at 0 */ - -struct tostruct { - char *selfpc; - long count; - unsigned short link; -}; - -struct rawarc { - unsigned long raw_frompc; - unsigned long raw_selfpc; - long raw_count; -}; -#define ROUNDDOWN(x,y) (((x)/(y))*(y)) -#define ROUNDUP(x,y) ((((x)+(y)-1)/(y))*(y)) - -/* char *minbrk; */ - -typedef __SIZE_TYPE__ size_t; -typedef __PTRDIFF_TYPE__ intptr_t; - - /* - * froms is actually a bunch of unsigned shorts indexing tos - */ -static int profiling = 3; -static unsigned short *froms; -static struct tostruct *tos = 0; -static long tolimit = 0; -static char *s_lowpc = 0; -static char *s_highpc = 0; -static size_t s_textsize = 0; - -static int ssiz; -static char *sbuf; -static int s_scale; - /* see profil(2) where this is describe (incorrectly) */ -#define SCALE_1_TO_1 0x10000L - -#define MSG "No space for profiling buffer(s)\n" - -extern int errno; - -extern void *sbrk (intptr_t); - -void -monstartup(char *lowpc, char *highpc) -{ - size_t monsize; - char *buffer; - register size_t o; - - /* - * round lowpc and highpc to multiples of the density we're using - * so the rest of the scaling (here and in gprof) stays in ints. - */ - lowpc = (char *) - ROUNDDOWN((size_t)lowpc, HISTFRACTION*sizeof(HISTCOUNTER)); - s_lowpc = lowpc; - highpc = (char *) - ROUNDUP((size_t)highpc, HISTFRACTION*sizeof(HISTCOUNTER)); - s_highpc = highpc; - s_textsize = highpc - lowpc; - monsize = (s_textsize / HISTFRACTION) + sizeof(struct phdr); - buffer = (char *) sbrk( monsize ); - if ( buffer == (char *) -1 ) { - write( 2 , MSG , sizeof(MSG) ); - return; - } - froms = (unsigned short *) sbrk( s_textsize / HASHFRACTION ); - if ( froms == (unsigned short *) -1 ) { - write( 2 , MSG , sizeof(MSG) ); - froms = 0; - return; - } - tolimit = s_textsize * ARCDENSITY / 100; - if ( tolimit < MINARCS ) { - tolimit = MINARCS; - } else if ( tolimit > 65534 ) { - tolimit = 65534; - } - tos = (struct tostruct *) sbrk( tolimit * sizeof( struct tostruct ) ); - if ( tos == (struct tostruct *) -1 ) { - write( 2 , MSG , sizeof(MSG) ); - froms = 0; - tos = 0; - return; - } -/* minbrk = (char *) sbrk(0);*/ - tos[0].link = 0; - sbuf = buffer; - ssiz = monsize; - ( (struct phdr *) buffer ) -> lpc = lowpc; - ( (struct phdr *) buffer ) -> hpc = highpc; - ( (struct phdr *) buffer ) -> ncnt = ssiz; - monsize -= sizeof(struct phdr); - if ( monsize <= 0 ) - return; - o = highpc - lowpc; - if( monsize < o ) -#ifndef hp300 - s_scale = ( (float) monsize / o ) * SCALE_1_TO_1; -#else /* avoid floating point */ - { - int quot = o / monsize; - - if (quot >= 0x10000) - s_scale = 1; - else if (quot >= 0x100) - s_scale = 0x10000 / quot; - else if (o >= 0x800000) - s_scale = 0x1000000 / (o / (monsize >> 8)); - else - s_scale = 0x1000000 / ((o << 8) / monsize); - } -#endif - else - s_scale = SCALE_1_TO_1; - moncontrol(1); -} - -void -_mcleanup (void) -{ - int fd; - int fromindex; - int endfrom; - char *frompc; - int toindex; - struct rawarc rawarc; - - moncontrol(0); - fd = creat( "gmon.out" , 0666 ); - if ( fd < 0 ) { - perror( "mcount: gmon.out" ); - return; - } -# ifdef DEBUG - fprintf( stderr , "[mcleanup] sbuf %#x ssiz %d\n" , sbuf , ssiz ); -# endif /* DEBUG */ - - write( fd , sbuf , ssiz ); - endfrom = s_textsize / (HASHFRACTION * sizeof(*froms)); - for ( fromindex = 0 ; fromindex < endfrom ; fromindex++ ) { - if ( froms[fromindex] == 0 ) { - continue; - } - frompc = s_lowpc + (fromindex * HASHFRACTION * sizeof(*froms)); - for (toindex=froms[fromindex]; toindex!=0; toindex=tos[toindex].link) { -# ifdef DEBUG - fprintf( stderr , - "[mcleanup] frompc %#x selfpc %#x count %d\n" , - frompc , tos[toindex].selfpc , tos[toindex].count ); -# endif /* DEBUG */ - rawarc.raw_frompc = (unsigned long) frompc; - rawarc.raw_selfpc = (unsigned long) tos[toindex].selfpc; - rawarc.raw_count = tos[toindex].count; - write( fd , &rawarc , sizeof rawarc ); - } - } - close( fd ); -} - -#ifdef __x86_64__ -/* See GLIBC for additional information about this technique. */ -asm(".globl _mcount\n" - "\t.type\t_mcount, @function\n" - "_mcount:\n" - /* The compiler calls _mcount after the prologue, and does not - save any of the registers. Therefore we must preserve all - seven registers which may contain function arguments. */ - "\tsubq\t$0x38,%rsp\n" - "\tmovq\t%rax,(%rsp)\n" - "\tmovq\t%rcx,0x08(%rsp)\n" - "\tmovq\t%rdx,0x10(%rsp)\n" - "\tmovq\t%rsi,0x18(%rsp)\n" - "\tmovq\t%rdi,0x20(%rsp)\n" - "\tmovq\t%r8,0x28(%rsp)\n" - "\tmovq\t%r9,0x30(%rsp)\n" - /* Get SELFPC (pushed by the call to this function) and - FROMPCINDEX (via the frame pointer. */ - "\tmovq\t0x38(%rsp),%rdi\n" - "\tmovq\t0x8(%rbp),%rsi\n" - "\tcall\tinternal_mcount\n" - /* Restore the saved registers. */ - "\tmovq\t0x30(%rsp),%r9\n" - "\tmovq\t0x28(%rsp),%r8\n" - "\tmovq\t0x20(%rsp),%rdi\n" - "\tmovq\t0x18(%rsp),%rsi\n" - "\tmovq\t0x10(%rsp),%rdx\n" - "\tmovq\t0x08(%rsp),%rcx\n" - "\tmovq\t(%rsp),%rax\n" - "\taddq\t$0x38,%rsp\n" - "\tretq\n" - ); -#else -/* Solaris 2 libraries use _mcount. */ -asm(".globl _mcount; _mcount: jmp internal_mcount"); -/* This is for compatibility with old versions of gcc which used mcount. */ -asm(".globl mcount; mcount: jmp internal_mcount"); -#endif - -void -internal_mcount ( -#ifdef __x86_64__ - char *selfpc, - unsigned short *frompcindex -#else - void -#endif - ) -{ -#ifndef __x86_64__ - register char *selfpc; - register unsigned short *frompcindex; -#endif - register struct tostruct *top; - register struct tostruct *prevtop; - register long toindex; - static char already_setup; - -#ifndef __x86_64__ - /* - * find the return address for mcount, - * and the return address for mcount's caller. - */ - - /* selfpc = pc pushed by mcount call. - This identifies the function that was just entered. */ - selfpc = (void *) __builtin_return_address (0); - /* frompcindex = pc in preceding frame. - This identifies the caller of the function just entered. */ - frompcindex = (void *) __builtin_return_address (1); -#endif - - if(!already_setup) { - extern char etext[]; - already_setup = 1; -#ifdef __x86_64__ - monstartup(0, etext); -#else - monstartup((char*)0x08040000, etext); -#endif -#ifdef USE_ONEXIT - on_exit(_mcleanup, 0); -#else - atexit(_mcleanup); -#endif - } - /* - * check that we are profiling - * and that we aren't recursively invoked. - */ - if (profiling) { - goto out; - } - profiling++; - /* - * check that frompcindex is a reasonable pc value. - * for example: signal catchers get called from the stack, - * not from text space. too bad. - */ - frompcindex = (unsigned short *)((long)frompcindex - (long)s_lowpc); - if ((unsigned long)frompcindex > s_textsize) { - goto done; - } - frompcindex = - &froms[((long)frompcindex) / (HASHFRACTION * sizeof(*froms))]; - toindex = *frompcindex; - if (toindex == 0) { - /* - * first time traversing this arc - */ - toindex = ++tos[0].link; - if (toindex >= tolimit) { - goto overflow; - } - *frompcindex = toindex; - top = &tos[toindex]; - top->selfpc = selfpc; - top->count = 1; - top->link = 0; - goto done; - } - top = &tos[toindex]; - if (top->selfpc == selfpc) { - /* - * arc at front of chain; usual case. - */ - top->count++; - goto done; - } - /* - * have to go looking down chain for it. - * top points to what we are looking at, - * prevtop points to previous top. - * we know it is not at the head of the chain. - */ - for (; /* goto done */; ) { - if (top->link == 0) { - /* - * top is end of the chain and none of the chain - * had top->selfpc == selfpc. - * so we allocate a new tostruct - * and link it to the head of the chain. - */ - toindex = ++tos[0].link; - if (toindex >= tolimit) { - goto overflow; - } - top = &tos[toindex]; - top->selfpc = selfpc; - top->count = 1; - top->link = *frompcindex; - *frompcindex = toindex; - goto done; - } - /* - * otherwise, check the next arc on the chain. - */ - prevtop = top; - top = &tos[top->link]; - if (top->selfpc == selfpc) { - /* - * there it is. - * increment its count - * move it to the head of the chain. - */ - top->count++; - toindex = prevtop->link; - prevtop->link = top->link; - top->link = *frompcindex; - *frompcindex = toindex; - goto done; - } - - } -done: - profiling--; - /* and fall through */ -out: - return; /* normal return restores saved registers */ - -overflow: - profiling++; /* halt further profiling */ -# define TOLIMIT "mcount: tos overflow\n" - write(2, TOLIMIT, sizeof(TOLIMIT)); - goto out; -} - -/* - * Control profiling - * profiling is what mcount checks to see if - * all the data structures are ready. - */ -static void -moncontrol(int mode) -{ - if (mode) - { - /* start */ - profil((unsigned short *)(sbuf + sizeof(struct phdr)), - ssiz - sizeof(struct phdr), - (size_t)s_lowpc, s_scale); - - profiling = 0; - } else { - /* stop */ - profil((unsigned short *)0, 0, 0, 0); - profiling = 3; - } -} diff --git a/gcc/config/i386/sol2-c1.asm b/gcc/config/i386/sol2-c1.asm deleted file mode 100644 index 4a89530cc5f..00000000000 --- a/gcc/config/i386/sol2-c1.asm +++ /dev/null @@ -1,151 +0,0 @@ -! 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 -! . - - -! 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 diff --git a/gcc/config/i386/sol2-ci.asm b/gcc/config/i386/sol2-ci.asm deleted file mode 100644 index f2ff2025d45..00000000000 --- a/gcc/config/i386/sol2-ci.asm +++ /dev/null @@ -1,40 +0,0 @@ -! 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 -! . - - -! 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: diff --git a/gcc/config/i386/sol2-cn.asm b/gcc/config/i386/sol2-cn.asm deleted file mode 100644 index 217f0409147..00000000000 --- a/gcc/config/i386/sol2-cn.asm +++ /dev/null @@ -1,35 +0,0 @@ -! 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 -! . - - -! 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 diff --git a/gcc/config/i386/sol2-gc1.asm b/gcc/config/i386/sol2-gc1.asm deleted file mode 100644 index 8cb989a9c25..00000000000 --- a/gcc/config/i386/sol2-gc1.asm +++ /dev/null @@ -1,155 +0,0 @@ -! 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 -! . - - -! 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 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 diff --git a/gcc/config/i386/t-nwld b/gcc/config/i386/t-nwld index e7727911636..a468533c1d1 100644 --- a/gcc/config/i386/t-nwld +++ b/gcc/config/i386/t-nwld @@ -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 - -# To keep DRIVER_DEFINES correct. -SHLIB_LINK = dummy diff --git a/gcc/config/i386/t-rtems b/gcc/config/i386/t-rtems new file mode 100644 index 00000000000..07d7e5f6a79 --- /dev/null +++ b/gcc/config/i386/t-rtems @@ -0,0 +1,28 @@ +# Copyright (C) 1999, 2001, 2002, 2005, 2007, 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 +# . +# + +MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro \ +msoft-float +MULTILIB_DIRNAMES= m486 mpentium mpentiumpro soft-float +MULTILIB_MATCHES = msoft-float=mno-m80387 +MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?mathlon +MULTILIB_EXCEPTIONS = \ +mtune=pentium/*msoft-float* \ +mtune=pentiumpro/*msoft-float* diff --git a/gcc/config/i386/t-rtems-i386 b/gcc/config/i386/t-rtems-i386 deleted file mode 100644 index 47dfc7e1132..00000000000 --- a/gcc/config/i386/t-rtems-i386 +++ /dev/null @@ -1,69 +0,0 @@ -# Copyright (C) 1999, 2001, 2002, 2005, 2007 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 -# . -# -# -# 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 \ -msoft-float -MULTILIB_DIRNAMES= m486 mpentium mpentiumpro soft-float -MULTILIB_MATCHES = msoft-float=mno-m80387 -MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?mathlon -MULTILIB_EXCEPTIONS = \ -mtune=pentium/*msoft-float* \ -mtune=pentiumpro/*msoft-float* - -EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o - -LIBGCC = stmp-multilib -INSTALL_LIBGCC = install-multilib diff --git a/gcc/config/i386/t-sol2-10 b/gcc/config/i386/t-sol2-10 index 95eabf63dd6..c86870934e5 100644 --- a/gcc/config/i386/t-sol2-10 +++ b/gcc/config/i386/t-sol2-10 @@ -1,4 +1,4 @@ -# Copyright (C) 2004 Free Software Foundation, Inc. +# Copyright (C) 2004, 2011 Free Software Foundation, Inc. # # This file is part of GCC. # @@ -19,11 +19,3 @@ MULTILIB_OPTIONS = m32/m64 MULTILIB_DIRNAMES = 32 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 diff --git a/gcc/config/sparc/t-crtin b/gcc/config/sparc/t-crtin deleted file mode 100644 index 2612bac89f6..00000000000 --- a/gcc/config/sparc/t-crtin +++ /dev/null @@ -1,6 +0,0 @@ -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 diff --git a/gcc/config/sparc/t-sol2 b/gcc/config/sparc/t-sol2 deleted file mode 100644 index b7f665b1b7b..00000000000 --- a/gcc/config/sparc/t-sol2 +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, -# 2002 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 -# . - -# gmon build rule: -$(T)gmon.o: $(srcdir)/config/sparc/gmon-sol2.c $(GCC_PASSES) \ - $(TCONFIG_H) tsystem.h coretypes.h $(TM_H) stmp-int-hdrs - $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) \ - -c $(srcdir)/config/sparc/gmon-sol2.c -o $(T)gmon.o - -# Assemble startup files. -$(T)crt1.o: $(srcdir)/config/sparc/sol2-c1.asm $(GCC_PASSES) - $(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -o $(T)crt1.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-c1.asm -$(T)gcrt1.o: $(srcdir)/config/sparc/sol2-c1.asm $(GCC_PASSES) - $(GCC_FOR_TARGET) $(MULTILIB_CFLAGS) -c -DGCRT1 -o $(T)gcrt1.o -x assembler-with-cpp $(srcdir)/config/sparc/sol2-c1.asm - -# 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 -TARGET_LIBGCC2_CFLAGS = -fPIC diff --git a/gcc/config/sparc/t-sol2-64 b/gcc/config/sparc/t-sol2-64 index 1802239d3cf..ec7e4eba6fd 100644 --- a/gcc/config/sparc/t-sol2-64 +++ b/gcc/config/sparc/t-sol2-64 @@ -2,6 +2,3 @@ MULTILIB_OPTIONS = m32/m64 MULTILIB_DIRNAMES = sparcv8plus sparcv9 MULTILIB_MATCHES = MULTILIB_OSDIRNAMES = . sparcv9 - -LIBGCC = stmp-multilib -INSTALL_LIBGCC = install-multilib diff --git a/gcc/config/t-slibgcc-darwin b/gcc/config/t-slibgcc-darwin deleted file mode 100644 index b957b353296..00000000000 --- a/gcc/config/t-slibgcc-darwin +++ /dev/null @@ -1,2 +0,0 @@ -# To keep DRIVER_DEFINES correct. -SHLIB_LINK = dummy diff --git a/gcc/config/t-slibgcc-dummy b/gcc/config/t-slibgcc-dummy new file mode 100644 index 00000000000..e68ce5eb24a --- /dev/null +++ b/gcc/config/t-slibgcc-dummy @@ -0,0 +1,3 @@ +# 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 diff --git a/gcc/config/t-sol2 b/gcc/config/t-sol2 index 9e06665a34a..4f1c67e919b 100644 --- a/gcc/config/t-sol2 +++ b/gcc/config/t-sol2 @@ -29,6 +29,9 @@ sol2.o: $(srcdir)/config/sol2.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ $(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 # are present, automatically falls back to unwind-dw2-fde.c. LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde-glibc.c \ diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index d8c0729814d..1a44c76f23c 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,55 @@ +2011-06-01 Rainer Orth + + * 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 PR bootstrap/49173 diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in index 557fab36e48..4a075ff8f29 100644 --- a/libgcc/Makefile.in +++ b/libgcc/Makefile.in @@ -1,6 +1,6 @@ # 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. # @@ -35,6 +35,7 @@ shlib_slibdir = @slibdir@ SHELL = @SHELL@ +cpu_type = @cpu_type@ enable_shared = @enable_shared@ decimal_float = @decimal_float@ enable_decimal_float = @enable_decimal_float@ diff --git a/libgcc/config.host b/libgcc/config.host index e3c48bb7f46..8b1113b9067 100644 --- a/libgcc/config.host +++ b/libgcc/config.host @@ -1,6 +1,6 @@ # libgcc host-specific configuration file. # 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. @@ -168,6 +168,31 @@ case ${host} in ;; *-*-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*) ;; *-*-elf) @@ -309,19 +334,10 @@ i[3456x]86-*-netware*) i[34567]86-*-nto-qnx*) ;; 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*) - 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) ;; @@ -519,18 +535,31 @@ sparc-*-netbsdelf*) sparc64-*-openbsd*) ;; 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 extra_parts="$extra_parts crtfastmath.o" - tmake_file="${tmake_file} sparc/t-crtfm" + tmake_file="${tmake_file} t-crtfm" ;; 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*) +sparc*-*-solaris2*) + tmake_file="$tmake_file t-crtfm" + extra_parts="$extra_parts crtfastmath.o" ;; 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) ;; @@ -538,7 +567,7 @@ sparc64-*-freebsd*|ultrasparc-*-freebsd*) ;; sparc64-*-linux*) # 64-bit SPARC's running GNU/Linux extra_parts="$extra_parts crtfastmath.o" - tmake_file="${tmake_file} sparc/t-crtfm" + tmake_file="${tmake_file} t-crtfm" ;; sparc64-*-netbsd*) ;; diff --git a/gcc/config/sparc/gmon-sol2.c b/libgcc/config/gmon-sol2.c similarity index 74% rename from gcc/config/sparc/gmon-sol2.c rename to libgcc/config/gmon-sol2.c index 452d98d7d94..614a1126b1e 100644 --- a/gcc/config/sparc/gmon-sol2.c +++ b/libgcc/config/gmon-sol2.c @@ -28,32 +28,67 @@ * 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 , + * 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 + * process profiling on solaris 2.X X86 + * + * It must be used in conjunction with sol2-gc1.asm, which is used to start + * and stop process monitoring. + * + * Differences. + * + * On Solaris 2 _mcount is called by library functions not mcount, so support + * has been added for both. + * + * Also the prototype for profil() is different + * + * Solaris 2 does not seem to have char *minbrk whcih allows the setting of + * the minimum SBRK region so this code has been removed and lets pray malloc + * does not mess it up. + * + * Notes + * + * This code could easily be integrated with the original gmon.c and perhaps + * should be. */ - #include "tconfig.h" #include "tsystem.h" #include /* for creat() */ -#if 0 -#include "sparc/gmon.h" -#else +#ifdef DEBUG +#include +#endif + +static void moncontrol (int); +extern void monstartup (char *, char *); +extern void _mcleanup (void); + struct phdr { char *lpc; char *hpc; int ncnt; }; + + #define HISTFRACTION 2 #define HISTCOUNTER unsigned short #define HASHFRACTION 1 #define ARCDENSITY 2 #define MINARCS 50 +#define BASEADDRESS 0x8000000 /* On Solaris 2 X86 all executables start here + and not at 0 */ + struct tostruct { char *selfpc; long count; unsigned short link; }; + struct rawarc { unsigned long raw_frompc; unsigned long raw_selfpc; @@ -62,10 +97,14 @@ struct rawarc { #define ROUNDDOWN(x,y) (((x)/(y))*(y)) #define ROUNDUP(x,y) ((((x)+(y)-1)/(y))*(y)) -#endif - /* extern mcount() asm ("mcount"); */ /*extern*/ char *minbrk /* asm ("minbrk") */; +typedef __SIZE_TYPE__ size_t; +typedef __PTRDIFF_TYPE__ intptr_t; + +extern int errno; + +extern void *sbrk (intptr_t); /* * froms is actually a bunch of unsigned shorts indexing tos @@ -76,7 +115,7 @@ static struct tostruct *tos = 0; static long tolimit = 0; static char *s_lowpc = 0; static char *s_highpc = 0; -static unsigned long s_textsize = 0; +static size_t s_textsize = 0; static int ssiz; static char *sbuf; @@ -92,23 +131,23 @@ extern void _mcleanup (void); void monstartup(char *lowpc, char *highpc) { - int monsize; + size_t monsize; char *buffer; - register int o; + register size_t o; /* * round lowpc and highpc to multiples of the density we're using * so the rest of the scaling (here and in gprof) stays in ints. */ lowpc = (char *) - ROUNDDOWN((unsigned long)lowpc, HISTFRACTION*sizeof(HISTCOUNTER)); + ROUNDDOWN((size_t)lowpc, HISTFRACTION*sizeof(HISTCOUNTER)); s_lowpc = lowpc; highpc = (char *) - ROUNDUP((unsigned long)highpc, HISTFRACTION*sizeof(HISTCOUNTER)); + ROUNDUP((size_t)highpc, HISTFRACTION*sizeof(HISTCOUNTER)); s_highpc = highpc; s_textsize = highpc - lowpc; monsize = (s_textsize / HISTFRACTION) + sizeof(struct phdr); - buffer = sbrk( monsize ); + buffer = (char *) sbrk( monsize ); if ( buffer == (char *) -1 ) { write( 2 , MSG , sizeof(MSG) ); return; @@ -206,8 +245,9 @@ _mcleanup(void) return; } # ifdef DEBUG - fprintf( stderr , "[mcleanup] sbuf 0x%x ssiz %d\n" , sbuf , ssiz ); + fprintf( stderr , "[mcleanup] sbuf %#x ssiz %d\n" , sbuf , ssiz ); # endif /* DEBUG */ + write( fd , sbuf , ssiz ); endfrom = s_textsize / (HASHFRACTION * sizeof(*froms)); for ( fromindex = 0 ; fromindex < endfrom ; fromindex++ ) { @@ -218,7 +258,7 @@ _mcleanup(void) for (toindex=froms[fromindex]; toindex!=0; toindex=tos[toindex].link) { # ifdef DEBUG fprintf( stderr , - "[mcleanup] frompc 0x%x selfpc 0x%x count %d\n" , + "[mcleanup] frompc %#x selfpc %#x count %d\n" , frompc , tos[toindex].selfpc , tos[toindex].count ); # endif /* DEBUG */ rawarc.raw_frompc = (unsigned long) frompc; @@ -230,6 +270,7 @@ _mcleanup(void) close( fd ); } +#ifdef __sparc__ /* * The SPARC stack frame is only held together by the frame pointers * in the register windows. According to the SVR4 SPARC ABI @@ -273,25 +314,99 @@ static void internal_mcount (char *, unsigned short *) __attribute__ ((used)); 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 *); -static void internal_mcount(char *selfpc, unsigned short *frompcindex) +/* See GLIBC for additional information about this technique. */ +asm(".globl _mcount\n" + "\t.type\t_mcount, @function\n" + "_mcount:\n" + /* The compiler calls _mcount after the prologue, and does not + save any of the registers. Therefore we must preserve all + seven registers which may contain function arguments. */ + "\tsubq\t$0x38,%rsp\n" + "\tmovq\t%rax,(%rsp)\n" + "\tmovq\t%rcx,0x08(%rsp)\n" + "\tmovq\t%rdx,0x10(%rsp)\n" + "\tmovq\t%rsi,0x18(%rsp)\n" + "\tmovq\t%rdi,0x20(%rsp)\n" + "\tmovq\t%r8,0x28(%rsp)\n" + "\tmovq\t%r9,0x30(%rsp)\n" + /* Get SELFPC (pushed by the call to this function) and + FROMPCINDEX (via the frame pointer. */ + "\tmovq\t0x38(%rsp),%rdi\n" + "\tmovq\t0x8(%rbp),%rsi\n" + "\tcall\tinternal_mcount\n" + /* Restore the saved registers. */ + "\tmovq\t0x30(%rsp),%r9\n" + "\tmovq\t0x28(%rsp),%r8\n" + "\tmovq\t0x20(%rsp),%rdi\n" + "\tmovq\t0x18(%rsp),%rsi\n" + "\tmovq\t0x10(%rsp),%rdx\n" + "\tmovq\t0x08(%rsp),%rcx\n" + "\tmovq\t(%rsp),%rax\n" + "\taddq\t$0x38,%rsp\n" + "\tretq\n" + ); +#else +extern void internal_mcount (void); + + /* Solaris 2 libraries use _mcount. */ +asm(".globl _mcount; _mcount: jmp internal_mcount"); + /* This is for compatibility with old versions of gcc which used mcount. */ +asm(".globl mcount; mcount: jmp internal_mcount"); +#endif + +#ifdef __sparc__ +static +#endif +void +internal_mcount ( +#if defined __sparc__ || defined __x86_64__ + char *selfpc, + unsigned short *frompcindex +#else + void +#endif + ) { +#if !defined __sparc__ && !defined __x86_64__ + register char *selfpc; + register unsigned short *frompcindex; +#endif register struct tostruct *top; register struct tostruct *prevtop; register long toindex; static char already_setup; +#if !defined __sparc__ && !defined __x86_64__ /* * find the return address for mcount, * and the return address for mcount's caller. */ + /* selfpc = pc pushed by mcount call. + This identifies the function that was just entered. */ + selfpc = (void *) __builtin_return_address (0); + /* frompcindex = pc in preceding frame. + This identifies the caller of the function just entered. */ + frompcindex = (void *) __builtin_return_address (1); +#endif + if(!already_setup) { extern char etext[]; +#ifdef __sparc__ extern char _start[]; extern char _init[]; +#endif already_setup = 1; +#if defined __sparc__ monstartup(_start < _init ? _start : _init, etext); +#elif defined __x86_64__ + monstartup(0, etext); +#else + monstartup((char*)0x08040000, etext); +#endif #ifdef USE_ONEXIT on_exit(_mcleanup, 0); #else @@ -410,7 +525,8 @@ static void moncontrol(int mode) /* start */ profil((unsigned short *)(sbuf + sizeof(struct phdr)), ssiz - sizeof(struct phdr), - (long)s_lowpc, s_scale); + (size_t)s_lowpc, s_scale); + profiling = 0; } else { /* stop */ diff --git a/libgcc/config/i386/sol2-c1.S b/libgcc/config/i386/sol2-c1.S new file mode 100644 index 00000000000..b2e473f5b9c --- /dev/null +++ b/libgcc/config/i386/sol2-c1.S @@ -0,0 +1,173 @@ +/* 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 +. */ + + +/* 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 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 diff --git a/libgcc/config/i386/sol2-ci.S b/libgcc/config/i386/sol2-ci.S new file mode 100644 index 00000000000..61e1436f560 --- /dev/null +++ b/libgcc/config/i386/sol2-ci.S @@ -0,0 +1,40 @@ +/* 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 +. */ + + +/* 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: diff --git a/libgcc/config/i386/sol2-cn.S b/libgcc/config/i386/sol2-cn.S new file mode 100644 index 00000000000..993675d2341 --- /dev/null +++ b/libgcc/config/i386/sol2-cn.S @@ -0,0 +1,35 @@ +/* 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 +. */ + + +/* 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 diff --git a/libgcc/config/i386/t-crtfm b/libgcc/config/i386/t-crtfm index 6e89296b2b3..f71f99a7123 100644 --- a/libgcc/config/i386/t-crtfm +++ b/libgcc/config/i386/t-crtfm @@ -1,5 +1,4 @@ # This is an endfile, Use -minline-all-stringops to ensure # that __builtin_memset doesn't refer to the lib function memset(). crtfastmath.o: $(gcc_srcdir)/config/i386/crtfastmath.c - $(gcc_compile) -msse -minline-all-stringops -c \ - $(gcc_srcdir)/config/i386/crtfastmath.c + $(gcc_compile) -msse -minline-all-stringops -c $< diff --git a/libgcc/config/i386/t-crtstuff b/libgcc/config/i386/t-crtstuff new file mode 100644 index 00000000000..c14dd9411ae --- /dev/null +++ b/libgcc/config/i386/t-crtstuff @@ -0,0 +1,7 @@ +# 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 diff --git a/libgcc/config/i386/t-sol2 b/libgcc/config/i386/t-sol2 index 883b1a92acc..1102146a589 100644 --- a/libgcc/config/i386/t-sol2 +++ b/libgcc/config/i386/t-sol2 @@ -1,25 +1,3 @@ -# 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 # 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 @@ -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 # the call & alignment statement, but before we switch back to the # .text section. - CRTSTUFF_T_CFLAGS = -fPIC -O2 -TARGET_LIBGCC2_CFLAGS = -fPIC # Add support for the introduction of 128-bit long double. SHLIB_MAPFILES += $(srcdir)/config/i386/libgcc-sol2.ver diff --git a/gcc/config/sparc/sol2-c1.asm b/libgcc/config/sparc/sol2-c1.S similarity index 100% rename from gcc/config/sparc/sol2-c1.asm rename to libgcc/config/sparc/sol2-c1.S diff --git a/gcc/config/sparc/sol2-ci.asm b/libgcc/config/sparc/sol2-ci.S similarity index 100% rename from gcc/config/sparc/sol2-ci.asm rename to libgcc/config/sparc/sol2-ci.S diff --git a/gcc/config/sparc/sol2-cn.asm b/libgcc/config/sparc/sol2-cn.S similarity index 100% rename from gcc/config/sparc/sol2-cn.asm rename to libgcc/config/sparc/sol2-cn.S diff --git a/libgcc/config/sparc/t-crtfm b/libgcc/config/sparc/t-crtfm deleted file mode 100644 index d6d616f1713..00000000000 --- a/libgcc/config/sparc/t-crtfm +++ /dev/null @@ -1,2 +0,0 @@ -crtfastmath.o: $(gcc_srcdir)/config/sparc/crtfastmath.c - $(gcc_compile) -c $(gcc_srcdir)/config/sparc/crtfastmath.c diff --git a/libgcc/config/sparc/t-softfp b/libgcc/config/sparc/t-softfp new file mode 100644 index 00000000000..94dfcfae0a1 --- /dev/null +++ b/libgcc/config/sparc/t-softfp @@ -0,0 +1,29 @@ +# 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 +# . + +# 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 $< >> $@ diff --git a/libgcc/config/sparc/t-softmul b/libgcc/config/sparc/t-softmul new file mode 100644 index 00000000000..49faae47c53 --- /dev/null +++ b/libgcc/config/sparc/t-softmul @@ -0,0 +1,2 @@ +LIB1ASMSRC = sparc/lb1spc.asm +LIB1ASMFUNCS = _mulsi3 _divsi3 _modsi3 diff --git a/libgcc/config/sparc/t-sol2 b/libgcc/config/sparc/t-sol2 new file mode 100644 index 00000000000..372522bd0e4 --- /dev/null +++ b/libgcc/config/sparc/t-sol2 @@ -0,0 +1,6 @@ +# 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 diff --git a/libgcc/config/t-crtfm b/libgcc/config/t-crtfm new file mode 100644 index 00000000000..6b9d84cf768 --- /dev/null +++ b/libgcc/config/t-crtfm @@ -0,0 +1,2 @@ +crtfastmath.o: $(gcc_srcdir)/config/$(cpu_type)/crtfastmath.c + $(gcc_compile) -c $< diff --git a/libgcc/config/t-crtin b/libgcc/config/t-crtin new file mode 100644 index 00000000000..b30e0d52e2f --- /dev/null +++ b/libgcc/config/t-crtin @@ -0,0 +1,4 @@ +crti.o: $(srcdir)/config/$(cpu_type)/sol2-ci.S + $(crt_compile) -c $< +crtn.o: $(srcdir)/config/$(cpu_type)/sol2-cn.S + $(crt_compile) -c $< diff --git a/libgcc/config/t-rtems b/libgcc/config/t-rtems new file mode 100644 index 00000000000..85e931e60f6 --- /dev/null +++ b/libgcc/config/t-rtems @@ -0,0 +1,4 @@ +# 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 diff --git a/gcc/config/t-slibgcc-sld b/libgcc/config/t-slibgcc similarity index 54% rename from gcc/config/t-slibgcc-sld rename to libgcc/config/t-slibgcc index 013a0d70e9e..0b5cc4bfc50 100644 --- a/gcc/config/t-slibgcc-sld +++ b/libgcc/config/t-slibgcc @@ -1,4 +1,5 @@ -# 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. # @@ -16,35 +17,35 @@ # along with GCC; see the file COPYING3. If not see # . -# Build a shared libgcc library with the Solaris linker. +# Build a shared libgcc library. SHLIB_EXT = .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_OBJS = @shlib_objs@ SHLIB_DIR = @multilib_dir@ 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 \ - -Wl,-h,$(SHLIB_SONAME) -Wl,-z,text -Wl,-z,defs \ - -Wl,-M,$(SHLIB_MAP) -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp \ - @multilib_flags@ $(SHLIB_OBJS) -lc && \ +SHLIB_LINK = $(CC) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \ + $(SHLIB_LDFLAGS) \ + -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp @multilib_flags@ \ + $(SHLIB_OBJS) $(SHLIB_LC) && \ rm -f $(SHLIB_DIR)/$(SHLIB_SOLINK) && \ if [ -f $(SHLIB_DIR)/$(SHLIB_SONAME) ]; then \ mv -f $(SHLIB_DIR)/$(SHLIB_SONAME) \ $(SHLIB_DIR)/$(SHLIB_SONAME).backup; \ else true; fi && \ mv $(SHLIB_DIR)/$(SHLIB_SONAME).tmp $(SHLIB_DIR)/$(SHLIB_SONAME) && \ - $(LN_S) $(SHLIB_SONAME) $(SHLIB_DIR)/$(SHLIB_SOLINK) -# $(slibdir) double quoted to protect it from expansion while building -# libgcc.mk. We want this delayed until actual install time. + $(SHLIB_MAKE_SOLINK) SHLIB_INSTALL = \ - $$(mkinstalldirs) $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL); \ + $(mkinstalldirs) $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL); \ $(INSTALL_DATA) $(SHLIB_DIR)/$(SHLIB_SONAME) \ - $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SONAME); \ - rm -f $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK); \ - $(LN_S) $(SHLIB_SONAME) \ - $$(DESTDIR)$$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK) -SHLIB_MKMAP = $(srcdir)/mkmap-symver.awk -SHLIB_MAPFILES = $$(libgcc_objdir)/libgcc-std.ver + $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SONAME); \ + rm -f $(DESTDIR)$(slibdir)$(SHLIB_SLIBDIR_QUAL)/$(SHLIB_SOLINK); \ + $(SHLIB_INSTALL_SOLINK) diff --git a/libgcc/config/t-slibgcc-elf-ver b/libgcc/config/t-slibgcc-elf-ver new file mode 100644 index 00000000000..2616d31cae5 --- /dev/null +++ b/libgcc/config/t-slibgcc-elf-ver @@ -0,0 +1,4 @@ +# Build a shared libgcc library for ELF with symbol versioning. + +SHLIB_MKMAP = $(gcc_srcdir)/mkmap-symver.awk +SHLIB_MAPFILES = libgcc-std.ver diff --git a/libgcc/config/t-slibgcc-gld b/libgcc/config/t-slibgcc-gld new file mode 100644 index 00000000000..7e77e0a0b27 --- /dev/null +++ b/libgcc/config/t-slibgcc-gld @@ -0,0 +1,5 @@ +# 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) diff --git a/libgcc/config/t-slibgcc-sld b/libgcc/config/t-slibgcc-sld new file mode 100644 index 00000000000..178700047cc --- /dev/null +++ b/libgcc/config/t-slibgcc-sld @@ -0,0 +1,5 @@ +# 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) diff --git a/libgcc/config/t-sol2 b/libgcc/config/t-sol2 new file mode 100644 index 00000000000..2adcb13a820 --- /dev/null +++ b/libgcc/config/t-sol2 @@ -0,0 +1,34 @@ +# Copyright (C) 2004, 2008, 2009, 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 +# . + +# 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.o: $(srcdir)/config/gmon-sol2.c + $(gcc_compile) -c $< + +# Assemble startup files. +crt1.o: $(srcdir)/config/$(cpu_type)/sol2-c1.S + $(crt_compile) -c $< +gcrt1.o: $(srcdir)/config/$(cpu_type)/sol2-c1.S + $(crt_compile) -c -DGCRT1 $< + +HOST_LIBGCC2_CFLAGS = -fPIC diff --git a/libgcc/configure b/libgcc/configure index 8a27aab1886..5acee3a63b1 100644 --- a/libgcc/configure +++ b/libgcc/configure @@ -555,6 +555,7 @@ ac_subst_vars='LTLIBOBJS LIBOBJS asm_hidden_op extra_parts +cpu_type tmake_file set_use_emutls set_have_cc_tls @@ -3742,6 +3743,23 @@ $as_echo "$libgcc_cv_fixed_point" >&6; } 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 &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. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether assembler supports CFI directives" >&5 $as_echo_n "checking whether assembler supports CFI directives... " >&6; } @@ -3938,6 +3956,7 @@ tmake_file="${tmake_file_}" + # We need multilib support. ac_config_files="$ac_config_files Makefile" diff --git a/libgcc/configure.ac b/libgcc/configure.ac index 7dbe114e394..a81e20943bf 100644 --- a/libgcc/configure.ac +++ b/libgcc/configure.ac @@ -4,6 +4,7 @@ sinclude(../config/enable.m4) sinclude(../config/tls.m4) sinclude(../config/acx.m4) sinclude(../config/no-executables.m4) +sinclude(../config/lib-ld.m4) sinclude(../config/override.m4) sinclude(../config/dfp.m4) @@ -166,6 +167,8 @@ AC_CACHE_CHECK([whether fixed-point is supported], [libgcc_cv_fixed_point], fixed_point=$libgcc_cv_fixed_point AC_SUBST(fixed_point) +AC_LIB_PROG_LD_GNU + # Check for assembler CFI support. AC_CACHE_CHECK([whether assembler supports CFI directives], [libgcc_cv_cfi], [AC_COMPILE_IFELSE( @@ -268,6 +271,7 @@ tmake_file="${tmake_file_}" AC_SUBST(tmake_file) # Substitute configuration variables +AC_SUBST(cpu_type) AC_SUBST(extra_parts) AC_SUBST(asm_hidden_op) -- 2.30.2