diff options
author | Paul Brook <paul@codesourcery.com> | 2004-11-13 13:38:15 +0000 |
---|---|---|
committer | Paul Brook <paul@codesourcery.com> | 2004-11-13 13:38:15 +0000 |
commit | ee06dc0791b85c6931865f762397356279676c94 (patch) | |
tree | af74eefc576bca3c0080fd75ab9d46a5877ee3e4 | |
parent | 01e937bc69941fbe1cd289734fe7a718c4bc8174 (diff) | |
download | gdb-ee06dc0791b85c6931865f762397356279676c94.zip gdb-ee06dc0791b85c6931865f762397356279676c94.tar.gz gdb-ee06dc0791b85c6931865f762397356279676c94.tar.bz2 |
* bfd/elf32-arm.c (elf32_arm_final_link_relocate): Resolve
R_ARM_PREL31 relocations to PLT entries.
(elf32_arm_relocate_section, elf32_arm_gc_sweep_hook): Ditto.
(elf32_arm_check_relocs): Ditto.
-rw-r--r-- | bfd/ChangeLog | 7 | ||||
-rw-r--r-- | bfd/elf32-arm.c | 22 |
2 files changed, 13 insertions, 16 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index eb1b718..f016362 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2004-11-13 Paul Brook <paul@codesourcery.com> + + * bfd/elf32-arm.c (elf32_arm_final_link_relocate): Resolve + R_ARM_PREL31 relocations to PLT entries. + (elf32_arm_relocate_section, elf32_arm_gc_sweep_hook): Ditto. + (elf32_arm_check_relocs): Ditto. + 2004-11-12 Bob Wilson <bob.wilson@acm.org> * xtensa-isa.c (xtensa_interface_class_id): New. diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index a7c3246..00be3b3 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -2288,11 +2288,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, will use the symbol's value, which may point to a PLT entry, but we don't need to handle that here. If we created a PLT entry, all branches in this object should go to it. */ - if ((r_type != R_ARM_ABS32 && r_type != R_ARM_REL32 -#ifndef OLD_ARM_ABI - && r_type != R_ARM_PREL31 -#endif - ) + if ((r_type != R_ARM_ABS32 && r_type != R_ARM_REL32) && h != NULL && splt != NULL && h->plt.offset != (bfd_vma) -1) @@ -2314,11 +2310,8 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, into the output file to be resolved at run time. */ if (info->shared && (input_section->flags & SEC_ALLOC) - && ((r_type != R_ARM_REL32 -#ifndef OLD_ARM_ABI - && r_type != R_ARM_PREL31 -#endif - ) || !SYMBOL_CALLS_LOCAL (info, h)) + && (r_type != R_ARM_REL32 + || !SYMBOL_CALLS_LOCAL (info, h)) && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) @@ -2326,6 +2319,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, #ifndef OLD_ARM_ABI && r_type != R_ARM_CALL && r_type != R_ARM_JUMP24 + && r_type != R_ARM_PREL31 #endif && r_type != R_ARM_PLT32) { @@ -3200,6 +3194,7 @@ elf32_arm_relocate_section (bfd * output_bfd, #ifndef OLD_ARM_ABI case R_ARM_CALL: case R_ARM_JUMP24: + case R_ARM_PREL31: #endif case R_ARM_ABS32: case R_ARM_THM_PC22: @@ -3891,9 +3886,6 @@ elf32_arm_gc_sweep_hook (bfd * abfd ATTRIBUTE_UNUSED, h->plt.refcount -= 1; if (r_type == R_ARM_ABS32 -#ifndef OLD_ARM_ABI - || r_type == R_ARM_PREL31 -#endif || r_type == R_ARM_REL32) { eh = (struct elf32_arm_link_hash_entry *) h; @@ -4042,6 +4034,7 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, #ifndef OLD_ARM_ABI || r_type == R_ARM_CALL || r_type == R_ARM_JUMP24 + || r_type == R_ARM_PREL31 #endif || r_type == R_ARM_PLT32) h->needs_plt = 1; @@ -4156,9 +4149,6 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, } if (r_type == R_ARM_ABS32 -#ifndef OLD_ARM_ABI - || r_type == R_ARM_PREL31 -#endif || r_type == R_ARM_REL32) p->count += 1; } |