aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2007-02-17 07:20:56 +0000
committerAlan Modra <amodra@gmail.com>2007-02-17 07:20:56 +0000
commitb4b24b7937424e5ef89febf6b541248dc9f015be (patch)
treea9ec960b7698d17b3edd32c3c0db68195399ecc8
parent3669427c8eaf2004867e9594cc865a77575d1fbe (diff)
downloadgdb-b4b24b7937424e5ef89febf6b541248dc9f015be.zip
gdb-b4b24b7937424e5ef89febf6b541248dc9f015be.tar.gz
gdb-b4b24b7937424e5ef89febf6b541248dc9f015be.tar.bz2
* 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.
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/write.c89
2 files changed, 31 insertions, 65 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 9fe4e79..38faf7b 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -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
diff --git a/gas/write.c b/gas/write.c
index 1c93d43..07b9dd7 100644
--- a/gas/write.c
+++ b/gas/write.c
@@ -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;