MIPS n64 ABI has a peculiarity where all relocations are composed of
three, with subsequent relocation types set to R_MIPS_NONE if further
calculation is not required. Example output produced by `readelf' and
`objdump' for such relocations is:
Offset Info Type Sym. Value Sym. Name + Addend
000000000000 000800000002 R_MIPS_32
0000000000000000 foo + 0
Type2: R_MIPS_NONE
Type3: R_MIPS_NONE
and:
OFFSET TYPE VALUE
0000000000000000 R_MIPS_32 foo
0000000000000000 R_MIPS_NONE *ABS*
0000000000000000 R_MIPS_NONE *ABS*
respectively. The presence of these extra R_MIPS_NONE entries is not
relevant for generic or even some MIPS tests, so optionally match them
with the respective dump patterns, also discarding `xfail' annotation
for MIPS/OpenBSD targets from gas/elf/missing-build-notes.d, removing
these regressions:
mips64-openbsd -FAIL: readelf -r bintest
mips64-openbsd -FAIL: forward expression
mips64-openbsd -FAIL: assignment tests
mips64-openbsd -FAIL: gas/all/none
mips64-openbsd -XFAIL: gas/elf/missing-build-notes
mips64-openbsd -FAIL: macro test 2
mips64-openbsd -FAIL: macro irp
mips64-openbsd -FAIL: macro rept
mips64-openbsd -FAIL: nested irp/irpc/rept
mips64-openbsd -FAIL: macro vararg
mips64-openbsd -FAIL: mips jalx
mips64-openbsd -FAIL: ST Microelectronics Loongson-2F workarounds of Jump Instruction issue
mips64el-openbsd -FAIL: readelf -r bintest
mips64el-openbsd -FAIL: forward expression
mips64el-openbsd -FAIL: assignment tests
mips64el-openbsd -FAIL: gas/all/none
mips64el-openbsd -XFAIL: gas/elf/missing-build-notes
mips64el-openbsd -FAIL: macro test 2
mips64el-openbsd -FAIL: macro irp
mips64el-openbsd -FAIL: macro rept
mips64el-openbsd -FAIL: nested irp/irpc/rept
mips64el-openbsd -FAIL: macro vararg
mips64el-openbsd -FAIL: mips jalx
mips64el-openbsd -FAIL: ST Microelectronics Loongson-2F workarounds of Jump Instruction issue
Co-Authored-By: Maciej W. Rozycki <macro@orcam.me.uk>
binutils/
* testsuite/binutils-all/readelf.r-64: Optionally match extra
R_MIPS_NONE pairs.
gas/
* testsuite/gas/all/assign.d: Optionally match extra
R_MIPS_NONE pairs.
* testsuite/gas/all/fwdexp.d: Likewise.
* testsuite/gas/all/none.d: Likewise.
* testsuite/gas/macros/irp.d: Likewise.
* testsuite/gas/macros/repeat.d: Likewise.
* testsuite/gas/macros/rept.d: Likewise.
* testsuite/gas/macros/test2.d: Likewise.
* testsuite/gas/macros/vararg.d: Likewise.
* testsuite/gas/mips/compact-eh-eb-1.d: Likewise.
* testsuite/gas/mips/compact-eh-eb-2.d: Likewise.
* testsuite/gas/mips/compact-eh-eb-3.d: Likewise.
* testsuite/gas/mips/compact-eh-eb-4.d: Likewise.
* testsuite/gas/mips/compact-eh-eb-5.d: Likewise.
* testsuite/gas/mips/compact-eh-eb-6.d: Likewise.
* testsuite/gas/mips/compact-eh-el-1.d: Likewise.
* testsuite/gas/mips/compact-eh-el-2.d: Likewise.
* testsuite/gas/mips/compact-eh-el-3.d: Likewise.
* testsuite/gas/mips/compact-eh-el-4.d: Likewise.
* testsuite/gas/mips/compact-eh-el-5.d: Likewise.
* testsuite/gas/mips/compact-eh-el-6.d: Likewise.
* testsuite/gas/mips/loongson-2f-3.d: Likewise.
* testsuite/gas/mips/mips-jalx.d: Likewise.
* testsuite/gas/elf/missing-build-notes.d: Likewise. Remove
the `xfail' tag.
ld/
* testsuite/ld-mips-elf/reloc-estimate-1.d: Optionally match
extra R_MIPS_NONE pairs.
Relocation section '.rel.*text' at offset 0x.* contains 1 entry:
Offset Info Type Sym. Value Sym. Name.*
0+04 [0-9A-Fa-f]+ *R_.*0+00 external_symbol.*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
#...
.*zzz.*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
.*zzz.*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
#pass
RELOCATION RECORDS FOR .*
OFFSET +TYPE +VALUE
0+ .*(\.data|label_i)(|\+0xf+e|\+0xf+c|\+0xf+8|-0x0*2|-0x0*4|-0x0*8)
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
Contents of section .*
0+ (0+|feff|fffe|fcffffff|fffffffc|f8ffffff|f8ffffff ffffffff|ffffffff fffffff8|0+4) .*
#...
0+ .*(NONE|NULL|UNUSED0) +\*ABS\*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
# as: --generate-missing-build-notes=yes
# objdump: -r
-#xfail: mips*-*-openbsd
# Check that the relocations are for increasing addresses...
RELOCATION RECORDS FOR \[.gnu.build.attributes\]:
OFFSET +TYPE +VALUE
0+014 .*[ ]+.*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+0(18|1c) .*[ ]+.*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+0(30|38) .*[ ]+.*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+0(34|40) .*[ ]+.*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
#pass
RELOCATION RECORDS FOR .*
OFFSET[ ]+TYPE[ ]+VALUE.*
0+00[ ]+[a-zA-Z0-9_]+[ ]+foo1
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+04[ ]+[a-zA-Z0-9_]+[ ]+foo2
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+08[ ]+[a-zA-Z0-9_]+[ ]+foo3
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+0c[ ]+[a-zA-Z0-9_]+[ ]+bar1
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+10[ ]+[a-zA-Z0-9_]+[ ]+bar2
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+14[ ]+[a-zA-Z0-9_]+[ ]+bar3
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
#pass
RELOCATION RECORDS FOR .*
OFFSET[ ]+TYPE[ ]+VALUE.*
0+00[ ]+[a-zA-Z0-9_]+[ ]+irp_irp_19
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+04[ ]+[a-zA-Z0-9_]+[ ]+irp_irp_18
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+08[ ]+[a-zA-Z0-9_]+[ ]+irp_irp_29
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+0c[ ]+[a-zA-Z0-9_]+[ ]+irp_irp_28
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+10[ ]+[a-zA-Z0-9_]+[ ]+irp_irpc_19
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+14[ ]+[a-zA-Z0-9_]+[ ]+irp_irpc_18
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+18[ ]+[a-zA-Z0-9_]+[ ]+irp_irpc_29
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+1c[ ]+[a-zA-Z0-9_]+[ ]+irp_irpc_28
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+20[ ]+[a-zA-Z0-9_]+[ ]+irp_rept_1
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+24[ ]+[a-zA-Z0-9_]+[ ]+irp_rept_1
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+28[ ]+[a-zA-Z0-9_]+[ ]+irp_rept_2
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+2c[ ]+[a-zA-Z0-9_]+[ ]+irp_rept_2
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+30[ ]+[a-zA-Z0-9_]+[ ]+irpc_irp_19
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+34[ ]+[a-zA-Z0-9_]+[ ]+irpc_irp_18
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+38[ ]+[a-zA-Z0-9_]+[ ]+irpc_irp_29
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+3c[ ]+[a-zA-Z0-9_]+[ ]+irpc_irp_28
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+40[ ]+[a-zA-Z0-9_]+[ ]+irpc_irpc_19
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+44[ ]+[a-zA-Z0-9_]+[ ]+irpc_irpc_18
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+48[ ]+[a-zA-Z0-9_]+[ ]+irpc_irpc_29
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+4c[ ]+[a-zA-Z0-9_]+[ ]+irpc_irpc_28
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+50[ ]+[a-zA-Z0-9_]+[ ]+irpc_rept_1
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+54[ ]+[a-zA-Z0-9_]+[ ]+irpc_rept_1
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+58[ ]+[a-zA-Z0-9_]+[ ]+irpc_rept_2
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+5c[ ]+[a-zA-Z0-9_]+[ ]+irpc_rept_2
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+60[ ]+[a-zA-Z0-9_]+[ ]+rept_irp_9
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+64[ ]+[a-zA-Z0-9_]+[ ]+rept_irp_8
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+68[ ]+[a-zA-Z0-9_]+[ ]+rept_irp_9
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+6c[ ]+[a-zA-Z0-9_]+[ ]+rept_irp_8
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+70[ ]+[a-zA-Z0-9_]+[ ]+rept_irpc_9
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+74[ ]+[a-zA-Z0-9_]+[ ]+rept_irpc_8
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+78[ ]+[a-zA-Z0-9_]+[ ]+rept_irpc_9
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+7c[ ]+[a-zA-Z0-9_]+[ ]+rept_irpc_8
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+80[ ]+[a-zA-Z0-9_]+[ ]+rept_rept
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+84[ ]+[a-zA-Z0-9_]+[ ]+rept_rept
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+88[ ]+[a-zA-Z0-9_]+[ ]+rept_rept
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+8c[ ]+[a-zA-Z0-9_]+[ ]+rept_rept
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
#pass
RELOCATION RECORDS FOR .*
OFFSET[ ]+TYPE[ ]+VALUE.*
0+00[ ]+[a-zA-Z0-9_]+[ ]+foo1
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+04[ ]+[a-zA-Z0-9_]+[ ]+foo1
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+08[ ]+[a-zA-Z0-9_]+[ ]+foo1
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
#pass
RELOCATION RECORDS FOR .*
OFFSET[ ]+TYPE[ ]+VALUE.*
0+00[ ]+[a-zA-Z0-9_]+[ ]+foo1
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+04[ ]+[a-zA-Z0-9_]+[ ]+foo2
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+08[ ]+[a-zA-Z0-9_]+[ ]+foo3
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
#pass
RELOCATION RECORDS FOR .*
OFFSET[ ]+TYPE[ ]+VALUE.*
0+00[ ]+[a-zA-Z0-9_]+[ ]+foo1
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+04[ ]+[a-zA-Z0-9_]+[ ]+foo2
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+08[ ]+[a-zA-Z0-9_]+[ ]+foo3
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+0c[ ]+[a-zA-Z0-9_]+[ ]+foo4
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+10[ ]+[a-zA-Z0-9_]+[ ]+foo5
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+14[ ]+[a-zA-Z0-9_]+[ ]+foo6
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
#pass
RELOCATION RECORDS FOR \[.eh_frame_entry\]:
OFFSET +TYPE +VALUE
0+000000 R_MIPS_PC32 .text.*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
Contents of section .text:
RELOCATION RECORDS FOR \[.data.DW.ref.__gnu_compact_pr2\]:
OFFSET +TYPE +VALUE
0+000000 R_MIPS_32 __gnu_compact_pr2
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
RELOCATION RECORDS FOR \[.gnu_extab\]:
OFFSET +TYPE +VALUE
0+000001 R_MIPS_PC32 DW.ref.__gnu_compact_pr2
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
RELOCATION RECORDS FOR \[.eh_frame_entry\]:
OFFSET +TYPE +VALUE
0+000000 R_MIPS_PC32 .text.*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+000004 R_MIPS_PC32 .gnu_extab
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
Contents of section .group:
RELOCATION RECORDS FOR \[.eh_frame_entry\]:
OFFSET +TYPE +VALUE
0+000000 R_MIPS_PC32 .text.*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+000004 R_MIPS_PC32 .gnu_extab
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
Contents of section .text:
RELOCATION RECORDS FOR \[.eh_frame_entry\]:
OFFSET +TYPE +VALUE
0+000000 R_MIPS_PC32 .text.*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+000004 R_MIPS_PC32 .gnu_extab
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
Contents of section .text:
RELOCATION RECORDS FOR \[.data.DW.ref.__gnu_compact_pr2\]:
OFFSET +TYPE +VALUE
0+000000 R_MIPS_32 __gnu_compact_pr2
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
RELOCATION RECORDS FOR \[.gnu_extab\]:
OFFSET +TYPE +VALUE
0+000001 R_MIPS_PC32 DW.ref.__gnu_compact_pr2
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
RELOCATION RECORDS FOR \[.eh_frame_entry\]:
OFFSET +TYPE +VALUE
0+000000 R_MIPS_PC32 .text.*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+000004 R_MIPS_PC32 .gnu_extab
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
Contents of section .group:
RELOCATION RECORDS FOR \[.eh_frame_entry\]:
OFFSET +TYPE +VALUE
0+000000 R_MIPS_PC32 .text.*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+000004 R_MIPS_PC32 .gnu_extab
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
Contents of section .text:
RELOCATION RECORDS FOR \[.eh_frame_entry\]:
OFFSET +TYPE +VALUE
0+000000 R_MIPS_PC32 .text.*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
Contents of section .text:
RELOCATION RECORDS FOR \[.data.DW.ref.__gnu_compact_pr2\]:
OFFSET +TYPE +VALUE
0+000000 R_MIPS_32 __gnu_compact_pr2
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
RELOCATION RECORDS FOR \[.gnu_extab\]:
OFFSET +TYPE +VALUE
0+000001 R_MIPS_PC32 DW.ref.__gnu_compact_pr2
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
RELOCATION RECORDS FOR \[.eh_frame_entry\]:
OFFSET +TYPE +VALUE
0+000000 R_MIPS_PC32 .text.*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+000004 R_MIPS_PC32 .gnu_extab
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
Contents of section .group:
RELOCATION RECORDS FOR \[.eh_frame_entry\]:
OFFSET +TYPE +VALUE
0+000000 R_MIPS_PC32 .text.*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+000004 R_MIPS_PC32 .gnu_extab
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
Contents of section .text:
RELOCATION RECORDS FOR \[.eh_frame_entry\]:
OFFSET +TYPE +VALUE
0+000000 R_MIPS_PC32 .text.*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+000004 R_MIPS_PC32 .gnu_extab
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
Contents of section .text:
RELOCATION RECORDS FOR \[.data.DW.ref.__gnu_compact_pr2\]:
OFFSET +TYPE +VALUE
0+000000 R_MIPS_32 __gnu_compact_pr2
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
RELOCATION RECORDS FOR \[.gnu_extab\]:
OFFSET +TYPE +VALUE
0+000001 R_MIPS_PC32 DW.ref.__gnu_compact_pr2
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
RELOCATION RECORDS FOR \[.eh_frame_entry\]:
OFFSET +TYPE +VALUE
0+000000 R_MIPS_PC32 .text.*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+000004 R_MIPS_PC32 .gnu_extab
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
Contents of section .group:
RELOCATION RECORDS FOR \[.eh_frame_entry\]:
OFFSET +TYPE +VALUE
0+000000 R_MIPS_PC32 .text.*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+000004 R_MIPS_PC32 .gnu_extab
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
Contents of section .text:
44: 08000000 j 0x0
44: R_MIPS_26 external_label
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
48: 00000000 nop
4c: 00000000 nop
0+000000 <.text>:
0: 74000000 jalx 0x0
0: R_MIPS_26 external_label
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
4: 00000000 nop
8: 00000000 nop
c: 00000000 nop
DYNAMIC RELOCATION RECORDS
OFFSET +TYPE +VALUE
0+000000 R_MIPS_NONE \*ABS\*
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
0+010000 R_MIPS_REL32 foo@@V2
+#?.*R_MIPS_NONE.*
+#?.*R_MIPS_NONE.*
# The address must be 0x810. We should only ever allocate one dynamic