Subject: bin/12287: m4 attaches EOF to output files
To: None <gnats-bugs@gnats.netbsd.org>
From: None <wiz@netbsd.org>
List: netbsd-bugs
Date: 02/26/2001 14:25:31
>Number:         12287
>Category:       bin
>Synopsis:       m4 attaches EOF to output files
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    bin-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Feb 26 05:15:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     Thomas Klausner
>Release:        NetBSD-current of 2001-02-25
>Organization:
	
>Environment:
	
System: NetBSD klausner.inria.fr 1.5S NetBSD 1.5S (KRAFTLACKEL) #1: Sun Feb 25 14:53:34 CET 2001 wiz@klausner.inria.fr:/usr/src/sys/arch/macppc/compile/KRAFTLACKEL macppc
Architecture: powerpc
Machine: macppc
>Description:
m4 attaches a EOF character (0xff) to the end of the output file.
>How-To-Repeat:
Try to build devel/gmp, which uses m4 to modify its assembler input files,
on macppc -- see the assembler fail, because of the trailing EOF in the
output file: 

tmp-add_n.s: Assembler messages:
tmp-add_n.s:0: Warning: end of file not at end of a line; newline inserted
tmp-add_n.s:68: Error: Rest of line ignored. First ignored character valued 0xff

The 0xff also appears on 1.4.2/i386, but the assembler doesn't seem to
mind it there.
>Fix:
It seems to happen in this block in usr.bin/m4/main.c, in the putbackeof:

	if (*m4wraps) { 		/* anything for rundown ??   */
		ilevel = 0;		/* in case m4wrap includes.. */
		bufbase = bp = buf;	/* use the entire buffer   */
		putbackeof();		/* eof is a must !!	     */
		pbstr(m4wraps); 	/* user-defined wrapup act   */
		macro();		/* last will and testament   */
	}

I'm not sure what the putbackeof in this block is supposed to do,
perhaps removing it is the right thing?

>Release-Note:
>Audit-Trail:
>Unformatted: