* write.c: White space fixes.

(fixup_segment): Move symbol_mri_common_p adjustments..
	(write_relocs): ..and symbol_equated_reloc_p adjustments..
	(adjust_reloc_syms): ..to here.
This commit is contained in:
Alan Modra 2007-02-17 07:20:56 +00:00
parent 3669427c8e
commit b4b24b7937
2 changed files with 31 additions and 65 deletions

View file

@ -1,3 +1,10 @@
2007-02-17 Alan Modra <amodra@bigpond.net.au>
* write.c: White space fixes.
(fixup_segment): Move symbol_mri_common_p adjustments..
(write_relocs): ..and symbol_equated_reloc_p adjustments..
(adjust_reloc_syms): ..to here.
2007-02-16 Alan Modra <amodra@bigpond.net.au>
* subsegs.c (subseg_change, subseg_get): Use xcalloc rather than

View file

@ -661,17 +661,21 @@ adjust_reloc_syms (bfd *abfd ATTRIBUTE_UNUSED,
/* If this symbol is equated to an undefined or common symbol,
convert the fixup to being against that symbol. */
if (symbol_equated_reloc_p (sym)
|| S_IS_WEAKREFR (sym))
while (symbol_equated_reloc_p (sym)
|| S_IS_WEAKREFR (sym))
{
symbolS *newsym = symbol_get_value_expression (sym)->X_add_symbol;
if (sym == newsym)
break;
fixp->fx_offset += symbol_get_value_expression (sym)->X_add_number;
sym = symbol_get_value_expression (sym)->X_add_symbol;
fixp->fx_addsy = sym;
fixp->fx_addsy = newsym;
sym = newsym;
}
if (symbol_mri_common_p (sym))
{
/* These symbols are handled specially in fixup_segment. */
fixp->fx_offset += S_GET_VALUE (sym);
fixp->fx_addsy = symbol_get_value_expression (sym)->X_add_symbol;
continue;
}
@ -700,14 +704,14 @@ adjust_reloc_syms (bfd *abfd ATTRIBUTE_UNUSED,
if (bfd_is_abs_section (symsec))
{
/* The fixup_segment routine normally will not use this
symbol in a relocation. */
symbol in a relocation. */
continue;
}
/* Don't try to reduce relocs which refer to non-local symbols
in .linkonce sections. It can lead to confusion when a
debugging section refers to a .linkonce section. I hope
this will always be correct. */
in .linkonce sections. It can lead to confusion when a
debugging section refers to a .linkonce section. I hope
this will always be correct. */
if (symsec != sec && ! S_IS_LOCAL (sym))
{
if ((symsec->flags & SEC_LINK_ONCE) != 0
@ -808,15 +812,6 @@ fixup_segment (fixS *fixP, segT this_segment)
#endif
add_number = fixP->fx_offset;
if (fixP->fx_addsy != NULL
&& symbol_mri_common_p (fixP->fx_addsy))
{
add_number += S_GET_VALUE (fixP->fx_addsy);
fixP->fx_offset = add_number;
fixP->fx_addsy
= symbol_get_value_expression (fixP->fx_addsy)->X_add_symbol;
}
if (fixP->fx_addsy != NULL)
add_symbol_segment = S_GET_SEGMENT (fixP->fx_addsy);
@ -1030,24 +1025,6 @@ write_relocs (bfd *abfd, asection *sec, void *xxx ATTRIBUTE_UNUSED)
continue;
}
/* If this is an undefined symbol which was equated to another
symbol, then generate the reloc against the latter symbol
rather than the former. */
sym = fixp->fx_addsy;
while (symbol_equated_reloc_p (sym))
{
symbolS *n;
/* We must avoid looping, as that can occur with a badly
written program. */
n = symbol_get_value_expression (sym)->X_add_symbol;
if (n == sym)
break;
fixp->fx_offset += symbol_get_value_expression (sym)->X_add_number;
sym = n;
}
fixp->fx_addsy = sym;
reloc = tc_gen_reloc (sec, fixp);
if (!reloc)
{
@ -1103,24 +1080,6 @@ write_relocs (bfd *abfd, asection *sec, void *xxx ATTRIBUTE_UNUSED)
continue;
}
/* If this is an undefined symbol which was equated to another
symbol, then generate the reloc against the latter symbol
rather than the former. */
sym = fixp->fx_addsy;
while (symbol_equated_reloc_p (sym))
{
symbolS *n;
/* We must avoid looping, as that can occur with a badly
written program. */
n = symbol_get_value_expression (sym)->X_add_symbol;
if (n == sym)
break;
fixp->fx_offset += symbol_get_value_expression (sym)->X_add_number;
sym = n;
}
fixp->fx_addsy = sym;
reloc = tc_gen_reloc (sec, fixp);
for (j = 0; reloc[j]; j++)
@ -1700,7 +1659,7 @@ write_object_file (void)
resolve_symbol_value (symp);
/* Skip symbols which were equated to undefined or common
symbols. */
symbols. */
if (symbol_equated_reloc_p (symp)
|| S_IS_WEAKREFR (symp))
{
@ -2041,11 +2000,11 @@ relax_segment (struct frag *segment_frag_root, segT segment, int pass)
depending upon the location of a symbol which is in turn moved by
the growing frag. eg:
foo = .
.org foo+16
foo = .
foo = .
.org foo+16
foo = .
So we dictate that this algorithm can be at most O2. */
So we dictate that this algorithm can be at most O2. */
max_iterations = frag_count * frag_count;
/* Check for overflow. */
if (max_iterations < frag_count)
@ -2168,11 +2127,11 @@ relax_segment (struct frag *segment_frag_root, segT segment, int pass)
if (symbolP)
{
/* Convert from an actual address to an octet offset
into the section. Here it is assumed that the
section's VMA is zero, and can omit subtracting it
from the symbol's value to get the address offset. */
know (S_GET_SEGMENT (symbolP)->vma == 0);
/* Convert from an actual address to an octet offset
into the section. Here it is assumed that the
section's VMA is zero, and can omit subtracting it
from the symbol's value to get the address offset. */
know (S_GET_SEGMENT (symbolP)->vma == 0);
target += S_GET_VALUE (symbolP) * OCTETS_PER_BYTE;
}
@ -2208,7 +2167,7 @@ relax_segment (struct frag *segment_frag_root, segT segment, int pass)
_("attempt to move .org backwards"));
/* We've issued an error message. Change the
frag to avoid cascading errors. */
frag to avoid cascading errors. */
fragP->fr_type = rs_align;
fragP->fr_subtype = 0;
fragP->fr_offset = 0;