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.
This commit is contained in:
parent
b59befec8e
commit
e7e2196da3
@ -1,3 +1,8 @@
|
|||||||
|
2009-12-10 Maciej W. Rozycki <macro@codesourcery.com>
|
||||||
|
|
||||||
|
* elfxx-mips.c (mips_elf_calculate_relocation): Correct handling
|
||||||
|
of undefined symbols.
|
||||||
|
|
||||||
2009-12-09 Daniel Jacobowitz <dan@codesourcery.com>
|
2009-12-09 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
|
|
||||||
* elf32-arm.c (elf32_arm_next_input_section): Skip sections without
|
* elf32-arm.c (elf32_arm_next_input_section): Skip sections without
|
||||||
|
@ -4973,15 +4973,17 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
|
|||||||
http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf */
|
http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf */
|
||||||
symbol = 0;
|
symbol = 0;
|
||||||
}
|
}
|
||||||
else
|
else if ((*info->callbacks->undefined_symbol)
|
||||||
{
|
|
||||||
if (! ((*info->callbacks->undefined_symbol)
|
|
||||||
(info, h->root.root.root.string, input_bfd,
|
(info, h->root.root.root.string, input_bfd,
|
||||||
input_section, relocation->r_offset,
|
input_section, relocation->r_offset,
|
||||||
(info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
|
(info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
|
||||||
|| ELF_ST_VISIBILITY (h->root.other))))
|
|| ELF_ST_VISIBILITY (h->root.other)))
|
||||||
|
{
|
||||||
return bfd_reloc_undefined;
|
return bfd_reloc_undefined;
|
||||||
symbol = 0;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return bfd_reloc_notsupported;
|
||||||
}
|
}
|
||||||
|
|
||||||
target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
|
target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
2009-12-10 Maciej W. Rozycki <macro@codesourcery.com>
|
||||||
|
|
||||||
|
* 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.
|
||||||
|
|
||||||
2009-12-09 Daniel Jacobowitz <dan@codesourcery.com>
|
2009-12-09 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
|
|
||||||
* ld-arm/arm-elf.exp (armeabitests): Add farcall-data.
|
* ld-arm/arm-elf.exp (armeabitests): Add farcall-data.
|
||||||
|
@ -520,3 +520,5 @@ if { $linux_gnu } {
|
|||||||
"got-vers-1.so"}
|
"got-vers-1.so"}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
run_dump_test "undefined"
|
||||||
|
4
ld/testsuite/ld-mips-elf/undefined.d
Normal file
4
ld/testsuite/ld-mips-elf/undefined.d
Normal file
@ -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
|
24
ld/testsuite/ld-mips-elf/undefined.s
Normal file
24
ld/testsuite/ld-mips-elf/undefined.s
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user