Do not remove the symbol's value from the addend for fixups against local

symbols in SEC_MERGE sections - it was not added in, in the first place.
This commit is contained in:
Nick Clifton 2001-11-14 14:07:26 +00:00
parent 58a3581362
commit 42ebd756d5
2 changed files with 28 additions and 15 deletions

View file

@ -1,3 +1,9 @@
2001-11-14 Nick Clifton <nickc@cambridge.redhat.com>
* config/tc-sparc.c (md_apply_fix3): Do not remove the symbol's
value from the addend for fixups against local symbols in
SEC_MERGE sections - it was not added in, in the first place.
2001-11-11 Timothy Wall <twall@alum.mit.edu>
* write.c (relax_segment): Convert symbol address into an octet

View file

@ -2905,22 +2905,29 @@ md_apply_fix3 (fixP, value, segment)
don't want to include the value of an externally visible symbol. */
if (fixP->fx_addsy != NULL)
{
if (symbol_used_in_reloc_p (fixP->fx_addsy)
&& (S_IS_EXTERNAL (fixP->fx_addsy)
|| S_IS_WEAK (fixP->fx_addsy)
|| (S_GET_SEGMENT (fixP->fx_addsy)->flags & SEC_MERGE)
symbolS * sym = fixP->fx_addsy;
segT seg = S_GET_SEGMENT (sym);
if (symbol_used_in_reloc_p (sym)
&& (S_IS_EXTERNAL (sym)
|| S_IS_WEAK (sym)
#if 0 /* Although fixups against local symbols in SEC_MERGE sections
should be treated as if they were against external symbols
write.c:fixup_segment() will not have included the value of
the symbol under these particular cicumstances. */
|| (seg->flags & SEC_MERGE)
#endif
|| (sparc_pic_code && ! fixP->fx_pcrel)
|| (S_GET_SEGMENT (fixP->fx_addsy) != segment
&& ((bfd_get_section_flags (stdoutput,
S_GET_SEGMENT (fixP->fx_addsy))
& SEC_LINK_ONCE) != 0
|| strncmp (segment_name (S_GET_SEGMENT (fixP->fx_addsy)),
".gnu.linkonce",
sizeof ".gnu.linkonce" - 1) == 0)))
&& S_GET_SEGMENT (fixP->fx_addsy) != absolute_section
&& S_GET_SEGMENT (fixP->fx_addsy) != undefined_section
&& ! bfd_is_com_section (S_GET_SEGMENT (fixP->fx_addsy)))
fixP->fx_addnumber -= S_GET_VALUE (fixP->fx_addsy);
|| (seg != segment
&& (((bfd_get_section_flags (stdoutput, seg) & SEC_LINK_ONCE) != 0)
|| (strncmp (segment_name (seg),
".gnu.linkonce",
sizeof ".gnu.linkonce" - 1) == 0))))
&& seg != absolute_section
&& seg != undefined_section
&& ! bfd_is_com_section (seg))
fixP->fx_addnumber -= S_GET_VALUE (sym);
return 1;
}
#endif