aboutsummaryrefslogtreecommitdiff
path: root/gas/write.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2001-05-26 12:45:15 +0000
committerAlan Modra <amodra@gmail.com>2001-05-26 12:45:15 +0000
commit54d3cad90dac4603234944b6b28adbc7aec33f6a (patch)
treeefd03ed0ad68ca41f31672a934e69cd095017648 /gas/write.c
parentb41be06e3b079256b5bbdfbdb98eb0a6eec6a6a7 (diff)
downloadgdb-54d3cad90dac4603234944b6b28adbc7aec33f6a.zip
gdb-54d3cad90dac4603234944b6b28adbc7aec33f6a.tar.gz
gdb-54d3cad90dac4603234944b6b28adbc7aec33f6a.tar.bz2
* 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.
Diffstat (limited to 'gas/write.c')
-rw-r--r--gas/write.c36
1 files changed, 21 insertions, 15 deletions
diff --git a/gas/write.c b/gas/write.c
index 1880e7e..4ca8a25 100644
--- a/gas/write.c
+++ b/gas/write.c
@@ -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: