aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2006-08-08 17:21:04 +0000
committerDJ Delorie <dj@redhat.com>2006-08-08 17:21:04 +0000
commite14e52f868afc2266920640776b7e54bc214ee91 (patch)
tree2c44ec945e069a092cbfbde83cd520c3810c731e
parente6f2cbf536d07211d8ff0d47c2f961a216f046f8 (diff)
downloadgdb-e14e52f868afc2266920640776b7e54bc214ee91.zip
gdb-e14e52f868afc2266920640776b7e54bc214ee91.tar.gz
gdb-e14e52f868afc2266920640776b7e54bc214ee91.tar.bz2
* 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.
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/config/tc-sh.c15
2 files changed, 21 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index ce2e4fe..f4430b2 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -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
diff --git a/gas/config/tc-sh.c b/gas/config/tc-sh.c
index f33c1c5..1abbaad 100644
--- a/gas/config/tc-sh.c
+++ b/gas/config/tc-sh.c
@@ -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;