diff options
author | Maciej W. Rozycki <macro@imgtec.com> | 2017-09-26 12:09:50 +0100 |
---|---|---|
committer | Maciej W. Rozycki <macro@imgtec.com> | 2017-09-26 12:09:50 +0100 |
commit | 28d810f7ffd7fefd88117e9d830e7588591fd35c (patch) | |
tree | b5b43ea71171402f437c2daf5c59d6329b1db271 /ld | |
parent | 58a0b827444d0d6baad47f5fd010f33e541ed16e (diff) | |
download | gdb-28d810f7ffd7fefd88117e9d830e7588591fd35c.zip gdb-28d810f7ffd7fefd88117e9d830e7588591fd35c.tar.gz gdb-28d810f7ffd7fefd88117e9d830e7588591fd35c.tar.bz2 |
LD/testsuite: Fix undefined symbol tests for MIPS and S+core targets
Fix commit 647d4de92e06 ("Test undefined symbols in shared libraries")
and remove "undefined symbols in shared lib (dyn reloc)" test failures
for MIPS and S+core targets.
This test assumes 3 dynamic relocation entries, however the respective
psABIs define an extra single dummy *_NONE relocation at the beginning
of the dynamic relocation table, which results in test output like the
following for MIPS:
Relocation section '.rel.dyn' at offset 0x33c contains 4 entries:
Offset Info Type Sym.Value Sym. Name
00000000 00000000 R_MIPS_NONE
00010364 00000903 R_MIPS_REL32 00000000 undef_pfun
00010360 00000a03 R_MIPS_REL32 00000000 undef_data
00010368 00000b03 R_MIPS_REL32 00000000 undef_notype
and S+core:
Relocation section '.rel.dyn' at offset 0x274 contains 4 entries:
Offset Info Type Sym.Value Sym. Name
00000000 00000000 R_SCORE_NONE
5ffe0464 00000e12 R_SCORE_REL32 00000000 undef_notype
5ffe045c 00000f12 R_SCORE_REL32 00000000 undef_data
5ffe0460 00001012 R_SCORE_REL32 00000000 undef_pfun
targets respectively, and also n64 MIPS targets pad relocation triplets
they use with extra *_NONE relocations, resulting in output like this:
Relocation section '.rel.dyn' at offset 0x4c0 contains 4 entries:
Offset Info Type Sym. Value Sym. Name
000000000000 000000000000 R_MIPS_NONE
Type2: R_MIPS_NONE
Type3: R_MIPS_NONE
000000010508 000900001203 R_MIPS_REL32 0000000000000000 undef_pfun
Type2: R_MIPS_64
Type3: R_MIPS_NONE
000000010500 000a00001203 R_MIPS_REL32 0000000000000000 undef_data
Type2: R_MIPS_64
Type3: R_MIPS_NONE
000000010510 000b00001203 R_MIPS_REL32 0000000000000000 undef_notype
Type2: R_MIPS_64
Type3: R_MIPS_NONE
Expect the right number of *_NONE relocations then, and adjust the total
number of relocations expected accordingly.
ld/
* testsuite/ld-undefined/undefined.exp: Correct the dyn reloc
test for MIPS and S+core targets.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 5 | ||||
-rw-r--r-- | ld/testsuite/ld-undefined/undefined.exp | 26 |
2 files changed, 28 insertions, 3 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index b15d726..0ccc02b 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,8 @@ +2017-09-26 Maciej W. Rozycki <macro@imgtec.com> + + * testsuite/ld-undefined/undefined.exp: Correct the dyn reloc + test for MIPS and S+core targets. + 2017-09-22 H.J. Lu <hongjiu.lu@intel.com> PR ld/22150 diff --git a/ld/testsuite/ld-undefined/undefined.exp b/ld/testsuite/ld-undefined/undefined.exp index c0c9012..1421383 100644 --- a/ld/testsuite/ld-undefined/undefined.exp +++ b/ld/testsuite/ld-undefined/undefined.exp @@ -195,10 +195,30 @@ if { ![is_elf_format] || ![check_shared_lib_support]} then { set exec_output [run_host_cmd "$READELF" "-r tmpdir/fundef.so"] set exec_output [prune_warnings $exec_output] - # we ought to get two .rel{a}.plt and three .rel{a}.dyn relocs + # We ought to get two .rel{a}.plt and three .rel{a}.dyn relocs, + # except for MIPS targets whose psABI mandates an extra + # R_MIPS_NONE relocation, also used to pad n64 relocation + # triplets, and S+core targets using an extra R_SCORE_NONE + # relocation, so adjust for that. + switch -glob $target_triplet { + "mips64*-*-openbsd*" { + set none_count 6 + set reloc_count 4 + } + "mips*" - + "score*" { + set none_count 1 + set reloc_count 4 + } + "*" { + set none_count 0 + set reloc_count 3 + } + } + if { ($asflags == "" || [regexp ".* contains 2 .*" $exec_output]) - && [regexp ".* contains 3 .*" $exec_output] - && ![regexp "_NONE" $exec_output]} then { + && [regexp ".* contains $reloc_count .*" $exec_output] + && [regexp -all "_NONE" $exec_output] == $none_count } then { pass "$testname (dyn reloc)" } else { fail "$testname (dyn reloc)" |