Once the Solaris 2 toplevel libgcc patch

        http://gcc.gnu.org/ml/gcc-patches/2011-05/msg00098.html

is in, IRIX 6 can follow.  The straightforward patch below handles
this.  Only two issues are noteworthy:

* Support for the O32 ABI in the startup files has been removed since
  that ABI has already been obsoleted in gcc 4.5.

* With the introduction of libgcc/config/t-slibgcc, t-slibgcc-irix
  becomes quite small.  While the IRIX linker cannot support symbol
  versioning, it can hide all symbols but those named with its
  -exports_file option.  I've verified with elfdump/odump -Dt that
  several unnecessary symbols have indeed become hidden.

A previous version of this patch has been bootstrapped without
regressions on mips-sgi-irix6.5, will install on mainline once the patch
above has been approved and I've bootstrapped this exact version.

        Rainer


2011-04-30  Rainer Orth  <r...@cebitec.uni-bielefeld.de>

        gcc:
        * config.gcc (mips-sgi-irix6.5*): Set tmake_file to mips/t-irix6
        t-slibgcc-dummy.
        * config/mips/irix-crti.asm: Move to ../libgcc/config/mips/irix-crti.S.
        * config/mips/irix-crtn.asm: Move to ../libgcc/config/mips/irix-crtn.S.
        * config/mips/t-irix6: New file.
        * config/mips/t-shlib-irix: Move to ../libgcc/config/mips.

        libgcc:
        * config.host (mips-sgi-irix[56]*): Restrict to mips-sgi-irix6.5*.
        Set tmake_file, extra_parts.
        * config/mips/irix-crti.S: Move from ../gcc/config/mips/irix-crti.asm.
        Remove O32 support.
        * config/mips/irix-crtn.S: Move from ../gcc/config/mips/irix-crtn.asm.
        Remove O32 support.
        * config/mips/t-irix6: New file.
        * config/mips/t-shlib-irix: New file.

diff --git a/gcc/config.gcc b/gcc/config.gcc
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -1778,7 +1778,7 @@ microblaze*-*-*)
         ;;
 mips-sgi-irix6.5*)
        tm_file="elfos.h ${tm_file} mips/iris6.h"
-       tmake_file="mips/t-iris mips/t-iris6 mips/t-slibgcc-irix"
+       tmake_file="mips/t-irix6 t-slibgcc-dummy"
        extra_options="${extra_options} rpath.opt mips/iris6.opt"
        target_cpu_default="MASK_ABICALLS"
        tm_defines="${tm_defines} MIPS_ISA_DEFAULT=3 MIPS_ABI_DEFAULT=ABI_N32"
diff --git a/gcc/config/mips/t-iris b/gcc/config/mips/t-iris
deleted file mode 100644
--- a/gcc/config/mips/t-iris
+++ /dev/null
@@ -1,9 +0,0 @@
-$(T)irix-crti.o: $(srcdir)/config/mips/irix-crti.asm $(GCC_PASSES)
-       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
-       -c -o $@ -x assembler-with-cpp $<
-
-$(T)irix-crtn.o: $(srcdir)/config/mips/irix-crtn.asm $(GCC_PASSES)
-       $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
-       -c -o $@ -x assembler-with-cpp $<
-
-EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o irix-crti.o irix-crtn.o
diff --git a/gcc/config/mips/t-irix6 b/gcc/config/mips/t-irix6
new file mode 100644
--- /dev/null
+++ b/gcc/config/mips/t-irix6
@@ -0,0 +1,4 @@
+MULTILIB_OPTIONS=mabi=n32/mabi=64
+MULTILIB_DIRNAMES=n32 64
+MULTILIB_MATCHES=
+MULTILIB_OSDIRNAMES=../lib32 ../lib64
diff --git a/gcc/config/mips/t-slibgcc-irix b/gcc/config/mips/t-slibgcc-irix
deleted file mode 100644
--- a/gcc/config/mips/t-slibgcc-irix
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
-#
-# This file is part of GCC.
-#
-# GCC is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GCC is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GCC; see the file COPYING3.  If not see
-# <http://www.gnu.org/licenses/>.
-
-# Build a shared libgcc library.
-
-SHLIB_EXT = .so
-SHLIB_SOLINK = @shlib_base_name@.so
-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_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
-       -Wl,-soname,$(SHLIB_SONAME) \
-       -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_INSTALL = \
-       $$(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-flat.awk
-SHLIB_MAPFILES = $$(libgcc_objdir)/libgcc-std.ver
diff --git a/libgcc/config.host b/libgcc/config.host
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -405,7 +405,9 @@ mcore-*-elf)
 microblaze*-*-*)
         tmake_file="microblaze/t-microblaze"
        ;;
-mips-sgi-irix[56]*)
+mips-sgi-irix6.5*)
+       tmake_file="mips/t-irix6 t-slibgcc t-slibgcc-elf mips/t-slibgcc-irix"
+       extra_parts="crtbegin.o crtend.o irix-crti.o irix-crtn.o"
        ;;
 mips*-*-netbsd*)                       # NetBSD/mips, either endian.
        ;;
diff --git a/gcc/config/mips/irix-crti.asm b/libgcc/config/mips/irix-crti.S
rename from gcc/config/mips/irix-crti.asm
rename to libgcc/config/mips/irix-crti.S
--- a/gcc/config/mips/irix-crti.asm
+++ b/libgcc/config/mips/irix-crti.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2004, 2008 Free Software Foundation, Inc.
+/* Copyright (C) 2004, 2008, 2011 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -52,26 +52,16 @@ see the files COPYING3 and COPYING.RUNTI
        .section .gcc_init,"ax",@progbits
        .globl  __gcc_init
 __gcc_init:
-#if _MIPS_SIM == _ABIO32
-       addiu   $sp,$sp,-16
-       sw      $31,0($sp)
-#else
        daddiu  $sp,$sp,-16
        sd      $31,0($sp)
        sd      $28,8($sp)
-#endif
 
        .section .gcc_fini,"ax",@progbits
        .globl  __gcc_fini
 __gcc_fini:
-#if _MIPS_SIM == _ABIO32
-       addiu   $sp,$sp,-16
-       sw      $31,0($sp)
-#else
        daddiu  $sp,$sp,-16
        sd      $31,0($sp)
        sd      $28,8($sp)
-#endif
 
 /* This object will typically be included in the final link for both
    shared libraries and executable, and we need to hide the symbols to
diff --git a/gcc/config/mips/irix-crtn.asm b/libgcc/config/mips/irix-crtn.S
rename from gcc/config/mips/irix-crtn.asm
rename to libgcc/config/mips/irix-crtn.S
--- a/gcc/config/mips/irix-crtn.asm
+++ b/libgcc/config/mips/irix-crtn.S
@@ -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.
 
@@ -26,25 +26,13 @@ see the files COPYING3 and COPYING.RUNTI
        .set    nomacro
 
        .section .gcc_init,"ax",@progbits
-#if _MIPS_SIM == _ABIO32
-       lw      $31,0($sp)
-       jr      $31
-       addiu   $sp,$sp,16
-#else
        ld      $31,0($sp)
        ld      $28,8($sp)
        jr      $31
        daddiu  $sp,$sp,16
-#endif
 
        .section .gcc_fini,"ax",@progbits
-#if _MIPS_SIM == _ABIO32
-       lw      $31,0($sp)
-       jr      $31
-       addiu   $sp,$sp,16
-#else
        ld      $31,0($sp)
        ld      $28,8($sp)
        jr      $31
        daddiu  $sp,$sp,16
-#endif
diff --git a/gcc/config/mips/t-iris6 b/libgcc/config/mips/t-irix6
rename from gcc/config/mips/t-iris6
rename to libgcc/config/mips/t-irix6
--- a/gcc/config/mips/t-iris6
+++ b/libgcc/config/mips/t-irix6
@@ -1,5 +1,5 @@
 # Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005,
-# 2006, 2010 Free Software Foundation, Inc.
+# 2006, 2010, 2011 Free Software Foundation, Inc.
 #
 # This file is part of GCC.
 #
@@ -17,22 +17,20 @@
 # along with GCC; see the file COPYING3.  If not see
 # <http://www.gnu.org/licenses/>.
 
-MULTILIB_OPTIONS=mabi=n32/mabi=64
-MULTILIB_DIRNAMES=n32 64
-MULTILIB_MATCHES=
-MULTILIB_OSDIRNAMES=../lib32 ../lib64
+irix-crti.o: $(srcdir)/config/mips/irix-crti.S
+       $(crt_compile) -c $<
 
-LIBGCC = stmp-multilib
-INSTALL_LIBGCC = install-multilib
+irix-crtn.o: $(srcdir)/config/mips/irix-crtn.S
+       $(crt_compile) -c $<
 
 TPBIT = tp-bit.c
 
-tp-bit.c: $(srcdir)/config/fp-bit.c
-       echo '#ifdef __MIPSEL__' > tp-bit.c
-       echo '# define FLOAT_BIT_ORDER_MISMATCH' >> tp-bit.c
-       echo '#endif' >> tp-bit.c
-       echo '#define QUIET_NAN_NEGATED' >> tp-bit.c
-       echo '#if __LDBL_MANT_DIG__ == 106' >> tp-bit.c
-       echo '# define TFLOAT' >> tp-bit.c
-       cat $(srcdir)/config/fp-bit.c >> tp-bit.c
-       echo '#endif' >> tp-bit.c
+$(gcc_objdir)/tp-bit.c: $(gcc_srcdir)/config/fp-bit.c
+       echo '#ifdef __MIPSEL__'                 > $@
+       echo '# define FLOAT_BIT_ORDER_MISMATCH' >> $@
+       echo '#endif'                           >> $@
+       echo '#define QUIET_NAN_NEGATED'        >> $@
+       echo '#if __LDBL_MANT_DIG__ == 106'     >> $@
+       echo '# define TFLOAT'                  >> $@
+       cat $<                                  >> $@
+       echo '#endif'                           >> $@
diff --git a/libgcc/config/mips/t-slibgcc-irix 
b/libgcc/config/mips/t-slibgcc-irix
new file mode 100644
--- /dev/null
+++ b/libgcc/config/mips/t-slibgcc-irix
@@ -0,0 +1,7 @@
+# Build a shared libgcc library with the SGI linker.
+
+SHLIB_LDFLAGS = -Wl,-soname,$(SHLIB_SONAME) \
+       -Wl,-exports_file,$(SHLIB_MAP)
+
+SHLIB_MKMAP = $(gcc_srcdir)/mkmap-flat.awk
+SHLIB_MAPFILES = libgcc-std.ver

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

Reply via email to