mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-12-15 08:08:55 +00:00
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>
|
||||
|
||||
* 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 */
|
||||
symbol = 0;
|
||||
}
|
||||
else if ((*info->callbacks->undefined_symbol)
|
||||
(info, h->root.root.root.string, input_bfd,
|
||||
input_section, relocation->r_offset,
|
||||
(info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
|
||||
|| ELF_ST_VISIBILITY (h->root.other)))
|
||||
{
|
||||
return bfd_reloc_undefined;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (! ((*info->callbacks->undefined_symbol)
|
||||
(info, h->root.root.root.string, input_bfd,
|
||||
input_section, relocation->r_offset,
|
||||
(info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
|
||||
|| ELF_ST_VISIBILITY (h->root.other))))
|
||||
return bfd_reloc_undefined;
|
||||
symbol = 0;
|
||||
return bfd_reloc_notsupported;
|
||||
}
|
||||
|
||||
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>
|
||||
|
||||
* ld-arm/arm-elf.exp (armeabitests): Add farcall-data.
|
||||
|
@ -520,3 +520,5 @@ if { $linux_gnu } {
|
||||
"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