PR ld/10144

* elfxx-mips.c (_bfd_mips_elf_check_relocs)
	[R_MIPS_32, R_MIPS_REL32, R_MIPS_64]: Ignore relocs from
	SEC_DEBUGGING sections.
This commit is contained in:
Maciej W. Rozycki 2010-11-04 18:00:54 +00:00
parent dd7f9124e9
commit 21d790b943
2 changed files with 26 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2010-11-04 Maciej W. Rozycki <macro@codesourcery.com>
PR ld/10144
* elfxx-mips.c (_bfd_mips_elf_check_relocs)
[R_MIPS_32, R_MIPS_REL32, R_MIPS_64]: Ignore relocs from
SEC_DEBUGGING sections.
2010-11-04 Tristan Gingold <gingold@adacore.com>
* vms-lib.c (vms_write_index): Fix thinko: reverse the loop.

View File

@ -7583,6 +7583,25 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
elf_hash_table (info)->dynobj = dynobj = abfd;
break;
}
/* For sections that are not SEC_ALLOC a copy reloc would be
output if possible (implying questionable semantics for
read-only data objects) or otherwise the final link would
fail as ld.so will not process them and could not therefore
handle any outstanding dynamic relocations.
For such sections that are also SEC_DEBUGGING, we can avoid
these problems by simply ignoring any relocs as these
sections have a predefined use and we know it is safe to do
so.
This is needed in cases such as a global symbol definition
in a shared library causing a common symbol from an object
file to be converted to an undefined reference. If that
happens, then all the relocations against this symbol from
SEC_DEBUGGING sections in the object file will resolve to
nil. */
if ((sec->flags & SEC_DEBUGGING) != 0)
break;
/* Fall through. */
default: