This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[Patch] MIPS Linux symbol sorting (resubmittal)



This is a resubmit of the MIPS symbol sorting patch cleaned up with
a Changelog entry per instructions. Thanks.

-Steve

diff -urN binutils-04042001/ChangeLog binutils-04042001-patched/ChangeLog
--- binutils-04042001/ChangeLog	Mon Apr  2 01:16:58 2001
+++ binutils-04042001-patched/ChangeLog	Thu Apr  5 16:42:06 2001
@@ -1,3 +1,19 @@
+2001-04-05  Steven J. Hill  <sjhill@cotw.com>
+
+	* bfd/config.bfd: different BFD target vectors for MIPS/Linux
+	* bfd/configure: regenerated
+	* bfd/elf32-mips.c: fixed symbol sorting for MIPS/Linux targets
+	* bfd/elf64-mips.c: changed target for 64-bit MIPS/Linux targets 
+	* bfd/targets.c: added new 64-bit MIPS/Linux targets
+	* gas/Makefile.in: regenerated
+	* gas/config/tc-mips.c: traditional MIPS targets used for MIPS/Linux 
+	* gas/configure.in: regenerated
+	* ld/Makefile.in: regenerated
+	* ld/configure.tgt: MIPS/Linux target uses traditional MIPS
+	* ld/emulparams/elf32ltsmip.sh: new target emulation script
+	* ld/emulparams/elf64btsmip.sh: new target emulation script
+	* ld/emulparams/elf64ltsmip.sh: new target emulation script
+
 2001-04-01  Alexandre Oliva  <aoliva@redhat.com>
 
 	* Makefile.in (CXX_FOR_TARGET_FOR_RECURSIVE_MAKE, RECURSE_FLAGS):
diff -urN binutils-04042001/bfd/config.bfd binutils-04042001-patched/bfd/config.bfd
--- binutils-04042001/bfd/config.bfd	Thu Mar 29 21:41:39 2001
+++ binutils-04042001-patched/bfd/config.bfd	Thu Apr  5 07:31:54 2001
@@ -663,15 +663,22 @@
     targ_defvec=bfd_elf32_bigmips_vec
     targ_selvecs="bfd_elf32_littlemips_vec bfd_elf64_bigmips_vec bfd_elf64_littlemips_vec"
     ;;
-  mips*el*-*-linux-gnu* | mips*el*-*-openbsd*)
+  mips*el*-*-openbsd*)
     targ_defvec=bfd_elf32_littlemips_vec
     targ_selvecs="bfd_elf32_bigmips_vec bfd_elf64_bigmips_vec bfd_elf64_littlemips_vec ecoff_little_vec ecoff_big_vec"
     ;;
-  mips*-*-linux-gnu* | mips*-*-openbsd*)
+  mips*el*-*-linux-gnu*)
+    targ_defvec=bfd_elf32_tradlittlemips_vec
+    targ_selvecs="bfd_elf32_tradbigmips_vec bfd_elf64_tradlittlemips_vec bfd_elf64_tradbigmips_vec ecoff_little_vec ecoff_big_vec"
+    ;;
+  mips*-*-openbsd*)
     targ_defvec=bfd_elf32_bigmips_vec
     targ_selvecs="bfd_elf32_littlemips_vec bfd_elf64_bigmips_vec bfd_elf64_littlemips_vec ecoff_big_vec ecoff_little_vec"
     ;;
-
+  mips*-*-linux-gnu*)
+    targ_defvec=bfd_elf32_tradbigmips_vec
+    targ_selvecs="bfd_elf32_tradlittlemips_vec bfd_elf64_tradbigmips_vec bfd_elf64_tradlittlemips_vec ecoff_big_vec ecoff_little_vec"
+    ;;
   mn10200-*-*)
     targ_defvec=bfd_elf32_mn10200_vec
     ;;
diff -urN binutils-04042001/bfd/configure.in binutils-04042001-patched/bfd/configure.in
--- binutils-04042001/bfd/configure.in	Sat Mar 24 01:17:01 2001
+++ binutils-04042001-patched/bfd/configure.in	Thu Apr  5 07:31:54 2001
@@ -561,6 +561,10 @@
 				target64=true ;;
     bfd_elf64_sparc_vec)	tb="$tb elf64-sparc.lo elf64.lo $elf"
 				target64=true ;;
+    bfd_elf64_tradbigmips_vec)	tb="$tb elf64-mips.lo elf64.lo $elf ecofflink.lo"
+				target64=true ;;
+    bfd_elf64_tradlittlemips_vec) tb="$tb elf64-mips.lo elf64.lo $elf ecofflink.lo"
+				target64=true ;;
     cisco_core_big_vec)		tb="$tb cisco-core.lo" ;;
     cisco_core_little_vec)	tb="$tb cisco-core.lo" ;;
     cris_aout_vec)		tb="$tb aout-cris.lo" ;;
diff -urN binutils-04042001/bfd/elf32-mips.c binutils-04042001-patched/bfd/elf32-mips.c
--- binutils-04042001/bfd/elf32-mips.c	Thu Mar 29 21:41:42 2001
+++ binutils-04042001-patched/bfd/elf32-mips.c	Thu Apr  5 07:31:54 2001
@@ -208,6 +208,9 @@
   PARAMS ((const void *, const void *));
 
 extern const bfd_target bfd_elf32_tradbigmips_vec;
+extern const bfd_target bfd_elf32_tradlittlemips_vec;
+extern const bfd_target bfd_elf64_tradbigmips_vec;
+extern const bfd_target bfd_elf64_tradlittlemips_vec;
 
 /* The level of IRIX compatibility we're striving for.  */
 
@@ -225,8 +228,7 @@
 #define ABI_N32_P(abfd) \
   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
 
-/* Nonzero if ABFD is using the 64-bit ABI.  FIXME: This is never
-   true, yet.  */
+/* Nonzero if ABFD is using the 64-bit ABI. */
 #define ABI_64_P(abfd) \
   ((elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64) != 0)
 
@@ -234,7 +236,10 @@
    executables or "normal" MIPS ELF ABI executables.  */
 
 #define IRIX_COMPAT(abfd) \
-  (abfd->xvec == &bfd_elf32_tradbigmips_vec ? ict_none : \
+  (((abfd->xvec == &bfd_elf64_tradbigmips_vec) || \
+    (abfd->xvec == &bfd_elf64_tradlittlemips_vec) || \
+    (abfd->xvec == &bfd_elf32_tradbigmips_vec) || \
+    (abfd->xvec == &bfd_elf32_tradlittlemips_vec)) ? ict_none : \
   ((ABI_N32_P (abfd) || ABI_64_P (abfd)) ? ict_irix6 : ict_irix5))
 
 /* Whether we are trying to be compatible with IRIX at all.  */
@@ -2301,7 +2306,12 @@
      bfd *abfd ATTRIBUTE_UNUSED;
      asymbol *sym;
 {
-  return (sym->flags & BSF_SECTION_SYM) == 0 ? true : false;
+  if (SGI_COMPAT(abfd))
+    return (sym->flags & BSF_SECTION_SYM) == 0 ? true : false;
+  else
+    return ((sym->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
+            || bfd_is_und_section (bfd_get_section (sym))
+            || bfd_is_com_section (bfd_get_section (sym)));
 }
 
 /* Set the right machine number for a MIPS ELF file.  This is used for
diff -urN binutils-04042001/bfd/elf64-mips.c binutils-04042001-patched/bfd/elf64-mips.c
--- binutils-04042001/bfd/elf64-mips.c	Thu Mar  8 15:04:00 2001
+++ binutils-04042001-patched/bfd/elf64-mips.c	Thu Apr  5 07:31:54 2001
@@ -2189,3 +2189,20 @@
 				_bfd_archive_coff_update_armap_timestamp
 
 #include "elf64-target.h"
+
+/* Support for traditional mips targets */
+
+#define INCLUDED_TARGET_FILE            /* More a type of flag */
+
+#undef TARGET_LITTLE_SYM
+#undef TARGET_LITTLE_NAME
+#undef TARGET_BIG_SYM
+#undef TARGET_BIG_NAME
+
+#define TARGET_LITTLE_SYM               bfd_elf64_tradlittlemips_vec
+#define TARGET_LITTLE_NAME              "elf64-tradlittlemips"
+#define TARGET_BIG_SYM                  bfd_elf64_tradbigmips_vec
+#define TARGET_BIG_NAME                 "elf64-tradbigmips"
+
+/* Include the target file again for this target */
+#include "elf64-target.h"
diff -urN binutils-04042001/bfd/targets.c binutils-04042001-patched/bfd/targets.c
--- binutils-04042001/bfd/targets.c	Thu Mar  8 15:04:02 2001
+++ binutils-04042001-patched/bfd/targets.c	Thu Apr  5 07:31:54 2001
@@ -564,6 +564,8 @@
 extern const bfd_target bfd_elf64_ia64_little_vec;
 extern const bfd_target bfd_elf64_little_generic_vec;
 extern const bfd_target bfd_elf64_littlemips_vec;
+extern const bfd_target bfd_elf64_tradbigmips_vec;
+extern const bfd_target bfd_elf64_tradlittlemips_vec;
 extern const bfd_target bfd_elf64_s390_vec;
 extern const bfd_target bfd_elf64_sparc_vec;
 extern const bfd_target bfd_elf64_x86_64_vec;
@@ -781,7 +783,10 @@
 	&bfd_elf32_mcore_little_vec,
 	&bfd_elf32_tradbigmips_vec,
 	&bfd_elf32_tradlittlemips_vec,
-#ifdef BFD64			/* No one seems to use this.  */
+#ifdef BFD64
+	&bfd_elf64_tradbigmips_vec,
+	&bfd_elf64_tradlittlemips_vec,
+	/* No one seems to use this.  */
 	&bfd_elf64_big_generic_vec,
 	&bfd_elf64_little_generic_vec,
 #endif
diff -urN binutils-04042001/gas/Makefile.am binutils-04042001-patched/gas/Makefile.am
--- binutils-04042001/gas/Makefile.am	Tue Feb 27 00:43:53 2001
+++ binutils-04042001-patched/gas/Makefile.am	Thu Apr  5 07:31:54 2001
@@ -361,7 +361,8 @@
 	config/te-sparcaout.h \
 	config/te-sun3.h \
 	config/te-svr4.h \
-	config/te-sysv32.h
+	config/te-sysv32.h \
+	config/te-tmips.h
 
 # Multi files in config
 
diff -urN binutils-04042001/gas/config/tc-mips.c binutils-04042001-patched/gas/config/tc-mips.c
--- binutils-04042001/gas/config/tc-mips.c	Fri Mar 30 01:17:04 2001
+++ binutils-04042001-patched/gas/config/tc-mips.c	Thu Apr  5 07:31:54 2001
@@ -126,7 +126,8 @@
 #ifdef TE_TMIPS
       /* This is traditional mips */
       return (target_big_endian
-	      ? "elf32-tradbigmips" : "elf32-tradlittlemips");
+	      ? (mips_64 ? "elf64-tradbigmips" : "elf32-tradbigmips")
+	      : (mips_64 ? "elf64-tradlittlemips" : "elf32-tradlittlemips"));
 #else
       return (target_big_endian
 	      ? (mips_64 ? "elf64-bigmips" : "elf32-bigmips")
diff -urN binutils-04042001/gas/configure.in binutils-04042001-patched/gas/configure.in
--- binutils-04042001/gas/configure.in	Tue Mar 27 01:16:53 2001
+++ binutils-04042001-patched/gas/configure.in	Thu Apr  5 07:31:55 2001
@@ -344,9 +344,10 @@
       mips-*-irix*)         fmt=ecoff ;;
       mips-*-lnews*)        fmt=ecoff em=lnews ;;
       mips-*-riscos*)       fmt=ecoff ;;
-      mips-*-sysv4*MP*)     fmt=elf em=tmips ;;
+      mips-*-sysv4*MP* | mips-*-linux-gnu* | mips-*-gnu*)
+			    fmt=elf em=tmips ;;
       mips-*-sysv*)         fmt=ecoff ;;
-      mips-*-elf* | mips-*-rtems* | mips-*-linux-gnu* | mips-*-gnu* | mips-*-openbsd*)
+      mips-*-elf* | mips-*-rtems* | mips-*-openbsd*)
 			    fmt=elf ;;
       mips-*-vxworks*)      fmt=elf
 			    AC_DEFINE(MIPS_STABS_ELF, 1,
diff -urN binutils-04042001/ld/Makefile.am binutils-04042001-patched/ld/Makefile.am
--- binutils-04042001/ld/Makefile.am	Mon Mar 26 01:16:53 2001
+++ binutils-04042001-patched/ld/Makefile.am	Thu Apr  5 07:31:55 2001
@@ -145,6 +145,7 @@
 	eelf32bmip.o \
 	eelf32bmipn32.o \
 	eelf32btsmip.o \
+	eelf32ltsmip.o \
 	eelf32ebmip.o \
 	eelf32elmip.o \
 	eelf32fr30.o \
@@ -256,6 +257,8 @@
 	eelf64_sparc.o \
 	eelf64alpha.o \
 	eelf64bmip.o \
+	eelf64btsmip.o \
+	eelf64ltsmip.o \
 	eelf64hppa.o
 
 ALL_EMUL_EXTRA_OFILES = \
@@ -452,6 +455,9 @@
 eelf32btsmip.c: $(srcdir)/emulparams/elf32btsmip.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} elf32btsmip "$(tdir_elf32btsmip)"
+eelf32ltsmip.c: $(srcdir)/emulparams/elf32ltsmip.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} elf32ltsmip "$(tdir_elf32ltsmip)"
 eelf32ebmip.c: $(srcdir)/emulparams/elf32ebmip.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} elf32ebmip "$(tdir_elf32ebmip)"
@@ -509,6 +515,12 @@
 eelf64bmip.c: $(srcdir)/emulparams/elf64bmip.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} elf64bmip "$(tdir_elf64bmip)"
+eelf64btsmip.c: $(srcdir)/emulparams/elf64btsmip.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} elf64btsmip "$(tdir_elf64btsmip)"
+eelf64ltsmip.c: $(srcdir)/emulparams/elf64ltsmip.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} elf64ltsmip "$(tdir_elf64ltsmip)"
 eelf_i386.c: $(srcdir)/emulparams/elf_i386.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} elf_i386 "$(tdir_elf_i386)"
diff -urN binutils-04042001/ld/configure.tgt binutils-04042001-patched/ld/configure.tgt
--- binutils-04042001/ld/configure.tgt	Tue Mar 27 01:16:54 2001
+++ binutils-04042001-patched/ld/configure.tgt	Thu Apr  5 07:31:55 2001
@@ -276,11 +276,11 @@
 mips*-*-rtems*)		targ_emul=elf32ebmip ;;
 mips*el-*-vxworks*)	targ_emul=elf32elmip ;;
 mips*-*-vxworks*)	targ_emul=elf32ebmip ;;
-mips*el-*-linux-gnu*)	targ_emul=elf32lsmip
-			targ_extra_emuls="elf32bsmip mipslit mipsbig"
+mips*el-*-linux-gnu*)	targ_emul=elf32ltsmip
+			targ_extra_emuls="elf32btsmip elf64ltsmip elf64btsmip"
 			;;
-mips*-*-linux-gnu*)	targ_emul=elf32bsmip
-			targ_extra_emuls="elf32lsmip mipsbig mipslit"
+mips*-*-linux-gnu*)	targ_emul=elf32btsmip
+			targ_extra_emuls="elf32ltsmip elf64btsmip elf64ltsmip"
 			;;
 mips*-*-lnews*)		targ_emul=mipslnews ;;
 mips*-*-sysv4*)         targ_emul=elf32btsmip ;;
diff -urN binutils-04042001/ld/emulparams/elf32ltsmip.sh binutils-04042001-patched/ld/emulparams/elf32ltsmip.sh
--- binutils-04042001/ld/emulparams/elf32ltsmip.sh	Wed Dec 31 18:00:00 1969
+++ binutils-04042001-patched/ld/emulparams/elf32ltsmip.sh	Thu Apr  5 07:31:55 2001
@@ -0,0 +1,31 @@
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-tradlittlemips"
+BIG_OUTPUT_FORMAT="elf32-tradbigmips"
+LITTLE_OUTPUT_FORMAT="elf32-tradlittlemips"
+TEXT_START_ADDR=0x0400000
+DATA_ADDR=0x10000000
+MAXPAGESIZE=0x40000
+NONPAGED_TEXT_START_ADDR=0x0400000
+SHLIB_TEXT_START_ADDR=0x0
+TEXT_DYNAMIC=
+INITIAL_READONLY_SECTIONS='.reginfo : { *(.reginfo) }'
+OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)'
+OTHER_GOT_SYMBOLS='
+  _gp = ALIGN(16) + 0x7ff0;
+'
+OTHER_GOT_SECTIONS='
+  .lit8 : { *(.lit8) }
+  .lit4 : { *(.lit4) }
+'
+TEXT_START_SYMBOLS='_ftext = . ;'
+DATA_START_SYMBOLS='_fdata = . ;'
+OTHER_BSS_SYMBOLS='_fbss = .;'
+OTHER_SECTIONS='
+  .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
+  .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
+'
+ARCH=mips
+MACHINE=
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+ENTRY=__start
diff -urN binutils-04042001/ld/emulparams/elf64btsmip.sh binutils-04042001-patched/ld/emulparams/elf64btsmip.sh
--- binutils-04042001/ld/emulparams/elf64btsmip.sh	Wed Dec 31 18:00:00 1969
+++ binutils-04042001-patched/ld/emulparams/elf64btsmip.sh	Thu Apr  5 07:31:55 2001
@@ -0,0 +1,44 @@
+# This is an ELF platform.
+SCRIPT_NAME=elf
+
+# Handle both big- and little-ended 64-bit MIPS objects.
+ARCH=mips
+OUTPUT_FORMAT="elf64-tradbigmips"
+BIG_OUTPUT_FORMAT="elf64-tradbigmips"
+LITTLE_OUTPUT_FORMAT="elf64-tradlittlemips"
+
+# Note that the elf32 template is used for 64-bit emulations as well 
+# as 32-bit emulations.
+ELFSIZE=64
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+
+TEXT_START_ADDR=0x10000000
+DATA_ADDR=0x0400000000
+MAXPAGESIZE=0x100000
+NONPAGED_TEXT_START_ADDR=0x10000000
+SHLIB_TEXT_START_ADDR=0x0
+TEXT_DYNAMIC=
+ENTRY=__start
+
+# GOT-related settings.  
+OTHER_GOT_SYMBOLS='
+  _gp = ALIGN(16) + 0x7ff0;
+'
+OTHER_GOT_SECTIONS='
+  .lit8 : { *(.lit8) }
+  .lit4 : { *(.lit4) }
+'
+
+# Magic symbols.
+TEXT_START_SYMBOLS='_ftext = . ;'
+DATA_START_SYMBOLS='_fdata = . ;'
+OTHER_BSS_SYMBOLS='_fbss = .;'
+
+# Magic sections.
+INITIAL_READONLY_SECTIONS='.reginfo : { *(.reginfo) }'
+OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)'
+OTHER_SECTIONS='
+  .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
+  .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
+'
diff -urN binutils-04042001/ld/emulparams/elf64ltsmip.sh binutils-04042001-patched/ld/emulparams/elf64ltsmip.sh
--- binutils-04042001/ld/emulparams/elf64ltsmip.sh	Wed Dec 31 18:00:00 1969
+++ binutils-04042001-patched/ld/emulparams/elf64ltsmip.sh	Thu Apr  5 07:31:55 2001
@@ -0,0 +1,44 @@
+# This is an ELF platform.
+SCRIPT_NAME=elf
+
+# Handle both big- and little-ended 64-bit MIPS objects.
+ARCH=mips
+OUTPUT_FORMAT="elf64-tradlittlemips"
+BIG_OUTPUT_FORMAT="elf64-tradbigmips"
+LITTLE_OUTPUT_FORMAT="elf64-tradlittlemips"
+
+# Note that the elf32 template is used for 64-bit emulations as well 
+# as 32-bit emulations.
+ELFSIZE=64
+TEMPLATE_NAME=elf32
+GENERATE_SHLIB_SCRIPT=yes
+
+TEXT_START_ADDR=0x10000000
+DATA_ADDR=0x0400000000
+MAXPAGESIZE=0x100000
+NONPAGED_TEXT_START_ADDR=0x10000000
+SHLIB_TEXT_START_ADDR=0x0
+TEXT_DYNAMIC=
+ENTRY=__start
+
+# GOT-related settings.  
+OTHER_GOT_SYMBOLS='
+  _gp = ALIGN(16) + 0x7ff0;
+'
+OTHER_GOT_SECTIONS='
+  .lit8 : { *(.lit8) }
+  .lit4 : { *(.lit4) }
+'
+
+# Magic symbols.
+TEXT_START_SYMBOLS='_ftext = . ;'
+DATA_START_SYMBOLS='_fdata = . ;'
+OTHER_BSS_SYMBOLS='_fbss = .;'
+
+# Magic sections.
+INITIAL_READONLY_SECTIONS='.reginfo : { *(.reginfo) }'
+OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)'
+OTHER_SECTIONS='
+  .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) }
+  .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) }
+'


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]