* 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 2f50eff62eba268d843824b2ae4d6247590a4a97..abd9a96d872b6714369ecb519e7ad60d0f505436 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 724e5f077d7e530a6f7afe1e220e5afe5c6a6abd..9ae077935ea9cfcf6842ab5f9da3586477b398b7 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);