This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
gas patch: Check TC_EOL_IN_INSN in input-scrub.c
- From: Bernd Schmidt <bernds_cb1 at t-online dot de>
- To: binutils at sources dot redhat dot com
- Date: Thu, 05 Oct 2006 16:32:59 +0200
- Subject: gas patch: Check TC_EOL_IN_INSN in input-scrub.c
The Blackfin port tries to use TC_EOL_IN_INSN to check for multi-line
parallel instructions that have one of the following forms:
R0 = R0 +|- R1 ||
R1.L = [I0] ||
NOP;
or
R0 = R0 +|- R1
|| R1.L = [I0]
|| NOP;
Sometimes this fails because we're not looking at a large enough buffer,
and parts of the insn get cut off. We've fixed this in our local
sources with the following patch - is this ok for mainline? Any
suggestions for a better approach?
Bernd
* input-scrub.c (input_scrub_next_buffer): Use TC_EOL_IN_INSN
in addition to testing for '\n'.
Index: gas/input-scrub.c
===================================================================
RCS file: /cvsroot/gcc3/binutils/binutils-2.17/gas/input-scrub.c,v
retrieving revision 1.1
retrieving revision 1.3
diff -c -p -r1.1 -r1.3
*** gas/input-scrub.c 28 Jun 2006 15:54:14 -0000 1.1
--- gas/input-scrub.c 31 Jul 2006 13:47:25 -0000 1.3
*************** input_scrub_next_buffer (char **bufp)
*** 342,349 ****
if (limit)
{
register char *p; /* Find last newline. */
!
! for (p = limit - 1; *p != '\n'; --p)
;
++p;
--- 342,350 ----
if (limit)
{
register char *p; /* Find last newline. */
! /* Terminate the buffer to avoid confusing TC_EOL_IN_INSN. */
! *limit = '\0';
! for (p = limit - 1; *p != '\n' || TC_EOL_IN_INSN (p); --p)
;
++p;
*************** input_scrub_next_buffer (char **bufp)
*** 369,375 ****
return NULL;
}
! for (p = limit - 1; *p != '\n'; --p)
;
++p;
}
--- 370,378 ----
return NULL;
}
! /* Terminate the buffer to avoid confusing TC_EOL_IN_INSN. */
! *limit = '\0';
! for (p = limit - 1; *p != '\n' || TC_EOL_IN_INSN (p); --p)
;
++p;
}