* config/tc-sh.c (sh_frob_section): Canonicalize pointers to local
authorDJ Delorie <dj@redhat.com>
Tue, 8 Aug 2006 17:21:04 +0000 (17:21 +0000)
committerDJ Delorie <dj@redhat.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 ce2e4fef8e2a707e967d3bd36132f73557fcd17a..f4430b2c3d41520117205b0404f058f31025ab31 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 f33c1c5611cf8ae27e10ae654f6f156bb9af0cd1..1abbaad09fba3ac2fbf9917d454c2282bfb9793e 100644 (file)
@@ -3315,6 +3315,21 @@ sh_frob_section (bfd *abfd ATTRIBUTE_UNUSED, segT sec,
   if (seginfo == NULL)
     return;
 
+  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;