Skip to content

Commit

Permalink
MIPS/LD: Include n64 `.interp' with INITIAL_READONLY_SECTIONS
Browse files Browse the repository at this point in the history
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 5a8e7be ("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 94bb04b ("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 <[email protected]>

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.
  • Loading branch information
YunQiang Su authored and maciej-w-rozycki committed Jul 28, 2023
1 parent cc66ad2 commit f625926
Show file tree
Hide file tree
Showing 18 changed files with 559 additions and 7 deletions.
6 changes: 5 additions & 1 deletion ld/emulparams/elf64bmip-defs.sh
Original file line number Diff line number Diff line change
@@ -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) }
Expand Down
21 changes: 21 additions & 0 deletions ld/testsuite/ld-mips-elf/mips-elf.exp
Original file line number Diff line number Diff line change
Expand Up @@ -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}"]]
}
12 changes: 6 additions & 6 deletions ld/testsuite/ld-mips-elf/pie-n64.d
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
36 changes: 36 additions & 0 deletions ld/testsuite/ld-mips-elf/sections-1-n32.rd
Original file line number Diff line number Diff line change
@@ -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
36 changes: 36 additions & 0 deletions ld/testsuite/ld-mips-elf/sections-1-n32p.rd
Original file line number Diff line number Diff line change
@@ -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
36 changes: 36 additions & 0 deletions ld/testsuite/ld-mips-elf/sections-1-n32t.rd
Original file line number Diff line number Diff line change
@@ -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
36 changes: 36 additions & 0 deletions ld/testsuite/ld-mips-elf/sections-1-n64.rd
Original file line number Diff line number Diff line change
@@ -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
36 changes: 36 additions & 0 deletions ld/testsuite/ld-mips-elf/sections-1-n64t.rd
Original file line number Diff line number Diff line change
@@ -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
36 changes: 36 additions & 0 deletions ld/testsuite/ld-mips-elf/sections-1-o32.rd
Original file line number Diff line number Diff line change
@@ -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
36 changes: 36 additions & 0 deletions ld/testsuite/ld-mips-elf/sections-1-o32t.rd
Original file line number Diff line number Diff line change
@@ -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
33 changes: 33 additions & 0 deletions ld/testsuite/ld-mips-elf/sections-2-n32.rd
Original file line number Diff line number Diff line change
@@ -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
33 changes: 33 additions & 0 deletions ld/testsuite/ld-mips-elf/sections-2-n32p.rd
Original file line number Diff line number Diff line change
@@ -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
Loading

0 comments on commit f625926

Please sign in to comment.