On Tue, Sep 05, 2017 at 01:27:31PM +0800, Michael W. Bombardieri wrote: > Hello, > > Updated version of awk (Dec 20, 2012) [1] has a simplification > in fpecatch() function. I tried to test this to compare the > error output.
Oops, I failed to notice it was a local change from revision 1.9. http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/awk/lib.c.diff?r1=1.8&r2=1.9&sortby=date&f=h > > Old version: > $ /usr/bin/awk '{}' > *** receive SIGFPE via kill(1) *** > floating point exception > source line number 1 > > New version: > $ ./awk '{}' > *** receive SIGFPE via kill(1) *** > awk: floating point exception 8 > source line number 1 > > And with debugging flag set, the core dump still happens as expected... > > Old version: > $ awk -d9 '{}' > awk version 20110810 > program = |{}| > setsymtab set 0x7ac4f180: n=0 s="0" f=0 t=17 > *** SNIP *** > lex token 123 > lex token 59 > lex token 125 > errorflag=0 > RS=< > >, FS=< >, ARGC=1, FILENAME= > argno=1, file=|| > *** receive SIGFPE via kill(1) *** > floating point exception > source line number 1 > Abort trap (core dumped) > > New version: > $ ./awk -d9 '{}' > awk version 20110810 > program = |{}| > setsymtab set 0x80e58840: n=0 s="0" f=0 t=17 > *** SNIP *** > lex token 123 > lex token 59 > lex token 125 > errorflag=0 > RS=< > >, FS=< >, ARGC=1, FILENAME= > argno=1, file=|| > *** receive SIGFPE via kill(1) *** > awk: floating point exception 8 > source line number 1 > Abort trap (core dumped) > > No significant difference for this trivial test. > All I notice is the error now starts with command name. > > - Michael > > > [1] http://www.cs.princeton.edu/~bwk/btl.mirror/awk.tar.gz > > Index: lib.c > =================================================================== > RCS file: /cvs/src/usr.bin/awk/lib.c,v > retrieving revision 1.22 > diff -u -p -u -r1.22 lib.c > --- lib.c 12 Apr 2016 19:43:38 -0000 1.22 > +++ lib.c 5 Sep 2017 04:59:58 -0000 > @@ -529,39 +529,9 @@ void SYNTAX(const char *fmt, ...) > eprint(); > } > > -void fpecatch(int sig) > +void fpecatch(int n) > { > - extern Node *curnode; > - char buf[1024]; > - > - snprintf(buf, sizeof buf, "floating point exception\n"); > - write(STDERR_FILENO, buf, strlen(buf)); > - > - if (compile_time != 2 && NR && *NR > 0) { > - snprintf(buf, sizeof buf, " input record number %d", (int) > (*FNR)); > - write(STDERR_FILENO, buf, strlen(buf)); > - > - if (strcmp(*FILENAME, "-") != 0) { > - snprintf(buf, sizeof buf, ", file %s", *FILENAME); > - write(STDERR_FILENO, buf, strlen(buf)); > - } > - write(STDERR_FILENO, "\n", 1); > - } > - if (compile_time != 2 && curnode) { > - snprintf(buf, sizeof buf, " source line number %d", > curnode->lineno); > - write(STDERR_FILENO, buf, strlen(buf)); > - } else if (compile_time != 2 && lineno) { > - snprintf(buf, sizeof buf, " source line number %d", lineno); > - write(STDERR_FILENO, buf, strlen(buf)); > - } > - if (compile_time == 1 && cursource() != NULL) { > - snprintf(buf, sizeof buf, " source file %s", cursource()); > - write(STDERR_FILENO, buf, strlen(buf)); > - } > - write(STDERR_FILENO, "\n", 1); > - if (dbg > 1) /* core dump if serious debugging on */ > - abort(); > - _exit(1); > + FATAL("floating point exception %d", n); > } > > extern int bracecnt, brackcnt, parencnt;
