diff --git a/gas/ChangeLog b/gas/ChangeLog index d004819c40..48efc32fec 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2005-02-07 Hans-Peter Nilsson + + * write.c (write_object_file): Recognize warning-symbol construct + and skip object- and target- handling for the second symbol. + 2005-02-02 Jan Beulich * config/tc-ia64.c (dot_pred_rel): Update comment. Handle @-prefixed diff --git a/gas/write.c b/gas/write.c index 320e359fb9..f6a1c7e53b 100644 --- a/gas/write.c +++ b/gas/write.c @@ -1882,12 +1882,22 @@ write_object_file (void) if (symbol_rootP) { symbolS *symp; + bfd_boolean skip_next_symbol = FALSE; for (symp = symbol_rootP; symp; symp = symbol_next (symp)) { int punt = 0; const char *name; + if (skip_next_symbol) + { + /* Don't do anything besides moving the value of the + symbol from the GAS value-field to the BFD value-field. */ + symbol_get_bfdsym (symp)->value = S_GET_VALUE (symp); + skip_next_symbol = FALSE; + continue; + } + if (symbol_mri_common_p (symp)) { if (S_IS_EXTERNAL (symp)) @@ -1972,6 +1982,12 @@ write_object_file (void) /* Set the value into the BFD symbol. Up til now the value has only been kept in the gas symbolS struct. */ symbol_get_bfdsym (symp)->value = S_GET_VALUE (symp); + + /* A warning construct is a warning symbol followed by the + symbol warned about. Don't let anything object-format or + target-specific muck with it; it's ready for output. */ + if (symbol_get_bfdsym (symp)->flags & BSF_WARNING) + skip_next_symbol = TRUE; } }