Don't munge yacc's #line directives
authorPatrick Palka <patrick@parcs.ath.cx>
Sun, 30 Nov 2014 16:47:16 +0000 (11:47 -0500)
committerPatrick Palka <patrick@parcs.ath.cx>
Fri, 9 Jan 2015 22:19:06 +0000 (17:19 -0500)
The #line directives within GDB's autogenerated yacc files (e.g.
c-exp.c) are being incorrectly munged, causing these directives to refer
to nonexistent source files, e.g.

 #line 36 "/home/patrick/binutils-gdb/gdb//home/patrick/binutils-gdb/gdb/c-exp.y"

as opposed to

  #line 36 "/home/patrick/binutils-gdb/gdb/c-exp.y"

The munging happens due to a sed expression added by commit 954d8cae
whose intended purpose[1] was to work around the fact that ylwrap emitted #line
directives without any directory information, e.g.

  #line 36 "c-exp.y"

So the sed expression was meant to munge such directives to refer to
absolute paths instead.  But the behavior of ylwrap was changed some
years ago[2] to emit absolute paths within #line directives.  And when
our local copy of ylwrap was synced by commit e30465112, the sed
expression in question became unnecessary, and indeed harmful.

This patch removes the now-obsolete sed expression.  The emitted #line
directives are now correct without it.

gdb/ChangeLog:

* Makefile.in (.y.c): Don't munge yacc's #line
directives.

[1]: https://sourceware.org/ml/gdb-patches/2010-11/msg00265.html
[2]: http://git.savannah.gnu.org/cgit/automake.git/commit/lib/ylwrap?id=b6359a5f3

gdb/ChangeLog
gdb/Makefile.in

index 2e9816a427933e2dbebbaff130cb7a5e5b759992..c830053934e2763e09c754f6124bf1c5e9b6ba8e 100644 (file)
@@ -1,3 +1,8 @@
+2015-01-09  Patrick Palka  <patrick@parcs.ath.cx>
+
+       * Makefile.in (.y.c): Don't munge yacc's #line
+       directives.
+
 2015-01-09  Patrick Palka  <patrick@parcs.ath.cx>
 
        * utils.c (defaulted_query): Rewrite to use gdb_readline_wrapper
index 5dae3e6b40e22f8ff67b1d801905259b259a6b73..86ab1be15d39de441220210fba8f342cdab59ee8 100644 (file)
@@ -1858,7 +1858,6 @@ po/$(PACKAGE).pot: force
             -e 's/\([ \t;,(]\)free\([ \t]*[&(),]\)/\1xfree\2/g' \
             -e 's/\([ \t;,(]\)free$$/\1xfree/g' \
             -e '/^#line.*y.tab.c/d' \
-            -e "s/^\(#line.*\)`basename $<`/\1`echo $<|sed 's/\//\\\\\//g'`/" \
          < $@.tmp > $@
        rm -f $@.tmp
 .l.c: