This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Use .reginfo rather than .MIPS.options in n32 linker scripts
- From: Richard Sandiford <richard at codesourcery dot com>
- To: binutils at sourceware dot org
- Date: Mon, 16 Oct 2006 20:27:40 +0100
- Subject: Use .reginfo rather than .MIPS.options in n32 linker scripts
At the moment, gas and ld disagree on whether .reginfo or .MIPS.options
is the canonical choice for n32. gas generates .reginfo, but the linker
script handles .MIPS.options. This means that .reginfo is usually
placed as an orphan for n32 binaries.
I think the reason for this is that both gas and ld originally
used .MIPS.options:
http://sourceware.org/ml/binutils/2001-09/msg00251.html
but gas was later changed to follow IRIX:
http://sourceware.org/ml/binutils/2002-05/msg00194.html
Because the orphan code does something sensible, it wouldn't have
been obvious that the linker scripts were then out of sync.
This patch introduces an elf64bmip-defs.sh script, mimicking
elf32bmipn32-defs.sh. The latter now uses .reginfo and the former uses
.MIPS.options. This needed some changes to the testsuite, such as to
avoid new warnings about moving "." backwards. (In the affected tests,
.reginfo would be placed as an orphan before the patch. After the patch,
.reginfo is placed at the script's usual start address, which is 0x10000000
for n32 executables. The tests used -Ttext arguments smaller than
0x10000000.)
Patch tested on mips{,64}{,el}-{elf,linux-gnu} and mips-sgi-irix6.5.
It fixes ld-elf/orphan2 failures on mips64{,el}-linux-gnu.
OK to install?
Richard
ld/
* Makefile.am (eelf64bmip.c): Depend on emulparams/elf64bmip-defs.sh.
(eelf64btsmip.c, eelf64ltsmip.c): Likewise.
* Makefile.in: Regenerate.
* emulparams/elf32bmipn32-defs.sh (INITIAL_READONLY_SECTIONS): Include
.reginfo rather than .MIPS.options.
* emulparams/elf64bmip-defs.sh: New file.
* emulparams/elf64bmip.sh: Include it.
(COMMONPAGESIZE): Delete.
* emulparams/elf64btsmip.sh: As for elf64bmip.sh.
ld/testsuite/
* ld-mips-elf/branch-misc-1.d: Set the start address to 0x20000000.
* ld-mips-elf/jalbal.d: Likewise 0x200000a0.
* ld-mips-elf/jaloverflow-2.d: Likewise 0x20000000.
* ld-mips-elf/reloc-3-n32.d: Likewise.
* ld-mips-elf/reloc-3.d: Likewise.
* ld-mips-elf/textrel-1.d: Don't require a specific file offset for
.dynamic.
Index: ld/Makefile.am
===================================================================
RCS file: /cvs/src/src/ld/Makefile.am,v
retrieving revision 1.222
diff -u -p -r1.222 Makefile.am
--- ld/Makefile.am 5 Oct 2006 01:06:13 -0000 1.222
+++ ld/Makefile.am 16 Oct 2006 19:26:03 -0000
@@ -912,6 +912,7 @@ eelf64_sparc_fbsd.c: $(srcdir)/emulparam
$(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64_sparc_fbsd "$(tdir_elf64_sparc_fbsd)"
eelf64bmip.c: $(srcdir)/emulparams/elf64bmip.sh \
+ $(srcdir)/emulparams/elf64bmip-defs.sh \
$(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
$(srcdir)/emultempl/irix.em $(srcdir)/emultempl/mipself.em \
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
@@ -926,11 +927,12 @@ emmo.c: $(srcdir)/emulparams/mmo.sh $(sr
$(srcdir)/scripttempl/mmo.sc ${GEN_DEPENDS}
${GENSCRIPTS} mmo "$(tdir_mmo)"
eelf64btsmip.c: $(srcdir)/emulparams/elf64btsmip.sh \
+ $(srcdir)/emulparams/elf64bmip-defs.sh \
$(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
$(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64btsmip "$(tdir_elf64btsmip)"
eelf64ltsmip.c: $(srcdir)/emulparams/elf64ltsmip.sh \
- $(srcdir)/emulparams/elf64btsmip.sh \
+ $(srcdir)/emulparams/elf64btsmip.sh $(srcdir)/emulparams/elf64bmip-defs.sh \
$(srcdir)/emulparams/elf32bmipn32-defs.sh $(ELF_DEPS) \
$(srcdir)/emultempl/mipself.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64ltsmip "$(tdir_elf64ltsmip)"
Index: ld/emulparams/elf32bmipn32-defs.sh
===================================================================
RCS file: /cvs/src/src/ld/emulparams/elf32bmipn32-defs.sh,v
retrieving revision 1.10
diff -u -p -r1.10 elf32bmipn32-defs.sh
--- ld/emulparams/elf32bmipn32-defs.sh 29 Jul 2006 08:48:15 -0000 1.10
+++ ld/emulparams/elf32bmipn32-defs.sh 16 Oct 2006 19:26:03 -0000
@@ -57,7 +57,7 @@ TEXT_START_SYMBOLS='_ftext = . ;'
DATA_START_SYMBOLS='_fdata = . ;'
OTHER_BSS_SYMBOLS='_fbss = .;'
-INITIAL_READONLY_SECTIONS=".MIPS.options : { *(.MIPS.options) }"
+INITIAL_READONLY_SECTIONS=".reginfo ${RELOCATING-0} : { *(.reginfo) }"
# Discard any .MIPS.content* or .MIPS.events* sections. The linker
# doesn't know how to adjust them.
OTHER_SECTIONS="/DISCARD/ : { *(.MIPS.content*) *(.MIPS.events*) }"
Index: ld/emulparams/elf64bmip-defs.sh
===================================================================
RCS file: ld/emulparams/elf64bmip-defs.sh
diff -N ld/emulparams/elf64bmip-defs.sh
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ld/emulparams/elf64bmip-defs.sh 16 Oct 2006 19:26:03 -0000
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/elf32bmipn32-defs.sh
+COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
+INITIAL_READONLY_SECTIONS=".MIPS.options : { *(.MIPS.options) }"
Index: ld/emulparams/elf64bmip.sh
===================================================================
RCS file: /cvs/src/src/ld/emulparams/elf64bmip.sh,v
retrieving revision 1.10
diff -u -p -r1.10 elf64bmip.sh
--- ld/emulparams/elf64bmip.sh 12 Jun 2006 11:35:44 -0000 1.10
+++ ld/emulparams/elf64bmip.sh 16 Oct 2006 19:26:03 -0000
@@ -1,9 +1,8 @@
-. ${srcdir}/emulparams/elf32bmipn32-defs.sh
+. ${srcdir}/emulparams/elf64bmip-defs.sh
OUTPUT_FORMAT="elf64-bigmips"
BIG_OUTPUT_FORMAT="elf64-bigmips"
LITTLE_OUTPUT_FORMAT="elf64-littlemips"
SHLIB_TEXT_START_ADDR=0x3ffffe0000
-COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
# IRIX6 defines these symbols. 0x40 is the size of the ELF header.
EXECUTABLE_SYMBOLS="
Index: ld/emulparams/elf64btsmip.sh
===================================================================
RCS file: /cvs/src/src/ld/emulparams/elf64btsmip.sh,v
retrieving revision 1.12
diff -u -p -r1.12 elf64btsmip.sh
--- ld/emulparams/elf64btsmip.sh 12 Jun 2006 11:35:44 -0000 1.12
+++ ld/emulparams/elf64btsmip.sh 16 Oct 2006 19:26:03 -0000
@@ -1,11 +1,10 @@
# If you change this file, please also look at files which source this one:
# elf64ltsmip.sh
-. ${srcdir}/emulparams/elf32bmipn32-defs.sh
+. ${srcdir}/emulparams/elf64bmip-defs.sh
OUTPUT_FORMAT="elf64-tradbigmips"
BIG_OUTPUT_FORMAT="elf64-tradbigmips"
LITTLE_OUTPUT_FORMAT="elf64-tradlittlemips"
-COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
# Magic sections.
OTHER_TEXT_SECTIONS='*(.mips16.fn.*) *(.mips16.call.*)'
Index: ld/testsuite/ld-mips-elf/branch-misc-1.d
===================================================================
RCS file: /cvs/src/src/ld/testsuite/ld-mips-elf/branch-misc-1.d,v
retrieving revision 1.2
diff -u -p -r1.2 branch-misc-1.d
--- ld/testsuite/ld-mips-elf/branch-misc-1.d 3 Oct 2002 23:56:24 -0000 1.2
+++ ld/testsuite/ld-mips-elf/branch-misc-1.d 16 Oct 2006 19:26:03 -0000
@@ -1,7 +1,7 @@
#name: MIPS branch-misc-1
#source: ../../../gas/testsuite/gas/mips/branch-misc-1.s
#objdump: --prefix-addresses -tdr --show-raw-insn
-#ld: -Ttext 0x500000 -e 0x500000 -N
+#ld: -Ttext 0x20000000 -e 0x20000000 -N
.*: file format elf.*mips.*
@@ -11,18 +11,18 @@ Disassembly of section \.text:
\.\.\.
\.\.\.
\.\.\.
-0+50003c <[^>]*> 0411fff0 bal 0+500000 <[^>]*>
-0+500040 <[^>]*> 00000000 nop
-0+500044 <[^>]*> 0411fff3 bal 0+500014 <[^>]*>
-0+500048 <[^>]*> 00000000 nop
-0+50004c <[^>]*> 0411fff6 bal 0+500028 <[^>]*>
-0+500050 <[^>]*> 00000000 nop
-0+500054 <[^>]*> 0411000a bal 0+500080 <[^>]*>
-0+500058 <[^>]*> 00000000 nop
-0+50005c <[^>]*> 0411000d bal 0+500094 <[^>]*>
-0+500060 <[^>]*> 00000000 nop
-0+500064 <[^>]*> 04110010 bal 0+5000a8 <[^>]*>
-0+500068 <[^>]*> 00000000 nop
+0*2000003c <[^>]*> 0411fff0 bal 0*20000000 <[^>]*>
+0*20000040 <[^>]*> 00000000 nop
+0*20000044 <[^>]*> 0411fff3 bal 0*20000014 <[^>]*>
+0*20000048 <[^>]*> 00000000 nop
+0*2000004c <[^>]*> 0411fff6 bal 0*20000028 <[^>]*>
+0*20000050 <[^>]*> 00000000 nop
+0*20000054 <[^>]*> 0411000a bal 0*20000080 <[^>]*>
+0*20000058 <[^>]*> 00000000 nop
+0*2000005c <[^>]*> 0411000d bal 0*20000094 <[^>]*>
+0*20000060 <[^>]*> 00000000 nop
+0*20000064 <[^>]*> 04110010 bal 0*200000a8 <[^>]*>
+0*20000068 <[^>]*> 00000000 nop
\.\.\.
\.\.\.
\.\.\.
Index: ld/testsuite/ld-mips-elf/jalbal.d
===================================================================
RCS file: /cvs/src/src/ld/testsuite/ld-mips-elf/jalbal.d,v
retrieving revision 1.2
diff -u -p -r1.2 jalbal.d
--- ld/testsuite/ld-mips-elf/jalbal.d 31 Jan 2005 22:00:59 -0000 1.2
+++ ld/testsuite/ld-mips-elf/jalbal.d 16 Oct 2006 19:26:03 -0000
@@ -1,7 +1,7 @@
#name: jal to bal
#source: jalbal.s
#as: -EB -n32 -march=rm9000
-#ld: -EB -e s1 -Ttext 0x100000a0
+#ld: -EB -e s1 -Ttext 0x200000a0
#objdump: -d
.*file format elf.*mips.*
@@ -9,16 +9,16 @@
Disassembly of section \.text:
.* <s1>:
-.* 0c00802a jal .*100200a8 <s3>
+.* 0c00802a jal .*200200a8 <s3>
.* 00000000 nop
-.* 04117fff bal .*100200a8 <s3>
+.* 04117fff bal .*200200a8 <s3>
.* <s2>:
.* \.\.\.
.* <s3>:
-.* 04118000 bal .*100000ac <s2>
+.* 04118000 bal .*200000ac <s2>
.* 00000000 nop
-.* 0c00002b jal .*100000ac <s2>
+.* 0c00002b jal .*200000ac <s2>
.* 00000000 nop
.* \.\.\.
Index: ld/testsuite/ld-mips-elf/jaloverflow-2.d
===================================================================
RCS file: /cvs/src/src/ld/testsuite/ld-mips-elf/jaloverflow-2.d,v
retrieving revision 1.1
diff -u -p -r1.1 jaloverflow-2.d
--- ld/testsuite/ld-mips-elf/jaloverflow-2.d 14 Dec 2004 09:48:20 -0000 1.1
+++ ld/testsuite/ld-mips-elf/jaloverflow-2.d 16 Oct 2006 19:26:03 -0000
@@ -1,8 +1,8 @@
#name: JAL overflow 2
#source: jaloverflow-2.s
#as:
-#ld: -Ttext=0x10000000 -e start
+#ld: -Ttext=0x20000000 -e start
#objdump: -dr
#...
-0*10000000: 0c000000.*
+0*20000000: 0c000000.*
#pass
Index: ld/testsuite/ld-mips-elf/reloc-3-n32.d
===================================================================
RCS file: /cvs/src/src/ld/testsuite/ld-mips-elf/reloc-3-n32.d,v
retrieving revision 1.1
diff -u -p -r1.1 reloc-3-n32.d
--- ld/testsuite/ld-mips-elf/reloc-3-n32.d 18 Sep 2006 18:21:42 -0000 1.1
+++ ld/testsuite/ld-mips-elf/reloc-3-n32.d 16 Oct 2006 19:26:03 -0000
@@ -2,7 +2,7 @@
#source: ../../../gas/testsuite/gas/mips/elf-rel6.s
#as: -march=mips64 -mabi=n32 -EB
#objdump: --prefix-addresses -tdr --show-raw-insn
-#ld: -Ttext 0x500000 -e 0x500000 -N -melf32btsmipn32
+#ld: -Ttext 0x20000000 -e 0x20000000 -N -melf32btsmipn32
.*: file format elf.*mips.*
@@ -10,9 +10,9 @@
#...
Disassembly of section \.text:
-0+500000 <[^>]*> f010 8352 lb v0,-32750\(v1\)
-0+500004 <[^>]*> f010 8353 lb v0,-32749\(v1\)
-0+500008 <[^>]*> f252 8346 lb v0,-28090\(v1\)
-0+50000c <[^>]*> 6500 nop
-0+50000e <[^>]*> 6500 nop
+0*20000000 <[^>]*> f010 8352 lb v0,-32750\(v1\)
+0*20000004 <[^>]*> f010 8353 lb v0,-32749\(v1\)
+0*20000008 <[^>]*> f252 8346 lb v0,-28090\(v1\)
+0*2000000c <[^>]*> 6500 nop
+0*2000000e <[^>]*> 6500 nop
#pass
Index: ld/testsuite/ld-mips-elf/reloc-3.d
===================================================================
RCS file: /cvs/src/src/ld/testsuite/ld-mips-elf/reloc-3.d,v
retrieving revision 1.1
diff -u -p -r1.1 reloc-3.d
--- ld/testsuite/ld-mips-elf/reloc-3.d 18 Sep 2006 18:21:42 -0000 1.1
+++ ld/testsuite/ld-mips-elf/reloc-3.d 16 Oct 2006 19:26:03 -0000
@@ -1,16 +1,16 @@
#name: R_MIPS16_GPREL reloc
#source: ../../../gas/testsuite/gas/mips/elf-rel6.s
#objdump: --prefix-addresses -tdr --show-raw-insn
-#ld: -Ttext 0x500000 -e 0x500000 -N
+#ld: -Ttext 0x20000000 -e 0x20000000 -N
.*: file format elf.*mips.*
#...
Disassembly of section \.text:
-0+500000 <[^>]*> f010 8352 lb v0,-32750\(v1\)
-0+500004 <[^>]*> f010 8353 lb v0,-32749\(v1\)
-0+500008 <[^>]*> f252 8346 lb v0,-28090\(v1\)
-0+50000c <[^>]*> 6500 nop
-0+50000e <[^>]*> 6500 nop
+0*20000000 <[^>]*> f010 8352 lb v0,-32750\(v1\)
+0*20000004 <[^>]*> f010 8353 lb v0,-32749\(v1\)
+0*20000008 <[^>]*> f252 8346 lb v0,-28090\(v1\)
+0*2000000c <[^>]*> 6500 nop
+0*2000000e <[^>]*> 6500 nop
#pass
Index: ld/testsuite/ld-mips-elf/textrel-1.d
===================================================================
RCS file: /cvs/src/src/ld/testsuite/ld-mips-elf/textrel-1.d,v
retrieving revision 1.2
diff -u -p -r1.2 textrel-1.d
--- ld/testsuite/ld-mips-elf/textrel-1.d 22 May 2006 15:06:23 -0000 1.2
+++ ld/testsuite/ld-mips-elf/textrel-1.d 16 Oct 2006 19:26:03 -0000
@@ -4,7 +4,7 @@
#ld: -shared -melf32btsmipn32
#readelf: -d
-Dynamic section at offset 0xb4 contains 18 entries:
+Dynamic section at offset .* contains 18 entries:
Tag Type Name/Value
0x00000004 \(HASH\) 0x[0-9a-f]*
0x00000005 \(STRTAB\) 0x[0-9a-f]*