From patchwork Mon May 30 14:29:34 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rainer Orth X-Patchwork-Id: 97919 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 79C23B6F69 for ; Tue, 31 May 2011 00:30:41 +1000 (EST) Received: (qmail 11696 invoked by alias); 30 May 2011 14:30:39 -0000 Received: (qmail 11653 invoked by uid 22791); 30 May 2011 14:30:32 -0000 X-SWARE-Spam-Status: No, hits=-0.4 required=5.0 tests=AWL, BAYES_50, TW_WH, T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from snape.CeBiTec.Uni-Bielefeld.DE (HELO smtp-relay.CeBiTec.Uni-Bielefeld.DE) (129.70.160.84) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 30 May 2011 14:30:09 +0000 Received: from localhost (localhost.CeBiTec.Uni-Bielefeld.DE [127.0.0.1]) by smtp-relay.CeBiTec.Uni-Bielefeld.DE (Postfix) with ESMTP id 3427D9ED; Mon, 30 May 2011 16:30:07 +0200 (CEST) Received: from smtp-relay.CeBiTec.Uni-Bielefeld.DE ([127.0.0.1]) by localhost (malfoy.CeBiTec.Uni-Bielefeld.DE [127.0.0.1]) (amavisd-new, port 10024) with LMTP id FJTzcaaGWM+Y; Mon, 30 May 2011 16:29:36 +0200 (CEST) Received: from manam.CeBiTec.Uni-Bielefeld.DE (manam.CeBiTec.Uni-Bielefeld.DE [129.70.161.120]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp-relay.CeBiTec.Uni-Bielefeld.DE (Postfix) with ESMTPS id 983DD9E8; Mon, 30 May 2011 16:29:36 +0200 (CEST) Received: (from ro@localhost) by manam.CeBiTec.Uni-Bielefeld.DE (8.14.4+Sun/8.14.4/Submit) id p4UETYjn019894; Mon, 30 May 2011 16:29:34 +0200 (MEST) From: Rainer Orth To: Eric Botcazou Cc: gcc-patches@gcc.gnu.org, Paolo Bonzini , Ralf Wildenhues , Joel Sherrill , Ralf Corsepius Subject: Re: [build] Move Solaris 2 startup files to toplevel libgcc, revised References: <201105272016.32640.ebotcazou@adacore.com> Date: Mon, 30 May 2011 16:29:34 +0200 In-Reply-To: <201105272016.32640.ebotcazou@adacore.com> (Eric Botcazou's message of "Fri, 27 May 2011 20:16:32 +0200") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.3 (usg-unix-v) MIME-Version: 1.0 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Eric Botcazou writes: >> * Non-Solaris SPARC changes: >> >> After I had moved sparc/sol2-c[in].asm to libgcc, I noticed that >> despite the name a few non-Solaris targets uses those files, too: >> >> sparc-*-elf*, sparc-*-rtems*, sparc64-*-elf*, sparc64-*-rtems* > > Yes, I tried to untangle that, but the RTEMS folks complained so I had to > backpedal. Note that this is also the case on the i386 side. Drats, I hadn't expected anything like this ;-( Here's the updated patch which takes care of this. I've taken the liberty to rename gcc/config/i386/t-rtems-i386 to gcc/config/i386/t-rtems, following all other RTEMS makefile fragments. I'd be really grateful if the RTEMS maintainers could give it a whirl. Besides, I still need build and SPARC maintainer approval for the non-Solaris parts of the patch from as outlined in the previous submission: http://gcc.gnu.org/ml/gcc-patches/2011-05/msg02181.html Bootstrapped without regressions on i386-pc-solaris2.10, i386-pc-solaris2.11 and sparc-sun-solaris2.11. Ok for mainline after the RTEMS parts have been tested/approved? Thanks. Rainer 2011-05-02 Rainer Orth gcc: * config.gcc (i[34567]86-*-rtems*): Remove extra_parts. Use i386/t-rtems. Remove i386-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-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. * config/t-slibgcc-dummy: New file. 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. diff --git a/gcc/config.gcc b/gcc/config.gcc --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1320,8 +1320,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" @@ -1350,16 +1349,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}" @@ -1370,9 +1366,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 @@ -2441,13 +2434,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" @@ -2504,12 +2494,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 @@ -2517,7 +2502,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 @@ -2531,14 +2515,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 diff --git a/gcc/config/i386/sol2-gc1.asm b/gcc/config/i386/sol2-gc1.asm deleted file mode 100644 diff --git a/gcc/config/i386/t-rtems-i386 b/gcc/config/i386/t-rtems rename from gcc/config/i386/t-rtems-i386 rename to gcc/config/i386/t-rtems --- a/gcc/config/i386/t-rtems-i386 +++ b/gcc/config/i386/t-rtems @@ -1,4 +1,5 @@ -# 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. # @@ -16,43 +17,6 @@ # 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 @@ -62,8 +26,3 @@ MULTILIB_MATCHES += mtune?pentium=mtune? 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 --- 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-sol2-64 b/gcc/config/sparc/t-sol2-64 --- 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-dummy b/gcc/config/t-slibgcc-dummy new file mode 100644 --- /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 --- a/gcc/config/t-sol2 +++ b/gcc/config/t-sol2 @@ -29,6 +29,9 @@ sol2.o: $(srcdir)/config/sol2.c $(CONFIG $(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/Makefile.in b/libgcc/Makefile.in --- 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 --- 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 rename from gcc/config/sparc/gmon-sol2.c rename to libgcc/config/gmon-sol2.c --- 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 *, uns 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/gcc/config/i386/sol2-c1.asm b/libgcc/config/i386/sol2-c1.S rename from gcc/config/i386/sol2-c1.asm rename to libgcc/config/i386/sol2-c1.S --- a/gcc/config/i386/sol2-c1.asm +++ b/libgcc/config/i386/sol2-c1.S @@ -1,46 +1,56 @@ -! crt1.s for Solaris 2, x86 +/* 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 -! . + 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 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 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). +/* 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: @@ -48,29 +58,29 @@ _start: 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. +/* 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(). +/* 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 + movl $CLEANUP,%eax testl %eax,%eax je .L1 - pushl $_cleanup + 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(). +/* 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 @@ -78,74 +88,86 @@ _start: call atexit .L2: -! Register _fini() with atexit(). We will take care of calling _init() -! directly. +/* 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!). +#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. +/* 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. -! +/* 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(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(). +/* 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. +/* 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! +/* 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. +#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/gcc/config/i386/sol2-ci.asm b/libgcc/config/i386/sol2-ci.S rename from gcc/config/i386/sol2-ci.asm rename to libgcc/config/i386/sol2-ci.S --- a/gcc/config/i386/sol2-ci.asm +++ b/libgcc/config/i386/sol2-ci.S @@ -1,31 +1,31 @@ -! crti.s for Solaris 2, x86. +/* 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 -! . + 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. -! 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. +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" diff --git a/gcc/config/i386/sol2-cn.asm b/libgcc/config/i386/sol2-cn.S rename from gcc/config/i386/sol2-cn.asm rename to libgcc/config/i386/sol2-cn.S --- a/gcc/config/i386/sol2-cn.asm +++ b/libgcc/config/i386/sol2-cn.S @@ -1,30 +1,30 @@ -! crtn.s for Solaris 2, x86. +/* 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 -! . + 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. -! This file just supplies returns for the .init and .fini sections. It is -! linked in after all other files. +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" diff --git a/libgcc/config/i386/t-crtfm b/libgcc/config/i386/t-crtfm --- 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/gcc/config/i386/t-crtstuff b/libgcc/config/i386/t-crtstuff copy from gcc/config/i386/t-crtstuff copy to libgcc/config/i386/t-crtstuff diff --git a/gcc/config/i386/t-rtems-i386 b/libgcc/config/i386/t-softfp copy from gcc/config/i386/t-rtems-i386 copy to libgcc/config/i386/t-softfp --- a/gcc/config/i386/t-rtems-i386 +++ b/libgcc/config/i386/t-softfp @@ -1,4 +1,5 @@ -# 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. # @@ -15,55 +16,27 @@ # 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 +LIB2ADD = += $(gcc_srcdir)/config/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 +$(gcc_objdir)/dp-bit.c: $(gcc_srcdir)/config/fp-bit.c + echo '#ifdef __LITTLE_ENDIAN__' > $@ + echo '#define FLOAT_BIT_ORDER_MISMATCH' >> $@ + echo '#endif' >> $@ + cat $< >> $@ -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 +$(gcc_objdir)/fp-bit.c: $(gcc_srcdir)/config/fp-bit.c + echo '#define FLOAT' > $@ + echo '#ifdef __LITTLE_ENDIAN__' >> $@ + echo '#define FLOAT_BIT_ORDER_MISMATCH' >> $@ + echo '#endif' >> $@ + cat $< >> $@ -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 +$(gcc_objdir)/xp-bit.c: $(gcc_srcdir)/config/fp-bit.c + echo '#define EXTENDED_FLOAT_STUBS' > $@ + cat $< >> $@ diff --git a/libgcc/config/i386/t-sol2 b/libgcc/config/i386/t-sol2 --- 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 @@ # 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 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 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 rename from gcc/config/sparc/sol2-cn.asm rename to libgcc/config/sparc/sol2-cn.S diff --git a/libgcc/config/sparc/t-softfp b/libgcc/config/sparc/t-softfp new file mode 100644 --- /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 --- /dev/null +++ b/libgcc/config/sparc/t-softmul @@ -0,0 +1,2 @@ +LIB1ASMSRC = sparc/lb1spc.asm +LIB1ASMFUNCS = _mulsi3 _divsi3 _modsi3 diff --git a/gcc/config/sparc/t-sol2 b/libgcc/config/sparc/t-sol2 rename from gcc/config/sparc/t-sol2 rename to libgcc/config/sparc/t-sol2 --- a/gcc/config/sparc/t-sol2 +++ b/libgcc/config/sparc/t-sol2 @@ -1,39 +1,6 @@ -# 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/libgcc/config/sparc/t-crtfm b/libgcc/config/t-crtfm rename from libgcc/config/sparc/t-crtfm rename to libgcc/config/t-crtfm --- a/libgcc/config/sparc/t-crtfm +++ b/libgcc/config/t-crtfm @@ -1,2 +1,2 @@ -crtfastmath.o: $(gcc_srcdir)/config/sparc/crtfastmath.c - $(gcc_compile) -c $(gcc_srcdir)/config/sparc/crtfastmath.c +crtfastmath.o: $(gcc_srcdir)/config/$(cpu_type)/crtfastmath.c + $(gcc_compile) -c $< diff --git a/gcc/config/sparc/t-crtin b/libgcc/config/t-crtin rename from gcc/config/sparc/t-crtin rename to libgcc/config/t-crtin --- a/gcc/config/sparc/t-crtin +++ b/libgcc/config/t-crtin @@ -1,6 +1,4 @@ -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 +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/gcc/config/t-rtems b/libgcc/config/t-rtems copy from gcc/config/t-rtems copy to libgcc/config/t-rtems --- a/gcc/config/t-rtems +++ b/libgcc/config/t-rtems @@ -1,7 +1,4 @@ -# RTEMS always has limits.h. -LIMITS_H_TEST = true - # 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. -LIBGCC2_INCLUDES = -I$(srcdir)/../newlib/libc/sys/rtems/include +HOST_LIBGCC2_CFLAGS = -I$(srcdir)/../newlib/libc/sys/rtems/include diff --git a/gcc/config/t-slibgcc-sld b/libgcc/config/t-slibgcc rename from gcc/config/t-slibgcc-sld rename to libgcc/config/t-slibgcc --- 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 --- /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 = $(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 --- /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 --- /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/gcc/config/t-sol2 b/libgcc/config/t-sol2 copy from gcc/config/t-sol2 copy to libgcc/config/t-sol2 --- a/gcc/config/t-sol2 +++ b/libgcc/config/t-sol2 @@ -16,21 +16,19 @@ # along with GCC; see the file COPYING3. If not see # . -# Solaris-specific format checking and pragmas -sol2-c.o: $(srcdir)/config/sol2-c.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ - tree.h c-family/c-format.h $(C_PRAGMA_H) $(C_COMMON_H) $(CPPLIB_H) \ - intl.h $(TM_H) $(TM_P_H) - $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ - $(srcdir)/config/sol2-c.c - -# Solaris-specific attributes -sol2.o: $(srcdir)/config/sol2.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ - tree.h output.h $(TM_H) $(TARGET_H) $(TM_P_H) $(GGC_H) - $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ - $(srcdir)/config/sol2.c - # 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 -LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h unwind-dw2-fde.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.ac b/libgcc/configure.ac --- 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 s 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)