[Patch] MIPS Linux symbol sorting (resubmittal)
H . J . Lu
hjl@lucon.org
Sat Apr 7 21:40:00 GMT 2001
On Thu, Apr 05, 2001 at 04:45:10PM -0500, Steven J. Hill wrote:
>
> This is a resubmit of the MIPS symbol sorting patch cleaned up with
> a Changelog entry per instructions. Thanks.
>
I cleaned up the ChangeLog entries for Steven's patch. It will go into
my Linux binutils. But I'd like to check it into sourceware first. If
there are no objections by next Monday, I will check it in.
BTW, Steven, could you please double check the next release of my
Linux binutils to make sure it is ok on Linux/MIPS? It will be
2.11.90.0.5. Also do you mind to fix it if your change breaks it on
Linux/MIPS?
Thanks.
H.J.
----
2001-04-05 Steven J. Hill <sjhill@cotw.com>
* config.bfd (mips*el*-*-linux-gnu*): Use traditional little
endian MIPS ELF target.
* config.bfd (mips*-*-linux-gnu*): Use traditional big endian
MIPS ELF target.
* configure.in (bfd_elf64_tradbigmips_vec): New. Traditional
64bit big endian MIPS ELF target.
(bfd_elf64_tradlittlemips_vec): New. Traditional 64bit little
endian MIPS ELF target.
* configure: Regenerated.
* elf32-mips.c (IRIX_COMPAT): Handle traditional 64bit and
little endian targets.
(mips_elf_sym_is_global): Handle traditional targets.
* elf64-mips.c (bfd_elf64_tradbigmips_vec): New. Traditional
64bit big endian MIPS ELF target.
(bfd_elf64_tradlittlemips_vec): New. Traditional 64bit little
endian MIPS ELF target.
* targets.c: (_bfd_target_vector): Add bfd_elf64_tradbigmips_vec
and bfd_elf64_tradlittlemips_vec.
Index: bfd/config.bfd
===================================================================
RCS file: /work/cvs/gnu/binutils/bfd/config.bfd,v
retrieving revision 1.38
diff -u -p -r1.38 config.bfd
--- bfd/config.bfd 2001/02/24 05:13:49 1.38
+++ bfd/config.bfd 2001/04/08 02:28:33
@@ -663,15 +663,22 @@ case "${targ}" in
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
;;
Index: bfd/configure.in
===================================================================
RCS file: /work/cvs/gnu/binutils/bfd/configure.in,v
retrieving revision 1.138
diff -u -p -r1.138 configure.in
--- bfd/configure.in 2001/03/31 06:52:44 1.138
+++ bfd/configure.in 2001/04/08 02:28:33
@@ -561,6 +561,10 @@ do
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" ;;
Index: bfd/elf32-mips.c
===================================================================
RCS file: /work/cvs/gnu/binutils/bfd/elf32-mips.c,v
retrieving revision 1.23
diff -u -p -r1.23 elf32-mips.c
--- bfd/elf32-mips.c 2001/03/23 22:37:30 1.23
+++ bfd/elf32-mips.c 2001/04/08 02:28:33
@@ -208,6 +208,9 @@ static int sort_dynamic_relocs
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 @@ static bfd *reldyn_sorting_bfd;
#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 @@ static bfd *reldyn_sorting_bfd;
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 @@ mips_elf_sym_is_global (abfd, sym)
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
Index: bfd/elf64-mips.c
===================================================================
RCS file: /work/cvs/gnu/binutils/bfd/elf64-mips.c,v
retrieving revision 1.1.1.7
diff -u -p -r1.1.1.7 elf64-mips.c
--- bfd/elf64-mips.c 2001/03/09 19:15:56 1.1.1.7
+++ bfd/elf64-mips.c 2001/04/08 02:28:33
@@ -2189,3 +2189,20 @@ const struct elf_size_info mips_elf64_si
_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"
Index: bfd/targets.c
===================================================================
RCS file: /work/cvs/gnu/binutils/bfd/targets.c,v
retrieving revision 1.35
diff -u -p -r1.35 targets.c
--- bfd/targets.c 2001/03/09 19:38:01 1.35
+++ bfd/targets.c 2001/04/08 02:28:33
@@ -564,6 +564,8 @@ extern const bfd_target bfd_elf64_ia64_b
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 @@ static const bfd_target * const _bfd_tar
&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
2001-04-05 Steven J. Hill <sjhill@cotw.com>
* config/tc-mips.c: Support ELF64 for traditional MIPS targets.
* Makefile.am: (TARG_ENV_HFILES): Add tc-mips.h.
* Makefile.in: Regenerated.
* configure.in: Use traditional MIPS targets for Linux/MIPS.
* configure: Regenerated.
Index: gas/Makefile.am
===================================================================
RCS file: /work/cvs/gnu/binutils/gas/Makefile.am,v
retrieving revision 1.23
diff -u -p -r1.23 Makefile.am
--- gas/Makefile.am 2001/02/27 18:48:47 1.23
+++ gas/Makefile.am 2001/04/08 02:28:33
@@ -361,7 +361,8 @@ TARG_ENV_HFILES = \
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
Index: gas/configure.in
===================================================================
RCS file: /work/cvs/gnu/binutils/gas/configure.in,v
retrieving revision 1.47
diff -u -p -r1.47 configure.in
--- gas/configure.in 2001/04/06 22:50:30 1.47
+++ gas/configure.in 2001/04/08 02:50:26
@@ -346,9 +346,10 @@ changequote([,])dnl
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,
Index: gas/config/tc-mips.c
===================================================================
RCS file: /work/cvs/gnu/binutils/gas/config/tc-mips.c,v
retrieving revision 1.33
diff -u -p -r1.33 tc-mips.c
--- gas/config/tc-mips.c 2001/03/30 07:37:35 1.33
+++ gas/config/tc-mips.c 2001/04/08 02:28:34
@@ -126,7 +126,8 @@ mips_target_format ()
#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")
2001-04-05 Steven J. Hill <sjhill@cotw.com>
* Makefile.am (ALL_EMULATIONS): Add eelf32ltsmip.o.
(ALL_64_EMULATIONS): Add eelf64btsmip.o and eelf64ltsmip.o.
(eelf32ltsmip.c): New target.
(eelf64btsmip.c): Likewise.
(eelf64ltsmip.c): Likewise.
* Makefile.in: Regenerated.
* configure.tgt (mips*el-*-linux-gnu): Uses traditional MIPS
target.
(mips*-*-linux-gnu*): Likewise.
* emulparams/elf32ltsmip.sh: New. Traditional little endian
MIPS taget.
* emulparams/elf64btsmip.sh: New. Traditional 64bit big endian
target.
* emulparams/elf64ltsmip.sh: New. Traditional 64bit little
endian target.
Index: ld/Makefile.am
===================================================================
RCS file: /work/cvs/gnu/binutils/ld/Makefile.am,v
retrieving revision 1.44
diff -u -p -r1.44 Makefile.am
--- ld/Makefile.am 2001/03/27 16:55:17 1.44
+++ ld/Makefile.am 2001/04/08 02:28:34
@@ -145,6 +145,7 @@ ALL_EMULATIONS = \
eelf32bmip.o \
eelf32bmipn32.o \
eelf32btsmip.o \
+ eelf32ltsmip.o \
eelf32ebmip.o \
eelf32elmip.o \
eelf32fr30.o \
@@ -256,6 +257,8 @@ ALL_64_EMULATIONS = \
eelf64_sparc.o \
eelf64alpha.o \
eelf64bmip.o \
+ eelf64btsmip.o \
+ eelf64ltsmip.o \
eelf64hppa.o
ALL_EMUL_EXTRA_OFILES = \
@@ -452,6 +455,9 @@ eelf32bsmip.c: $(srcdir)/emulparams/elf3
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 @@ eelf64_sparc.c: $(srcdir)/emulparams/elf
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)"
Index: ld/configure.tgt
===================================================================
RCS file: /work/cvs/gnu/binutils/ld/configure.tgt,v
retrieving revision 1.34
diff -u -p -r1.34 configure.tgt
--- ld/configure.tgt 2001/03/27 16:55:18 1.34
+++ ld/configure.tgt 2001/04/08 02:28:34
@@ -276,11 +276,11 @@ mips*el-*-rtems*) targ_emul=elf32elmip ;
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 ;;
--- /dev/null Thu Mar 1 15:53:02 2001
+++ ld/emulparams/elf32ltsmip.sh Sat Apr 7 19:28:34 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
--- /dev/null Thu Mar 1 15:53:02 2001
+++ ld/emulparams/elf64btsmip.sh Sat Apr 7 19:28:34 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) }
+'
--- /dev/null Thu Mar 1 15:53:02 2001
+++ ld/emulparams/elf64ltsmip.sh Sat Apr 7 19:28:34 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) }
+'
More information about the Binutils
mailing list