* readelf.c (debug_apply_rela_addends): Clarify FIXME.
authorAlan Modra <amodra@gmail.com>
Wed, 31 Oct 2007 07:40:11 +0000 (07:40 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 31 Oct 2007 07:40:11 +0000 (07:40 +0000)
binutils/ChangeLog
binutils/readelf.c

index 2f50eff..abd9a96 100644 (file)
@@ -1,3 +1,7 @@
+2007-10-31  Alan Modra  <amodra@bigpond.net.au>
+
+       * readelf.c (debug_apply_rela_addends): Clarify FIXME.
+
 2007-10-29  Nick Clifton  <nickc@redhat.com>
 
        * readelf.c (is_32bit_abs_reloc): Add knowledge of reloc used by
index 724e5f0..9ae0779 100644 (file)
@@ -8242,14 +8242,13 @@ debug_apply_rela_addends (void *file,
              continue;
            }
 
-         if (is_32bit_pcrel_reloc (reloc_type))
-           /* FIXME: Not sure how to apply a pc-rel reloc yet.
-              I think that it ought to be:
-              (rp->r_addend + sym->st_value) - rp->r_offset
-              but this breaks GAS CFI tests...  */
-           byte_put (loc, (rp->r_addend + sym->st_value) /*- rp->r_offset*/, reloc_size);
-         else
-           byte_put (loc, rp->r_addend + sym->st_value, reloc_size);
+         /* FIXME.  We apply pcrel relocs as if they were absolute,
+            ie. without subtracting the pc.  This is to suit
+            display_debug_frames which does not add the pc even
+            though it ought to for DW_EH_PE_pcrel FDEs.  Removing
+            the hack in display_debug_frames will require that we
+            apply rel relocs too.  */
+         byte_put (loc, rp->r_addend + sym->st_value, reloc_size);
        }
 
       free (symtab);