OSDN Git Service

* config/tc-sh.c (sh_frob_section): Canonicalize pointers to local
authorDJ Delorie <dj@delorie.com>
Tue, 8 Aug 2006 17:21:04 +0000 (17:21 +0000)
committerDJ Delorie <dj@delorie.com>
Tue, 8 Aug 2006 17:21:04 +0000 (17:21 +0000)
vs full symbols so that we never have more than one pointer value
for any given symbol in our symbol table.

gas/ChangeLog
gas/config/tc-sh.c

index ce2e4fe..f4430b2 100644 (file)
@@ -1,3 +1,9 @@
+2006-08-08  DJ Delorie  <dj@redhat.com>
+
+       * config/tc-sh.c (sh_frob_section): Canonicalize pointers to local
+       vs full symbols so that we never have more than one pointer value
+       for any given symbol in our symbol table.
+
 2006-08-08  Sterling Augustine  <sterling@tensilica.com>
 
        * dwarf2dbg.c (out_debug_info): Add new parameter ranges_seg
index f33c1c5..1abbaad 100644 (file)
@@ -3318,6 +3318,21 @@ sh_frob_section (bfd *abfd ATTRIBUTE_UNUSED, segT sec,
   for (fix = seginfo->fix_root; fix != NULL; fix = fix->fx_next)
     {
       symbolS *sym;
+
+      sym = fix->fx_addsy;
+      /* Check for a local_symbol.  */
+      if (sym && sym->bsym == NULL)
+       {
+         struct local_symbol *ls = (struct local_symbol *)sym;
+         /* See if it's been converted.  If so, canonicalize.  */
+         if (local_symbol_converted_p (ls))
+           fix->fx_addsy = local_symbol_get_real_symbol (ls);
+       }
+    }
+
+  for (fix = seginfo->fix_root; fix != NULL; fix = fix->fx_next)
+    {
+      symbolS *sym;
       bfd_vma val;
       fixS *fscan;
       struct sh_count_relocs info;