diff options
author | Maciej W. Rozycki <macro@linux-mips.org> | 2009-12-10 14:20:04 +0000 |
---|---|---|
committer | Maciej W. Rozycki <macro@linux-mips.org> | 2009-12-10 14:20:04 +0000 |
commit | e7e2196da3f0157573acc1b4fa2f7a87da9f044f (patch) | |
tree | d53254d0337939a0dae85ff5cf0b6b974bc85712 /ld/testsuite/ld-mips-elf | |
parent | b59befec8e8a9bec906f2a0ae623db822c9ef2cd (diff) | |
download | gdb-e7e2196da3f0157573acc1b4fa2f7a87da9f044f.zip gdb-e7e2196da3f0157573acc1b4fa2f7a87da9f044f.tar.gz gdb-e7e2196da3f0157573acc1b4fa2f7a87da9f044f.tar.bz2 |
bfd/
* elfxx-mips.c (mips_elf_calculate_relocation): Correct handling
of undefined symbols.
ld/testsuite/
* ld-mips-elf/undefined.d: New test.
* ld-mips-elf/undefined.s: Source for the new test.
* ld-mips-elf/mips-elf.exp: Run the new test.
Diffstat (limited to 'ld/testsuite/ld-mips-elf')
-rw-r--r-- | ld/testsuite/ld-mips-elf/mips-elf.exp | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/undefined.d | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/undefined.s | 24 |
3 files changed, 30 insertions, 0 deletions
diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp index 7622ac3..ea70ea1 100644 --- a/ld/testsuite/ld-mips-elf/mips-elf.exp +++ b/ld/testsuite/ld-mips-elf/mips-elf.exp @@ -520,3 +520,5 @@ if { $linux_gnu } { "got-vers-1.so"} } } + +run_dump_test "undefined" diff --git a/ld/testsuite/ld-mips-elf/undefined.d b/ld/testsuite/ld-mips-elf/undefined.d new file mode 100644 index 0000000..e5231df --- /dev/null +++ b/ld/testsuite/ld-mips-elf/undefined.d @@ -0,0 +1,4 @@ +#name: MIPS undefined reference +#source: undefined.s +#ld: -e foo +#error: \A[^\n]*\.o: In function `foo':\n\(\.text\+0x0\): undefined reference to `bar'\Z diff --git a/ld/testsuite/ld-mips-elf/undefined.s b/ld/testsuite/ld-mips-elf/undefined.s new file mode 100644 index 0000000..d946a5a --- /dev/null +++ b/ld/testsuite/ld-mips-elf/undefined.s @@ -0,0 +1,24 @@ +# Relocations against undefined symbols would be incorrectly let through +# by mips_elf_calculate_relocation() once the result of the +# ->undefined_symbol() callback has been interpreted in the opposite +# sense. The link would fail anyway, but for R_MIPS_GOT_PAGE relocations +# a failure of the following assertion: +# +# BFD_ASSERT (h->dynindx >= global_got_dynindx); +# +# would additionally be reported in mips_elf_global_got_index(), because +# at this point h->dynindx for the undefined symbol would be set to -1. +# Other kinds of GOT relocations allocate a GOT index for the symbol +# referred and set its h->dynindx in _bfd_mips_elf_check_relocs(), but +# R_MIPS_GOT_PAGE relocations only allocate a GOT page at that point and +# for undefined symbols the page never gets resolved any further. + + .abicalls + .text + .globl foo + .type foo, @function + .ent foo +foo: + li $2, %got_page(bar) + .end foo + .size foo, . - foo |