diff options
author | DJ Delorie <dj@redhat.com> | 2006-08-08 17:21:04 +0000 |
---|---|---|
committer | DJ Delorie <dj@redhat.com> | 2006-08-08 17:21:04 +0000 |
commit | e14e52f868afc2266920640776b7e54bc214ee91 (patch) | |
tree | 2c44ec945e069a092cbfbde83cd520c3810c731e /gas/config/tc-sh.c | |
parent | e6f2cbf536d07211d8ff0d47c2f961a216f046f8 (diff) | |
download | gdb-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.
Diffstat (limited to 'gas/config/tc-sh.c')
-rw-r--r-- | gas/config/tc-sh.c | 15 |
1 files changed, 15 insertions, 0 deletions
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; |