This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: gas bug
- To: Jakob Eriksson <jakob dot eriksson at realfast dot se>
- Subject: Re: gas bug
- From: Alan Modra <amodra at bigpond dot net dot au>
- Date: Fri, 5 Oct 2001 20:13:37 +0930
- Cc: bug-gnu-utils at gnu dot org, binutils at sourceware dot cygnus dot com
- References: <3BBCAAB8.91713735@realfast.se>
On Thu, Oct 04, 2001 at 08:30:17PM +0200, Jakob Eriksson wrote:
>
> Found a bug in GAS!
Yep.
> This assembler was configured for a target of `m68k-coff'.
non-BFD assembler..
> jen@tazzy:/tmp/Accelerator$ m68k-coff-as --register-prefix-optional -al
> -m68332 -mno-68881 -I ./inc ./src/acc_csw.src -o acc_csw.obj --mri
> Segmentation fault
This will fix your particular problem.
* subseg.c (subseg_text_p): Return 0 for absolute section.
And this patch will catch similar problems.
* read.c (do_align): If in absolute section, warn about and
ignore non-zero fill pattern.
gas shouldn't be trying to create frags in the absolute section.
--
Alan Modra
Index: gas/subsegs.c
===================================================================
RCS file: /cvs/src/src/gas/subsegs.c,v
retrieving revision 1.9
diff -u -p -r1.9 subsegs.c
--- subsegs.c 2001/08/01 01:44:25 1.9
+++ subsegs.c 2001/10/05 10:22:22
@@ -587,7 +587,7 @@ subseg_text_p (sec)
#else /* ! BFD_ASSEMBLER */
const char * const *p;
- if (sec == data_section || sec == bss_section)
+ if (sec == data_section || sec == bss_section || sec == absolute_section)
return 0;
for (p = nontext_section_names; *p != NULL; ++p)
Index: gas/read.c
===================================================================
RCS file: /cvs/src/src/gas/read.c,v
retrieving revision 1.47
diff -u -p -r1.47 read.c
--- read.c 2001/09/19 05:33:19 1.47
+++ read.c 2001/10/05 10:22:22
@@ -1162,6 +1162,19 @@ do_align (n, fill, len, max)
int len;
int max;
{
+ if (now_seg == absolute_section)
+ {
+ if (fill != NULL)
+ while (len-- > 0)
+ if (*fill++ != '\0')
+ {
+ as_warn (_("ignoring fill value in absolute section"));
+ break;
+ }
+ fill = NULL;
+ len = 0;
+ }
+
#ifdef md_do_align
md_do_align (n, fill, len, max, just_record_alignment);
#endif