This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[arm] Resolve R_ARM_PREL31


The R_ARM_PREL31 relocation should be resolved to the PTL entry for external 
symbols, and not written into shared objects. Patch below implements this.

Tested with cross to arm-none-eabi, and light testing on arm-none-symbianelf.
Ok?

2004-11-11  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.

Index: bfd/elf32-arm.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-arm.c,v
retrieving revision 1.5
diff -u -p -r1.5 elf32-arm.c
--- bfd/elf32-arm.c 9 Nov 2004 16:50:38 -0000 1.5
+++ bfd/elf32-arm.c 12 Nov 2004 01:49:40 -0000
@@ -2288,11 +2288,7 @@ elf32_arm_final_link_relocate (reloc_how
   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_how
   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_how
 #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)
  {
@@ -3197,6 +3191,7 @@ elf32_arm_relocate_section (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:
@@ -3888,9 +3883,6 @@ elf32_arm_gc_sweep_hook (bfd *          
   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;
@@ -4039,6 +4031,7 @@ elf32_arm_check_relocs (bfd *abfd, struc
 #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;
@@ -4153,9 +4146,6 @@ elf32_arm_check_relocs (bfd *abfd, struc
     }
 
   if (r_type == R_ARM_ABS32
-#ifndef OLD_ARM_ABI
-      || r_type == R_ARM_PREL31
-#endif
       || r_type == R_ARM_REL32)
     p->count += 1;
        }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]