* write.c (relax_segment <rs_space>): Calculate growth using
authorAlan Modra <amodra@gmail.com>
Sat, 26 May 2001 12:45:15 +0000 (12:45 +0000)
committerAlan Modra <amodra@gmail.com>
Sat, 26 May 2001 12:45:15 +0000 (12:45 +0000)
addresses before stretch.  Prevent repeated error messages.
From Peter Jakubek  <pjak@snafu.de>
Use as_bad_where and as_warn_where to pinpoint errors.

gas/ChangeLog
gas/write.c

index b122f20..ebc5b4a 100644 (file)
@@ -1,3 +1,10 @@
+2001-05-26  Alan Modra  <amodra@one.net.au>
+
+       * write.c (relax_segment <rs_space>): Calculate growth using
+       addresses before stretch.  Prevent repeated error messages.
+       From Peter Jakubek  <pjak@snafu.de>
+       Use as_bad_where and as_warn_where to pinpoint errors.
+
 2001-05-25  Alan Modra  <amodra@one.net.au>
 
        * symbols.c (resolve_symbol_value): Always set segment, even when
@@ -19,7 +26,8 @@
        * symbols.c (resolve_symbol_value): Clear sy_resolving before
        taking exit_dont_set_value.
 
-       * write.c (relax_segment): Don't zap fr_symbol when relaxing.
+       * write.c (relax_segment <rs_space>): Don't zap fr_symbol when
+       relaxing.
 
 2000-05-24  Tom Rix <trix@redhat.com>
 
index 1880e7e..4ca8a25 100644 (file)
@@ -2241,8 +2241,9 @@ relax_segment (segment_frag_root, segment)
 
            if (offset % fragP->fr_var != 0)
              {
-               as_bad (_("alignment padding (%lu bytes) not a multiple of %ld"),
-                       (unsigned long) offset, (long) fragP->fr_var);
+               as_bad_where (fragP->fr_file, fragP->fr_line,
+                             _("alignment padding (%lu bytes) not a multiple of %ld"),
+                             (unsigned long) offset, (long) fragP->fr_var);
                offset -= (offset % fragP->fr_var);
              }
 
@@ -2353,10 +2354,11 @@ relax_segment (segment_frag_root, segment)
                            {
                              char buf[50];
                              sprint_value (buf, (addressT) lie->addnum);
-                             as_warn (_(".word %s-%s+%s didn't fit"),
-                                      S_GET_NAME (lie->add),
-                                      S_GET_NAME (lie->sub),
-                                      buf);
+                             as_warn_where (fragP->fr_file, fragP->fr_line,
+                                            _(".word %s-%s+%s didn't fit"),
+                                            S_GET_NAME (lie->add),
+                                            S_GET_NAME (lie->sub),
+                                            buf);
                            }
                          lie->added = 1;
                          if (fragP->fr_subtype == 0)
@@ -2451,6 +2453,7 @@ relax_segment (segment_frag_root, segment)
                }
 
              case rs_space:
+               growth = 0;
                if (symbolP)
                  {
                    offsetT amount;
@@ -2459,19 +2462,22 @@ relax_segment (segment_frag_root, segment)
                    if (symbol_get_frag (symbolP) != &zero_address_frag
                        || S_IS_COMMON (symbolP)
                        || ! S_IS_DEFINED (symbolP))
-                     as_bad_where (fragP->fr_file, fragP->fr_line,
-                                   _(".space specifies non-absolute value"));
-                   if (amount < 0)
                      {
-                       as_warn (_(".space or .fill with negative value, ignored"));
-                       amount = 0;
+                       as_bad_where (fragP->fr_file, fragP->fr_line,
+                                     _(".space specifies non-absolute value"));
+                       /* Prevent repeat of this error message.  */
+                       fragP->fr_symbol = 0;
+                     }
+                   else if (amount < 0)
+                     {
+                       as_warn_where (fragP->fr_file, fragP->fr_line,
+                                      _(".space or .fill with negative value, ignored"));
                        fragP->fr_symbol = 0;
                      }
-                   growth = (fragP->fr_address + amount
-                             - fragP->fr_next->fr_address);
+                   else
+                     growth = (was_address + amount
+                               - fragP->fr_next->fr_address);
                  }
-               else
-                 growth = 0;
                break;
 
              case rs_machine_dependent: