MIPS/LD: Include n64 `.interp' with INITIAL_READONLY_SECTIONS
authorYunQiang Su <yunqiang.su@cipunited.com>
Fri, 28 Jul 2023 05:00:36 +0000 (06:00 +0100)
committerMaciej W. Rozycki <macro@orcam.me.uk>
Fri, 28 Jul 2023 05:00:36 +0000 (06:00 +0100)
In ld/emulparams/elf64bmip-defs.sh there is no explicit handling of the
`.interp' section, which causes it to be positioned in output at an odd
place.

Let's include it with INITIAL_READONLY_SECTIONS, just like o32/n32 do,
fixing a regression from commit 5a8e7be242f3 ("INITIAL_READONLY_SECTIONS
in elf.sc"), where the handling of n64 was missed due to an unfortunate
sequence of events where ld/emulparams/elf64bmip-defs.sh was only added
with commit 94bb04b3c611 ("Use .reginfo rather than .MIPS.options in n32
linker scripts") the day before.

Add test cases covering section ordering across the three ABIs.  This
change also fixes ld/pr23658-2:

FAIL: Build pr23658-2

Co-Authored-By: Maciej W. Rozycki <macro@orcam.me.uk>
ld/ChangeLog:
* emulparams/elf64bmip-defs.sh: Include `.interp' with
INITIAL_READONLY_SECTIONS.
* testsuite/ld-mips-elf/pie-n64.d: Adjust addresses.
* testsuite/ld-mips-elf/sections-1-o32.rd: New test.
* testsuite/ld-mips-elf/sections-1-o32t.rd: New test.
* testsuite/ld-mips-elf/sections-1-n32.rd: New test.
* testsuite/ld-mips-elf/sections-1-n32t.rd: New test.
* testsuite/ld-mips-elf/sections-1-n32p.rd: New test.
* testsuite/ld-mips-elf/sections-1-n64.rd: New test.
* testsuite/ld-mips-elf/sections-1-n64t.rd: New test.
* testsuite/ld-mips-elf/sections-2-o32.rd: New test.
* testsuite/ld-mips-elf/sections-2-o32t.rd: New test.
* testsuite/ld-mips-elf/sections-2-n32.rd: New test.
* testsuite/ld-mips-elf/sections-2-n32t.rd: New test.
* testsuite/ld-mips-elf/sections-2-n32p.rd: New test.
* testsuite/ld-mips-elf/sections-2-n64.rd: New test.
* testsuite/ld-mips-elf/sections-2-n64t.rd: New test.
* testsuite/ld-mips-elf/sections.s: New test source.
* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.

18 files changed:
ld/emulparams/elf64bmip-defs.sh
ld/testsuite/ld-mips-elf/mips-elf.exp
ld/testsuite/ld-mips-elf/pie-n64.d
ld/testsuite/ld-mips-elf/sections-1-n32.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/sections-1-n32p.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/sections-1-n32t.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/sections-1-n64.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/sections-1-n64t.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/sections-1-o32.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/sections-1-o32t.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/sections-2-n32.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/sections-2-n32p.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/sections-2-n32t.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/sections-2-n64.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/sections-2-n64t.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/sections-2-o32.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/sections-2-o32t.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/sections.s [new file with mode: 0644]

index 4165f51e9e5db40af8e9342ebe82df2bdefc985d..19d782d8e7add9ba54218648077e24aa10596c31 100644 (file)
@@ -1,6 +1,10 @@
 source_sh ${srcdir}/emulparams/elf32bmipn32-defs.sh
 COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
-INITIAL_READONLY_SECTIONS="
+INITIAL_READONLY_SECTIONS=
+if test -z "${CREATE_SHLIB}"; then
+  INITIAL_READONLY_SECTIONS=".interp       ${RELOCATING-0} : { *(.interp) }"
+fi
+INITIAL_READONLY_SECTIONS="${INITIAL_READONLY_SECTIONS}
   .MIPS.abiflags      ${RELOCATING-0} : { *(.MIPS.abiflags) }
   .MIPS.xhash      ${RELOCATING-0} : { *(.MIPS.xhash) }
   .MIPS.options : { *(.MIPS.options) }
index 920bb121a6791d34b8d0a3a2d99794d9e898eeed..44f9dc95c4473722551e5e39a9f65ac3c42b843d 100644 (file)
@@ -1669,3 +1669,24 @@ run_dump_test_n64 "global-local-symtab-sort-n64${tmips}"
 run_dump_test_o32 "global-local-symtab-final-o32"
 run_dump_test_n32 "global-local-symtab-final-n32"
 run_dump_test_n64 "global-local-symtab-final-n64"
+
+# Section ordering tests.
+foreach { abi } $abis {
+    set ps2 [expr \
+       ({$abi} == {"n32"} && [istarget "mips64*el-ps2-elf*"]) ? {"p"} : {""}]
+    run_ld_link_tests [list \
+       [list \
+           "MIPS section ordering test 1 ($abi)" \
+           "$abi_ldflags($abi) -r" "" \
+           "$abi_asflags($abi) -mpdr" \
+           [list sections.s] \
+           [list "readelf -WS sections-1-${abi}${tmips}${ps2}.rd"] \
+           "sections-1-${abi}.o"] \
+       [list \
+           "MIPS section ordering test 2 ($abi)" \
+           "$abi_ldflags($abi) -e 0" "" \
+           "$abi_asflags($abi) -mpdr" \
+           [list sections.s] \
+           [list "readelf -WS sections-2-${abi}${tmips}${ps2}.rd"] \
+           "sections-2-${abi}"]]
+}
index bf7c6b2272a23bd2c7ebe2d15f69c68a9309fd41..1fda2512c8e20ba58846f5d23276d51baf7d0ecb 100644 (file)
@@ -2,16 +2,16 @@
 #ld: -pie
 #readelf: -d
 
-Dynamic section at offset 0x208 contains 17 entries:
+Dynamic section at offset 0x220 contains 17 entries:
   Tag * Type * Name/Value
- 0x0+00000004 \(HASH\) * 0x368
- 0x0+00000005 \(STRTAB\) * 0x3c8
- 0x0+00000006 \(SYMTAB\) * 0x380
+ 0x0+00000004 \(HASH\) * 0x380
+ 0x0+00000005 \(STRTAB\) * 0x3e0
+ 0x0+00000006 \(SYMTAB\) * 0x398
  0x0+0000000a \(STRSZ\) * 28 \(bytes\)
  0x0+0000000b \(SYMENT\) * 24 \(bytes\)
- 0x0+70000035 \(MIPS_RLD_MAP_REL\) * 0x101c8
+ 0x0+70000035 \(MIPS_RLD_MAP_REL\) * 0x101a0
  0x0+00000015 \(DEBUG\) * 0x0
- 0x0+00000003 \(PLTGOT\) * 0x10430
+ 0x0+00000003 \(PLTGOT\) * 0x10420
  0x0+70000001 \(MIPS_RLD_VERSION\) * 1
  0x0+70000005 \(MIPS_FLAGS\) * NOTPOT
  0x0+70000006 \(MIPS_BASE_ADDRESS\) * 0x0
diff --git a/ld/testsuite/ld-mips-elf/sections-1-n32.rd b/ld/testsuite/ld-mips-elf/sections-1-n32.rd
new file mode 100644 (file)
index 0000000..ee7043b
--- /dev/null
@@ -0,0 +1,36 @@
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+  \[Nr\] Name +Type .*
+  \[..\]  +NULL .*
+  \[..\] \.interp +PROGBITS .*
+  \[..\] \.MIPS\.abiflags +MIPS_ABIFLAGS .*
+  \[..\] \.MIPS\.xhash +MIPS_XHASH .*
+  \[..\] \.reginfo +MIPS_REGINFO .*
+  \[..\] \.text +PROGBITS .*
+  \[..\] \.data +PROGBITS .*
+  \[..\] \.rodata +PROGBITS .*
+  \[..\] \.got\.plt +PROGBITS .*
+  \[..\] \.got +PROGBITS .*
+  \[..\] \.sdata +PROGBITS .*
+  \[..\] \.lit8 +PROGBITS .*
+  \[..\] \.lit4 +PROGBITS .*
+  \[..\] \.sbss +NOBITS .*
+  \[..\] \.bss +NOBITS .*
+  \[..\] \.pdr +PROGBITS .*
+  \[..\] \.gcc_compiled_long32 +PROGBITS .*
+  \[..\] \.gcc_compiled_long64 +PROGBITS .*
+  \[..\] \.gptab\.sbss +MIPS_GPTAB .*
+  \[..\] \.gptab\.sdata +MIPS_GPTAB .*
+  \[..\] \.mdebug\.abi32 +PROGBITS .*
+  \[..\] \.mdebug\.abi64 +PROGBITS .*
+  \[..\] \.mdebug\.abiN32 +PROGBITS .*
+  \[..\] \.mdebug\.abiO64 +PROGBITS .*
+  \[..\] \.mdebug\.eabi32 +PROGBITS .*
+  \[..\] \.mdebug\.eabi64 +PROGBITS .*
+  \[..\] \.gnu\.attributes +GNU_ATTRIBUTES .*
+  \[..\] \.symtab +SYMTAB .*
+  \[..\] \.strtab +STRTAB .*
+  \[..\] \.shstrtab +STRTAB .*
+Key to Flags:
+#pass
diff --git a/ld/testsuite/ld-mips-elf/sections-1-n32p.rd b/ld/testsuite/ld-mips-elf/sections-1-n32p.rd
new file mode 100644 (file)
index 0000000..3e210ac
--- /dev/null
@@ -0,0 +1,36 @@
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+  \[Nr\] Name +Type .*
+  \[..\]  +NULL .*
+  \[..\] \.interp +PROGBITS .*
+  \[..\] \.MIPS\.abiflags +MIPS_ABIFLAGS .*
+  \[..\] \.MIPS\.xhash +MIPS_XHASH .*
+  \[..\] \.reginfo +MIPS_REGINFO .*
+  \[..\] \.text +PROGBITS .*
+  \[..\] \.rodata +PROGBITS .*
+  \[..\] \.data +PROGBITS .*
+  \[..\] \.got\.plt +PROGBITS .*
+  \[..\] \.got +PROGBITS .*
+  \[..\] \.sdata +PROGBITS .*
+  \[..\] \.lit8 +PROGBITS .*
+  \[..\] \.lit4 +PROGBITS .*
+  \[..\] \.sbss +NOBITS .*
+  \[..\] \.bss +NOBITS .*
+  \[..\] \.pdr +PROGBITS .*
+  \[..\] \.gcc_compiled_long32 +PROGBITS .*
+  \[..\] \.gcc_compiled_long64 +PROGBITS .*
+  \[..\] \.mdebug\.abi32 +PROGBITS .*
+  \[..\] \.mdebug\.abi64 +PROGBITS .*
+  \[..\] \.mdebug\.abiN32 +PROGBITS .*
+  \[..\] \.mdebug\.abiO64 +PROGBITS .*
+  \[..\] \.mdebug\.eabi32 +PROGBITS .*
+  \[..\] \.mdebug\.eabi64 +PROGBITS .*
+  \[..\] \.gnu\.attributes +GNU_ATTRIBUTES .*
+  \[..\] \.gptab\.sdata +MIPS_GPTAB .*
+  \[..\] \.gptab\.sbss +MIPS_GPTAB .*
+  \[..\] \.symtab +SYMTAB .*
+  \[..\] \.strtab +STRTAB .*
+  \[..\] \.shstrtab +STRTAB .*
+Key to Flags:
+#pass
diff --git a/ld/testsuite/ld-mips-elf/sections-1-n32t.rd b/ld/testsuite/ld-mips-elf/sections-1-n32t.rd
new file mode 100644 (file)
index 0000000..3e210ac
--- /dev/null
@@ -0,0 +1,36 @@
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+  \[Nr\] Name +Type .*
+  \[..\]  +NULL .*
+  \[..\] \.interp +PROGBITS .*
+  \[..\] \.MIPS\.abiflags +MIPS_ABIFLAGS .*
+  \[..\] \.MIPS\.xhash +MIPS_XHASH .*
+  \[..\] \.reginfo +MIPS_REGINFO .*
+  \[..\] \.text +PROGBITS .*
+  \[..\] \.rodata +PROGBITS .*
+  \[..\] \.data +PROGBITS .*
+  \[..\] \.got\.plt +PROGBITS .*
+  \[..\] \.got +PROGBITS .*
+  \[..\] \.sdata +PROGBITS .*
+  \[..\] \.lit8 +PROGBITS .*
+  \[..\] \.lit4 +PROGBITS .*
+  \[..\] \.sbss +NOBITS .*
+  \[..\] \.bss +NOBITS .*
+  \[..\] \.pdr +PROGBITS .*
+  \[..\] \.gcc_compiled_long32 +PROGBITS .*
+  \[..\] \.gcc_compiled_long64 +PROGBITS .*
+  \[..\] \.mdebug\.abi32 +PROGBITS .*
+  \[..\] \.mdebug\.abi64 +PROGBITS .*
+  \[..\] \.mdebug\.abiN32 +PROGBITS .*
+  \[..\] \.mdebug\.abiO64 +PROGBITS .*
+  \[..\] \.mdebug\.eabi32 +PROGBITS .*
+  \[..\] \.mdebug\.eabi64 +PROGBITS .*
+  \[..\] \.gnu\.attributes +GNU_ATTRIBUTES .*
+  \[..\] \.gptab\.sdata +MIPS_GPTAB .*
+  \[..\] \.gptab\.sbss +MIPS_GPTAB .*
+  \[..\] \.symtab +SYMTAB .*
+  \[..\] \.strtab +STRTAB .*
+  \[..\] \.shstrtab +STRTAB .*
+Key to Flags:
+#pass
diff --git a/ld/testsuite/ld-mips-elf/sections-1-n64.rd b/ld/testsuite/ld-mips-elf/sections-1-n64.rd
new file mode 100644 (file)
index 0000000..57323de
--- /dev/null
@@ -0,0 +1,36 @@
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+  \[Nr\] Name +Type .*
+  \[..\]  +NULL .*
+  \[..\] \.interp +PROGBITS .*
+  \[..\] \.MIPS\.abiflags +MIPS_ABIFLAGS .*
+  \[..\] \.MIPS\.xhash +MIPS_XHASH .*
+  \[..\] \.MIPS\.options +MIPS_OPTIONS .*
+  \[..\] \.text +PROGBITS .*
+  \[..\] \.data +PROGBITS .*
+  \[..\] \.rodata +PROGBITS .*
+  \[..\] \.got\.plt +PROGBITS .*
+  \[..\] \.got +PROGBITS .*
+  \[..\] \.sdata +PROGBITS .*
+  \[..\] \.lit8 +PROGBITS .*
+  \[..\] \.lit4 +PROGBITS .*
+  \[..\] \.sbss +NOBITS .*
+  \[..\] \.bss +NOBITS .*
+  \[..\] \.pdr +PROGBITS .*
+  \[..\] \.gcc_compiled_long32 +PROGBITS .*
+  \[..\] \.gcc_compiled_long64 +PROGBITS .*
+  \[..\] \.gptab\.sbss +MIPS_GPTAB .*
+  \[..\] \.gptab\.sdata +MIPS_GPTAB .*
+  \[..\] \.mdebug\.abi32 +PROGBITS .*
+  \[..\] \.mdebug\.abi64 +PROGBITS .*
+  \[..\] \.mdebug\.abiN32 +PROGBITS .*
+  \[..\] \.mdebug\.abiO64 +PROGBITS .*
+  \[..\] \.mdebug\.eabi32 +PROGBITS .*
+  \[..\] \.mdebug\.eabi64 +PROGBITS .*
+  \[..\] \.gnu\.attributes +GNU_ATTRIBUTES .*
+  \[..\] \.symtab +SYMTAB .*
+  \[..\] \.strtab +STRTAB .*
+  \[..\] \.shstrtab +STRTAB .*
+Key to Flags:
+#pass
diff --git a/ld/testsuite/ld-mips-elf/sections-1-n64t.rd b/ld/testsuite/ld-mips-elf/sections-1-n64t.rd
new file mode 100644 (file)
index 0000000..3852b62
--- /dev/null
@@ -0,0 +1,36 @@
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+  \[Nr\] Name +Type .*
+  \[..\]  +NULL .*
+  \[..\] \.interp +PROGBITS .*
+  \[..\] \.MIPS\.abiflags +MIPS_ABIFLAGS .*
+  \[..\] \.MIPS\.xhash +MIPS_XHASH .*
+  \[..\] \.MIPS\.options +MIPS_OPTIONS .*
+  \[..\] \.text +PROGBITS .*
+  \[..\] \.rodata +PROGBITS .*
+  \[..\] \.data +PROGBITS .*
+  \[..\] \.got\.plt +PROGBITS .*
+  \[..\] \.got +PROGBITS .*
+  \[..\] \.sdata +PROGBITS .*
+  \[..\] \.lit8 +PROGBITS .*
+  \[..\] \.lit4 +PROGBITS .*
+  \[..\] \.sbss +NOBITS .*
+  \[..\] \.bss +NOBITS .*
+  \[..\] \.pdr +PROGBITS .*
+  \[..\] \.gcc_compiled_long32 +PROGBITS .*
+  \[..\] \.gcc_compiled_long64 +PROGBITS .*
+  \[..\] \.mdebug\.abi32 +PROGBITS .*
+  \[..\] \.mdebug\.abi64 +PROGBITS .*
+  \[..\] \.mdebug\.abiN32 +PROGBITS .*
+  \[..\] \.mdebug\.abiO64 +PROGBITS .*
+  \[..\] \.mdebug\.eabi32 +PROGBITS .*
+  \[..\] \.mdebug\.eabi64 +PROGBITS .*
+  \[..\] \.gnu\.attributes +GNU_ATTRIBUTES .*
+  \[..\] \.gptab\.sdata +MIPS_GPTAB .*
+  \[..\] \.gptab\.sbss +MIPS_GPTAB .*
+  \[..\] \.symtab +SYMTAB .*
+  \[..\] \.strtab +STRTAB .*
+  \[..\] \.shstrtab +STRTAB .*
+Key to Flags:
+#pass
diff --git a/ld/testsuite/ld-mips-elf/sections-1-o32.rd b/ld/testsuite/ld-mips-elf/sections-1-o32.rd
new file mode 100644 (file)
index 0000000..5a601e6
--- /dev/null
@@ -0,0 +1,36 @@
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+  \[Nr\] Name +Type .*
+  \[..\]  +NULL .*
+  \[..\] \.interp +PROGBITS .*
+  \[..\] \.MIPS\.abiflags +MIPS_ABIFLAGS .*
+  \[..\] \.reginfo +MIPS_REGINFO .*
+  \[..\] \.MIPS\.xhash +MIPS_XHASH .*
+  \[..\] \.text +PROGBITS .*
+  \[..\] \.rodata +PROGBITS .*
+  \[..\] \.data +PROGBITS .*
+  \[..\] \.got\.plt +PROGBITS .*
+  \[..\] \.got +PROGBITS .*
+  \[..\] \.sdata +PROGBITS .*
+  \[..\] \.lit8 +PROGBITS .*
+  \[..\] \.lit4 +PROGBITS .*
+  \[..\] \.sbss +NOBITS .*
+  \[..\] \.bss +NOBITS .*
+  \[..\] \.pdr +PROGBITS .*
+  \[..\] \.gnu\.attributes +GNU_ATTRIBUTES .*
+  \[..\] \.gptab\.sdata +MIPS_GPTAB .*
+  \[..\] \.gptab\.sbss +MIPS_GPTAB .*
+  \[..\] \.mdebug\.abi32 +PROGBITS .*
+  \[..\] \.mdebug\.abiN32 +PROGBITS .*
+  \[..\] \.mdebug\.abi64 +PROGBITS .*
+  \[..\] \.mdebug\.abiO64 +PROGBITS .*
+  \[..\] \.mdebug\.eabi32 +PROGBITS .*
+  \[..\] \.mdebug\.eabi64 +PROGBITS .*
+  \[..\] \.gcc_compiled_long32 +PROGBITS .*
+  \[..\] \.gcc_compiled_long64 +PROGBITS .*
+  \[..\] \.symtab +SYMTAB .*
+  \[..\] \.strtab +STRTAB .*
+  \[..\] \.shstrtab +STRTAB .*
+Key to Flags:
+#pass
diff --git a/ld/testsuite/ld-mips-elf/sections-1-o32t.rd b/ld/testsuite/ld-mips-elf/sections-1-o32t.rd
new file mode 100644 (file)
index 0000000..29daf27
--- /dev/null
@@ -0,0 +1,36 @@
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+  \[Nr\] Name +Type .*
+  \[..\]  +NULL .*
+  \[..\] \.interp +PROGBITS .*
+  \[..\] \.MIPS\.abiflags +MIPS_ABIFLAGS .*
+  \[..\] \.reginfo +MIPS_REGINFO .*
+  \[..\] \.MIPS\.xhash +MIPS_XHASH .*
+  \[..\] \.text +PROGBITS .*
+  \[..\] \.rodata +PROGBITS .*
+  \[..\] \.got\.plt +PROGBITS .*
+  \[..\] \.data +PROGBITS .*
+  \[..\] \.got +PROGBITS .*
+  \[..\] \.sdata +PROGBITS .*
+  \[..\] \.lit8 +PROGBITS .*
+  \[..\] \.lit4 +PROGBITS .*
+  \[..\] \.sbss +NOBITS .*
+  \[..\] \.bss +NOBITS .*
+  \[..\] \.pdr +PROGBITS .*
+  \[..\] \.gnu\.attributes +GNU_ATTRIBUTES .*
+  \[..\] \.gptab\.sdata +MIPS_GPTAB .*
+  \[..\] \.gptab\.sbss +MIPS_GPTAB .*
+  \[..\] \.mdebug\.abi32 +PROGBITS .*
+  \[..\] \.mdebug\.abiN32 +PROGBITS .*
+  \[..\] \.mdebug\.abi64 +PROGBITS .*
+  \[..\] \.mdebug\.abiO64 +PROGBITS .*
+  \[..\] \.mdebug\.eabi32 +PROGBITS .*
+  \[..\] \.mdebug\.eabi64 +PROGBITS .*
+  \[..\] \.gcc_compiled_long32 +PROGBITS .*
+  \[..\] \.gcc_compiled_long64 +PROGBITS .*
+  \[..\] \.symtab +SYMTAB .*
+  \[..\] \.strtab +STRTAB .*
+  \[..\] \.shstrtab +STRTAB .*
+Key to Flags:
+#pass
diff --git a/ld/testsuite/ld-mips-elf/sections-2-n32.rd b/ld/testsuite/ld-mips-elf/sections-2-n32.rd
new file mode 100644 (file)
index 0000000..e6accc2
--- /dev/null
@@ -0,0 +1,33 @@
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+  \[Nr\] Name +Type .*
+  \[..\]  +NULL .*
+  \[..\] \.interp +PROGBITS .*
+  \[..\] \.MIPS\.abiflags +MIPS_ABIFLAGS .*
+  \[..\] \.MIPS\.xhash +MIPS_XHASH .*
+  \[..\] \.reginfo +MIPS_REGINFO .*
+  \[..\] \.text +PROGBITS .*
+  \[..\] \.data +PROGBITS .*
+  \[..\] \.rodata +PROGBITS .*
+  \[..\] \.got\.plt +PROGBITS .*
+  \[..\] \.got +PROGBITS .*
+  \[..\] \.sdata +PROGBITS .*
+  \[..\] \.lit8 +PROGBITS .*
+  \[..\] \.lit4 +PROGBITS .*
+  \[..\] \.sbss +NOBITS .*
+  \[..\] \.bss +NOBITS .*
+  \[..\] \.gcc_compiled_long32 +PROGBITS .*
+  \[..\] \.gcc_compiled_long64 +PROGBITS .*
+  \[..\] \.mdebug\.abi32 +PROGBITS .*
+  \[..\] \.mdebug\.abi64 +PROGBITS .*
+  \[..\] \.mdebug\.abiN32 +PROGBITS .*
+  \[..\] \.mdebug\.abiO64 +PROGBITS .*
+  \[..\] \.mdebug\.eabi32 +PROGBITS .*
+  \[..\] \.mdebug\.eabi64 +PROGBITS .*
+  \[..\] \.gnu\.attributes +GNU_ATTRIBUTES .*
+  \[..\] \.symtab +SYMTAB .*
+  \[..\] \.strtab +STRTAB .*
+  \[..\] \.shstrtab +STRTAB .*
+Key to Flags:
+#pass
diff --git a/ld/testsuite/ld-mips-elf/sections-2-n32p.rd b/ld/testsuite/ld-mips-elf/sections-2-n32p.rd
new file mode 100644 (file)
index 0000000..5932768
--- /dev/null
@@ -0,0 +1,33 @@
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+  \[Nr\] Name +Type .*
+  \[..\]  +NULL .*
+  \[..\] \.interp +PROGBITS .*
+  \[..\] \.MIPS\.abiflags +MIPS_ABIFLAGS .*
+  \[..\] \.MIPS\.xhash +MIPS_XHASH .*
+  \[..\] \.reginfo +MIPS_REGINFO .*
+  \[..\] \.text +PROGBITS .*
+  \[..\] \.rodata +PROGBITS .*
+  \[..\] \.data +PROGBITS .*
+  \[..\] \.got\.plt +PROGBITS .*
+  \[..\] \.got +PROGBITS .*
+  \[..\] \.sdata +PROGBITS .*
+  \[..\] \.lit8 +PROGBITS .*
+  \[..\] \.lit4 +PROGBITS .*
+  \[..\] \.sbss +NOBITS .*
+  \[..\] \.bss +NOBITS .*
+  \[..\] \.gcc_compiled_long32 +PROGBITS .*
+  \[..\] \.gcc_compiled_long64 +PROGBITS .*
+  \[..\] \.mdebug\.abi32 +PROGBITS .*
+  \[..\] \.mdebug\.abi64 +PROGBITS .*
+  \[..\] \.mdebug\.abiN32 +PROGBITS .*
+  \[..\] \.mdebug\.abiO64 +PROGBITS .*
+  \[..\] \.mdebug\.eabi32 +PROGBITS .*
+  \[..\] \.mdebug\.eabi64 +PROGBITS .*
+  \[..\] \.gnu\.attributes +GNU_ATTRIBUTES .*
+  \[..\] \.symtab +SYMTAB .*
+  \[..\] \.strtab +STRTAB .*
+  \[..\] \.shstrtab +STRTAB .*
+Key to Flags:
+#pass
diff --git a/ld/testsuite/ld-mips-elf/sections-2-n32t.rd b/ld/testsuite/ld-mips-elf/sections-2-n32t.rd
new file mode 100644 (file)
index 0000000..5932768
--- /dev/null
@@ -0,0 +1,33 @@
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+  \[Nr\] Name +Type .*
+  \[..\]  +NULL .*
+  \[..\] \.interp +PROGBITS .*
+  \[..\] \.MIPS\.abiflags +MIPS_ABIFLAGS .*
+  \[..\] \.MIPS\.xhash +MIPS_XHASH .*
+  \[..\] \.reginfo +MIPS_REGINFO .*
+  \[..\] \.text +PROGBITS .*
+  \[..\] \.rodata +PROGBITS .*
+  \[..\] \.data +PROGBITS .*
+  \[..\] \.got\.plt +PROGBITS .*
+  \[..\] \.got +PROGBITS .*
+  \[..\] \.sdata +PROGBITS .*
+  \[..\] \.lit8 +PROGBITS .*
+  \[..\] \.lit4 +PROGBITS .*
+  \[..\] \.sbss +NOBITS .*
+  \[..\] \.bss +NOBITS .*
+  \[..\] \.gcc_compiled_long32 +PROGBITS .*
+  \[..\] \.gcc_compiled_long64 +PROGBITS .*
+  \[..\] \.mdebug\.abi32 +PROGBITS .*
+  \[..\] \.mdebug\.abi64 +PROGBITS .*
+  \[..\] \.mdebug\.abiN32 +PROGBITS .*
+  \[..\] \.mdebug\.abiO64 +PROGBITS .*
+  \[..\] \.mdebug\.eabi32 +PROGBITS .*
+  \[..\] \.mdebug\.eabi64 +PROGBITS .*
+  \[..\] \.gnu\.attributes +GNU_ATTRIBUTES .*
+  \[..\] \.symtab +SYMTAB .*
+  \[..\] \.strtab +STRTAB .*
+  \[..\] \.shstrtab +STRTAB .*
+Key to Flags:
+#pass
diff --git a/ld/testsuite/ld-mips-elf/sections-2-n64.rd b/ld/testsuite/ld-mips-elf/sections-2-n64.rd
new file mode 100644 (file)
index 0000000..2f7afdd
--- /dev/null
@@ -0,0 +1,33 @@
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+  \[Nr\] Name +Type .*
+  \[..\]  +NULL .*
+  \[..\] \.interp +PROGBITS .*
+  \[..\] \.MIPS\.abiflags +MIPS_ABIFLAGS .*
+  \[..\] \.MIPS\.xhash +MIPS_XHASH .*
+  \[..\] \.MIPS\.options +MIPS_OPTIONS .*
+  \[..\] \.text +PROGBITS .*
+  \[..\] \.data +PROGBITS .*
+  \[..\] \.rodata +PROGBITS .*
+  \[..\] \.got\.plt +PROGBITS .*
+  \[..\] \.got +PROGBITS .*
+  \[..\] \.sdata +PROGBITS .*
+  \[..\] \.lit8 +PROGBITS .*
+  \[..\] \.lit4 +PROGBITS .*
+  \[..\] \.sbss +NOBITS .*
+  \[..\] \.bss +NOBITS .*
+  \[..\] \.gcc_compiled_long32 +PROGBITS .*
+  \[..\] \.gcc_compiled_long64 +PROGBITS .*
+  \[..\] \.mdebug\.abi32 +PROGBITS .*
+  \[..\] \.mdebug\.abi64 +PROGBITS .*
+  \[..\] \.mdebug\.abiN32 +PROGBITS .*
+  \[..\] \.mdebug\.abiO64 +PROGBITS .*
+  \[..\] \.mdebug\.eabi32 +PROGBITS .*
+  \[..\] \.mdebug\.eabi64 +PROGBITS .*
+  \[..\] \.gnu\.attributes +GNU_ATTRIBUTES .*
+  \[..\] \.symtab +SYMTAB .*
+  \[..\] \.strtab +STRTAB .*
+  \[..\] \.shstrtab +STRTAB .*
+Key to Flags:
+#pass
diff --git a/ld/testsuite/ld-mips-elf/sections-2-n64t.rd b/ld/testsuite/ld-mips-elf/sections-2-n64t.rd
new file mode 100644 (file)
index 0000000..d24e04b
--- /dev/null
@@ -0,0 +1,33 @@
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+  \[Nr\] Name +Type .*
+  \[..\]  +NULL .*
+  \[..\] \.interp +PROGBITS .*
+  \[..\] \.MIPS\.abiflags +MIPS_ABIFLAGS .*
+  \[..\] \.MIPS\.xhash +MIPS_XHASH .*
+  \[..\] \.MIPS\.options +MIPS_OPTIONS .*
+  \[..\] \.text +PROGBITS .*
+  \[..\] \.rodata +PROGBITS .*
+  \[..\] \.data +PROGBITS .*
+  \[..\] \.got\.plt +PROGBITS .*
+  \[..\] \.got +PROGBITS .*
+  \[..\] \.sdata +PROGBITS .*
+  \[..\] \.lit8 +PROGBITS .*
+  \[..\] \.lit4 +PROGBITS .*
+  \[..\] \.sbss +NOBITS .*
+  \[..\] \.bss +NOBITS .*
+  \[..\] \.gcc_compiled_long32 +PROGBITS .*
+  \[..\] \.gcc_compiled_long64 +PROGBITS .*
+  \[..\] \.mdebug\.abi32 +PROGBITS .*
+  \[..\] \.mdebug\.abi64 +PROGBITS .*
+  \[..\] \.mdebug\.abiN32 +PROGBITS .*
+  \[..\] \.mdebug\.abiO64 +PROGBITS .*
+  \[..\] \.mdebug\.eabi32 +PROGBITS .*
+  \[..\] \.mdebug\.eabi64 +PROGBITS .*
+  \[..\] \.gnu\.attributes +GNU_ATTRIBUTES .*
+  \[..\] \.symtab +SYMTAB .*
+  \[..\] \.strtab +STRTAB .*
+  \[..\] \.shstrtab +STRTAB .*
+Key to Flags:
+#pass
diff --git a/ld/testsuite/ld-mips-elf/sections-2-o32.rd b/ld/testsuite/ld-mips-elf/sections-2-o32.rd
new file mode 100644 (file)
index 0000000..7bb3263
--- /dev/null
@@ -0,0 +1,33 @@
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+  \[Nr\] Name +Type .*
+  \[..\]  +NULL .*
+  \[..\] \.interp +PROGBITS .*
+  \[..\] \.MIPS\.abiflags +MIPS_ABIFLAGS .*
+  \[..\] \.reginfo +MIPS_REGINFO .*
+  \[..\] \.MIPS\.xhash +MIPS_XHASH .*
+  \[..\] \.text +PROGBITS .*
+  \[..\] \.rodata +PROGBITS .*
+  \[..\] \.data +PROGBITS .*
+  \[..\] \.got\.plt +PROGBITS .*
+  \[..\] \.got +PROGBITS .*
+  \[..\] \.sdata +PROGBITS .*
+  \[..\] \.lit8 +PROGBITS .*
+  \[..\] \.lit4 +PROGBITS .*
+  \[..\] \.sbss +NOBITS .*
+  \[..\] \.bss +NOBITS .*
+  \[..\] \.gnu\.attributes +GNU_ATTRIBUTES .*
+  \[..\] \.mdebug\.abi32 +PROGBITS .*
+  \[..\] \.mdebug\.abiN32 +PROGBITS .*
+  \[..\] \.mdebug\.abi64 +PROGBITS .*
+  \[..\] \.mdebug\.abiO64 +PROGBITS .*
+  \[..\] \.mdebug\.eabi32 +PROGBITS .*
+  \[..\] \.mdebug\.eabi64 +PROGBITS .*
+  \[..\] \.gcc_compiled_long32 +PROGBITS .*
+  \[..\] \.gcc_compiled_long64 +PROGBITS .*
+  \[..\] \.symtab +SYMTAB .*
+  \[..\] \.strtab +STRTAB .*
+  \[..\] \.shstrtab +STRTAB .*
+Key to Flags:
+#pass
diff --git a/ld/testsuite/ld-mips-elf/sections-2-o32t.rd b/ld/testsuite/ld-mips-elf/sections-2-o32t.rd
new file mode 100644 (file)
index 0000000..a0fc114
--- /dev/null
@@ -0,0 +1,33 @@
+There are [0-9]+ section headers, starting at offset 0x[0-9a-f]+:
+
+Section Headers:
+  \[Nr\] Name +Type .*
+  \[..\]  +NULL .*
+  \[..\] \.interp +PROGBITS .*
+  \[..\] \.MIPS\.abiflags +MIPS_ABIFLAGS .*
+  \[..\] \.reginfo +MIPS_REGINFO .*
+  \[..\] \.MIPS\.xhash +MIPS_XHASH .*
+  \[..\] \.text +PROGBITS .*
+  \[..\] \.rodata +PROGBITS .*
+  \[..\] \.got\.plt +PROGBITS .*
+  \[..\] \.data +PROGBITS .*
+  \[..\] \.got +PROGBITS .*
+  \[..\] \.sdata +PROGBITS .*
+  \[..\] \.lit8 +PROGBITS .*
+  \[..\] \.lit4 +PROGBITS .*
+  \[..\] \.sbss +NOBITS .*
+  \[..\] \.bss +NOBITS .*
+  \[..\] \.gnu\.attributes +GNU_ATTRIBUTES .*
+  \[..\] \.mdebug\.abi32 +PROGBITS .*
+  \[..\] \.mdebug\.abiN32 +PROGBITS .*
+  \[..\] \.mdebug\.abi64 +PROGBITS .*
+  \[..\] \.mdebug\.abiO64 +PROGBITS .*
+  \[..\] \.mdebug\.eabi32 +PROGBITS .*
+  \[..\] \.mdebug\.eabi64 +PROGBITS .*
+  \[..\] \.gcc_compiled_long32 +PROGBITS .*
+  \[..\] \.gcc_compiled_long64 +PROGBITS .*
+  \[..\] \.symtab +SYMTAB .*
+  \[..\] \.strtab +STRTAB .*
+  \[..\] \.shstrtab +STRTAB .*
+Key to Flags:
+#pass
diff --git a/ld/testsuite/ld-mips-elf/sections.s b/ld/testsuite/ld-mips-elf/sections.s
new file mode 100644 (file)
index 0000000..3039349
--- /dev/null
@@ -0,0 +1,44 @@
+       .section .MIPS.xhash
+       .dc.l   0
+       .section .bss
+       .dc.l   0
+       .section .data
+       .dc.l   0
+       .section .gcc_compiled_long32
+       .dc.l   0
+       .section .gcc_compiled_long64
+       .dc.l   0
+       .section .got
+       .dc.l   0
+       .section .got.plt
+       .dc.l   0
+       .section .gptab.sbss
+       .dc.l   0
+       .section .gptab.sdata
+       .dc.l   0
+       .section .interp
+       .dc.l   0
+       .section .lit4
+       .dc.l   0
+       .section .lit8
+       .dc.l   0
+       .section .mdebug.abi32
+       .dc.l   0
+       .section .mdebug.abi64
+       .dc.l   0
+       .section .mdebug.abiN32
+       .dc.l   0
+       .section .mdebug.abiO64
+       .dc.l   0
+       .section .mdebug.eabi32
+       .dc.l   0
+       .section .mdebug.eabi64
+       .dc.l   0
+       .section .rodata
+       .dc.l   0
+       .section .sbss
+       .dc.l   0
+       .section .sdata
+       .dc.l   0
+       .section .text
+       .dc.l   0