From bdf61915fc102bc07c12aa450376d7402bd427b4 Mon Sep 17 00:00:00 2001 From: Patrick Palka Date: Thu, 9 Jan 2014 22:55:50 -0500 Subject: [PATCH] Have regdat.sh always rewrite the output register file The rules for generating the output register files look like: amd64.c : $(srcdir)/../regformats/i386/amd64.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/amd64.dat amd64.c According to this rule, if regdat.sh is newer than amd64.c, then regdat.sh shall be invoked on amd64.dat. According to regdat.sh, if the script determines that the output file amd64.c has not changed, then it will not overwrite the existing output file. This means that a subsequent invocation of make will trigger the above rule again as regdat.sh will be perpetually newer than amd64.c. This then shows up in the make output like so: /bin/bash ./../regformats/regdat.sh ./../regformats/i386/amd64-linux.dat amd64-linux.c amd64-linux.c unchanged. /bin/bash ./../regformats/regdat.sh ./../regformats/i386/amd64-avx-linux.dat amd64-avx-linux.c amd64-avx-linux.c unchanged. ... To fix this pathological behavior, it suffices to have regdat.sh unconditionally rewrite the output register file. On my machine, which has a regdat.sh file that is newer than some of the input register files, this change speeds up every invocation of make under gdb/ by about 5 seconds. --- gdb/ChangeLog | 4 ++++ gdb/regformats/regdat.sh | 14 +------------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 18ed4d3c2de..16ed4f0a024 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2014-01-13 Patrick Palka + + * regformats/regdat.sh: Always rewrite the register file. + 2014-01-13 Pedro Alves * Makefile.in (CHECK_HEADERS): New variable. diff --git a/gdb/regformats/regdat.sh b/gdb/regformats/regdat.sh index 0cf458811af..fabc910f082 100755 --- a/gdb/regformats/regdat.sh +++ b/gdb/regformats/regdat.sh @@ -18,18 +18,6 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -move_if_change () -{ - file=$1 - if test -r ${file} && cmp -s "${file}" new-"${file}" - then - echo "${file} unchanged." 1>&2 - else - mv new-"${file}" "${file}" - echo "${file} updated." 1>&2 - fi -} - # Format of the input files read="type entry" @@ -202,4 +190,4 @@ EOF # close things off exec 1>&2 -move_if_change $2 +mv -- "new-$2" "$2" -- 2.30.2