* write.c (write_object_file): Recognize warning-symbol construct
authorHans-Peter Nilsson <hp@axis.com>
Mon, 7 Feb 2005 03:13:10 +0000 (03:13 +0000)
committerHans-Peter Nilsson <hp@axis.com>
Mon, 7 Feb 2005 03:13:10 +0000 (03:13 +0000)
and skip object- and target- handling for the second symbol.

gas/ChangeLog
gas/write.c

index d004819..48efc32 100644 (file)
@@ -1,3 +1,8 @@
+2005-02-07  Hans-Peter Nilsson  <hp@axis.com>
+
+       * write.c (write_object_file): Recognize warning-symbol construct
+       and skip object- and target- handling for the second symbol.
+
 2005-02-02  Jan Beulich  <jbeulich@novell.com>
 
        * config/tc-ia64.c (dot_pred_rel): Update comment. Handle @-prefixed
index 320e359..f6a1c7e 100644 (file)
@@ -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;
        }
     }