aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/write.c90
2 files changed, 59 insertions, 36 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 9ca75fe..567d6f6 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+Mon May 18 09:31:43 1998 Michael Meissner <meissner@cygnus.com>
+
+ * write.c (fixup_segment): Improve error message for sym1-sym2
+ errors when sym1 is in a different segment from sym2.
+
start-sanitize-m32rx
Thu May 14 13:49:39 1998 Nick Clifton <nickc@cygnus.com>
diff --git a/gas/write.c b/gas/write.c
index 7df2d3c..4880441 100644
--- a/gas/write.c
+++ b/gas/write.c
@@ -1,5 +1,5 @@
/* write.c - emit .o file
- Copyright (C) 1986, 87, 90, 91, 92, 93, 94, 95, 96, 1997
+ Copyright (C) 1986, 87, 90, 91, 92, 93, 94, 95, 96, 97, 1998
Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
@@ -166,7 +166,7 @@ fix_new_internal (frag, where, size, add_symbol, sub_symbol, offset, pcrel,
/* We've made fx_size a narrow field; check that it's wide enough. */
if (fixP->fx_size != size)
{
- as_bad ("field fx_size too small to hold %d", size);
+ as_bad (_("field fx_size too small to hold %d"), size);
abort ();
}
fixP->fx_addsy = add_symbol;
@@ -298,7 +298,7 @@ fix_new_exp (frag, where, size, exp, pcrel, r_type)
#if defined(TC_RVA_RELOC)
r_type = TC_RVA_RELOC;
#else
- as_fatal("rva not supported");
+ as_fatal(_("rva not supported"));
#endif
#endif
break;
@@ -363,7 +363,7 @@ record_alignment (seg, align)
if (seg == absolute_section)
return;
#ifdef BFD_ASSEMBLER
- if (align > bfd_get_section_alignment (stdoutput, seg))
+ if ((unsigned int) align > bfd_get_section_alignment (stdoutput, seg))
bfd_set_section_alignment (stdoutput, seg, align);
#else
if (align > section_alignment[(int) seg])
@@ -493,7 +493,7 @@ cvt_frag_to_fill (headersP, sec, fragP)
- fragP->fr_fix) / fragP->fr_var;
if (fragP->fr_offset < 0)
{
- as_bad ("attempt to .org/.space backwards? (%ld)",
+ as_bad (_("attempt to .org/.space backwards? (%ld)"),
(long) fragP->fr_offset);
}
fragP->fr_type = rs_fill;
@@ -518,6 +518,10 @@ cvt_frag_to_fill (headersP, sec, fragP)
}
break;
+ case rs_cfa:
+ eh_frame_convert_frag (fragP);
+ break;
+
case rs_machine_dependent:
#ifdef BFD_ASSEMBLER
md_convert_frag (stdoutput, sec, fragP);
@@ -525,7 +529,9 @@ cvt_frag_to_fill (headersP, sec, fragP)
md_convert_frag (headersP, sec, fragP);
#endif
- assert (fragP->fr_next == NULL || (fragP->fr_next->fr_address - fragP->fr_address == fragP->fr_fix));
+ assert (fragP->fr_next == NULL
+ || ((offsetT) (fragP->fr_next->fr_address - fragP->fr_address)
+ == fragP->fr_fix));
/*
* After md_convert_frag, we make the frag into a ".space 0".
@@ -697,8 +703,6 @@ adjust_reloc_syms (abfd, sec, xxx)
symbolS *sym;
asection *symsec;
- reduce_fixup:
-
#ifdef DEBUG5
fprintf (stderr, "\n\nadjusting fixup:\n");
print_fixup (fixp);
@@ -944,10 +948,10 @@ write_relocs (abfd, sec, xxx)
case bfd_reloc_ok:
break;
case bfd_reloc_overflow:
- as_bad_where (fixp->fx_file, fixp->fx_line, "relocation overflow");
+ as_bad_where (fixp->fx_file, fixp->fx_line, _("relocation overflow"));
break;
default:
- as_fatal ("%s:%u: bad return from bfd_install_relocation",
+ as_fatal (_("%s:%u: bad return from bfd_install_relocation"),
fixp->fx_file, fixp->fx_line);
}
relocs[i++] = reloc;
@@ -992,7 +996,7 @@ write_relocs (abfd, sec, xxx)
if (fixp->fx_where + fixp->fx_size
> fixp->fx_frag->fr_fix + fixp->fx_frag->fr_offset)
as_bad_where (fixp->fx_file, fixp->fx_line,
- "internal error: fixup not contained within frag");
+ _("internal error: fixup not contained within frag"));
for (j = 0; reloc[j]; j++)
{
s = bfd_install_relocation (stdoutput, reloc[j],
@@ -1005,10 +1009,10 @@ write_relocs (abfd, sec, xxx)
break;
case bfd_reloc_overflow:
as_bad_where (fixp->fx_file, fixp->fx_line,
- "relocation overflow");
+ _("relocation overflow"));
break;
default:
- as_fatal ("%s:%u: bad return from bfd_install_relocation",
+ as_fatal (_("%s:%u: bad return from bfd_install_relocation"),
fixp->fx_file, fixp->fx_line);
}
}
@@ -1091,7 +1095,7 @@ write_contents (abfd, sec, xxx)
if (x == false)
{
bfd_perror (stdoutput->filename);
- as_perror ("FATAL: Can't write %s", stdoutput->filename);
+ as_perror (_("FATAL: Can't write %s"), stdoutput->filename);
exit (EXIT_FAILURE);
}
offset += f->fr_fix;
@@ -1115,7 +1119,7 @@ write_contents (abfd, sec, xxx)
if (x == false)
{
bfd_perror (stdoutput->filename);
- as_perror ("FATAL: Can't write %s", stdoutput->filename);
+ as_perror (_("FATAL: Can't write %s"), stdoutput->filename);
exit (EXIT_FAILURE);
}
offset += fill_size;
@@ -1146,7 +1150,7 @@ write_contents (abfd, sec, xxx)
buf, (file_ptr) offset,
(bfd_size_type) n_per_buf * fill_size);
if (x != true)
- as_fatal ("Cannot write to output file.");
+ as_fatal (_("Cannot write to output file."));
offset += n_per_buf * fill_size;
}
}
@@ -1372,14 +1376,14 @@ write_object_file ()
if (flag_always_generate_output)
{
if (n_warns || n_errs)
- as_warn ("%d error%s, %d warning%s, generating bad object file.\n",
+ as_warn (_("%d error%s, %d warning%s, generating bad object file.\n"),
n_errs, n_errs == 1 ? "" : "s",
n_warns, n_warns == 1 ? "" : "s");
}
else
{
if (n_errs)
- as_fatal ("%d error%s, %d warning%s, no object file generated.\n",
+ as_fatal (_("%d error%s, %d warning%s, no object file generated.\n"),
n_errs, n_errs == 1 ? "" : "s",
n_warns, n_warns == 1 ? "" : "s");
}
@@ -1763,7 +1767,7 @@ write_object_file ()
if (symp->sy_mri_common)
{
if (S_IS_EXTERNAL (symp))
- as_bad ("%s: global symbols not supported in common sections",
+ as_bad (_("%s: global symbols not supported in common sections"),
S_GET_NAME (symp));
symbol_remove (symp, &symbol_rootP, &symbol_lastP);
continue;
@@ -1776,7 +1780,7 @@ write_object_file ()
/* They only differ if `name' is a fb or dollar local
label name. */
if (name2 != name && ! S_IS_DEFINED (symp))
- as_bad ("local label %s is not defined", name2);
+ as_bad (_("local label %s is not defined"), name2);
}
/* Do it again, because adjust_reloc_syms might introduce
@@ -1851,7 +1855,7 @@ write_object_file ()
/* Make sure we really got a value for the symbol. */
if (! symp->sy_resolved)
{
- as_bad ("can't resolve value for symbol \"%s\"",
+ as_bad (_("can't resolve value for symbol \"%s\""),
S_GET_NAME (symp));
symp->sy_resolved = 1;
}
@@ -2095,7 +2099,7 @@ relax_segment (segment_frag_root, segment)
if (offset % fragP->fr_var != 0)
{
- as_bad ("alignment padding (%lu bytes) not a multiple of %ld",
+ as_bad (_("alignment padding (%lu bytes) not a multiple of %ld"),
(unsigned long) offset, (long) fragP->fr_var);
offset -= (offset % fragP->fr_var);
}
@@ -2125,6 +2129,10 @@ relax_segment (segment_frag_root, segment)
address += fragP->fr_offset = 1;
break;
+ case rs_cfa:
+ address += eh_frame_estimate_size_before_relax (fragP);
+ break;
+
default:
BAD_CASE (fragP->fr_type);
break;
@@ -2197,7 +2205,7 @@ relax_segment (segment_frag_root, segment)
{
char buf[50];
sprint_value (buf, (addressT) lie->addnum);
- as_warn (".word %s-%s+%s didn't fit",
+ as_warn (_(".word %s-%s+%s didn't fit"),
S_GET_NAME (lie->add),
S_GET_NAME (lie->sub),
buf);
@@ -2274,7 +2282,7 @@ relax_segment (segment_frag_root, segment)
/* Growth may be negative, but variable part of frag
cannot have fewer than 0 chars. That is, we can't
.org backwards. */
- as_bad ("attempt to .org backwards ignored");
+ as_bad (_("attempt to .org backwards ignored"));
growth = 0;
}
@@ -2290,11 +2298,11 @@ relax_segment (segment_frag_root, segment)
|| S_IS_COMMON (symbolP)
|| ! S_IS_DEFINED (symbolP))
as_bad_where (fragP->fr_file, fragP->fr_line,
- ".space specifies non-absolute value");
+ _(".space specifies non-absolute value"));
fragP->fr_symbol = 0;
if (growth < 0)
{
- as_warn (".space or .fill with negative value, ignored");
+ as_warn (_(".space or .fill with negative value, ignored"));
growth = 0;
}
}
@@ -2326,6 +2334,10 @@ relax_segment (segment_frag_root, segment)
}
break;
+ case rs_cfa:
+ growth = eh_frame_relax_frag (fragP);
+ break;
+
default:
BAD_CASE (fragP->fr_type);
break;
@@ -2458,7 +2470,7 @@ fixup_segment (fixP, this_segment_type)
else
bad_sub_reloc:
as_bad_where (fixP->fx_file, fixP->fx_line,
- "Negative of non-absolute symbol %s",
+ _("Negative of non-absolute symbol %s"),
S_GET_NAME (sub_symbolP));
}
else if (S_GET_SEGMENT (sub_symbolP) == add_symbol_segment
@@ -2472,7 +2484,7 @@ fixup_segment (fixP, this_segment_type)
as the target of a call instruction. */
if (fixP->fx_tcbit)
as_bad_where (fixP->fx_file, fixP->fx_line,
- "callj to difference of 2 symbols");
+ _("callj to difference of 2 symbols"));
#endif /* TC_I960 */
add_number += S_GET_VALUE (add_symbolP) -
S_GET_VALUE (sub_symbolP);
@@ -2538,9 +2550,12 @@ fixup_segment (fixP, this_segment_type)
char buf[50];
sprint_value (buf, fragP->fr_address + where);
as_bad_where (fixP->fx_file, fixP->fx_line,
- "Can't emit reloc {- %s-seg symbol \"%s\"} @ file address %s.",
+ _("Can't emit reloc symbol \"%s\" {%s segment} - symbol \"%s\" {%s segment} at file address %s."),
+ S_GET_NAME (add_symbolP),
+ segment_name (S_GET_SEGMENT (add_symbolP)),
+ S_GET_NAME (sub_symbolP),
segment_name (S_GET_SEGMENT (sub_symbolP)),
- S_GET_NAME (sub_symbolP), buf);
+ buf);
}
}
}
@@ -2613,7 +2628,7 @@ fixup_segment (fixP, this_segment_type)
* relocation.
*/
as_bad_where (fixP->fx_file, fixP->fx_line,
- "can't use COBR format with external label");
+ _("can't use COBR format with external label"));
fixP->fx_addsy = NULL;
fixP->fx_done = 1;
continue;
@@ -2659,7 +2674,7 @@ fixup_segment (fixP, this_segment_type)
if (!fixP->fx_bit_fixP && !fixP->fx_no_overflow && size > 0)
{
- if (size < sizeof (valueT))
+ if ((size_t) size < sizeof (valueT))
{
valueT mask, hibit;
@@ -2687,7 +2702,7 @@ fixup_segment (fixP, this_segment_type)
else
sprintf (buf2, "%ld", (long) add_number);
as_bad_where (fixP->fx_file, fixP->fx_line,
- "Value of %s too large for field of %d bytes at %s",
+ _("Value of %s too large for field of %d bytes at %s"),
buf2, size, buf);
} /* generic error checking */
}
@@ -2699,7 +2714,7 @@ fixup_segment (fixP, this_segment_type)
&& size == 2
&& add_number > 0x7fff)
as_bad_where (fixP->fx_file, fixP->fx_line,
- "Signed .word overflow; switch may be too large; %ld at 0x%lx",
+ _("Signed .word overflow; switch may be too large; %ld at 0x%lx"),
(long) add_number,
(unsigned long) (fragP->fr_address + where));
#endif
@@ -2746,7 +2761,7 @@ number_to_chars_bigendian (buf, val, n)
valueT val;
int n;
{
- if (n > sizeof (val)|| n <= 0)
+ if ((size_t) n > sizeof (val) || n <= 0)
abort ();
while (n--)
{
@@ -2761,7 +2776,7 @@ number_to_chars_littleendian (buf, val, n)
valueT val;
int n;
{
- if (n > sizeof (val) || n <= 0)
+ if ((size_t) n > sizeof (val) || n <= 0)
abort ();
while (n--)
{
@@ -2826,6 +2841,9 @@ print_fixup (fixp)
fprintf (stderr, ">");
}
fprintf (stderr, "\n");
+#ifdef TC_FIX_DATA_PRINT
+ TC_FIX_DATA_PRINT (stderr, fixp);
+#endif
}
/* end of write.c */