PR23691, gas .y files vs. automatic make dependencies

Alan Modra amodra@gmail.com
Tue Feb 23 23:55:39 GMT 2021


A number of targets, bfin, rl78, rx, can show odd failures when
bfd/reloc.c changes BFD_RELOC_* enum values, if recompiling over a
build dir with existing objects.  The problem is caused by
bfin-parse.o and similar not being recompiled and so using stale
BFD_RELOC_* values.  This isn't fixed by making bfin-parse.c depend on
bfd/reloc.c, which isn't necessary anyway.  bfin-parse.o should have
been recompiled due to bfd/bfd.h changing when extracted bfd/reloc.c
BFD_RELOC_* values change, but that wasn't happening.  The problem is
that automake generates a makefile that loads gas/config/.deps/
dependency file for objects with corresponding sources mentioned in
EXTRA_as_new_SOURCES.  Unless we want to mess around generating
explicit dependencies, I think that mean moving some object files to
the build gas/config/.  This patch does that, removing some hacks for
m68k-parse.c that should no longer be necessary, and removes some
rules that catered to old bison producing code that triggers compiler
warnings.

	PR 23691
	* Makefile.am (TARGET_CPU_CFILES): Split off config/xtensa-relax.c..
	(TARGET_CPU_HFILES): ..and config/xtensa-relax.h..
	(TARGET_EXTRA_FILES): ..to here.  Add config/bfin-lex-wrapper.c,
	and use alongside TARGET_CPU_CFILES.
	(EXTRA_DIST): Update location of generated .c files.
	(config/m68k-parse.c): New rule replacing m68k-parse.c rule.
	(config/bfin-parse.c, config/rl78-parse.cm config/rx-parse.c),
	(config/bfin-lex.c, config/bfin-lex-wrapper.@OBJEXT@): Similarly.
	(itbl-lex-wrapper.@OBJEXT@): Simplify to just the needed
	dependencies.
	(itbl-parse.@OBJEXT@): Delete rule using NO_WERROR.
	(itbl-parse.c, itbl-parse.h): Tidy.
	* config/bfin-lex-wrapper.c: Include config/bfin-lex.c.
	* config/bfin-lex.l: Include config/bfin-parse.h.
	* configure.ac (extra_objects): Move object files corresponding
	to .y and .l files now in config/ to config/.
	* Makefile.in: Regenerate.
	* configure: Regenerate.
	* po/POTFILES.in: Regenerate.

diff --git a/gas/Makefile.am b/gas/Makefile.am
index 513e6289cb..fdce608d64 100644
--- a/gas/Makefile.am
+++ b/gas/Makefile.am
@@ -200,8 +200,7 @@ TARGET_CPU_CFILES = \
 	config/tc-xgate.c \
 	config/tc-xtensa.c \
 	config/tc-z80.c \
-	config/tc-z8k.c \
-	config/xtensa-relax.c
+	config/tc-z8k.c
 
 TARGET_CPU_HFILES = \
 	config/tc-aarch64.h \
@@ -275,7 +274,11 @@ TARGET_CPU_HFILES = \
 	config/tc-xgate.h \
 	config/tc-xtensa.h \
 	config/tc-z80.h \
-	config/tc-z8k.h \
+	config/tc-z8k.h
+
+TARGET_EXTRA_FILES = \
+	config/bfin-lex-wrapper.c \
+	config/xtensa-relax.c \
 	config/xtensa-relax.h
 
 # OBJ files in config
@@ -356,7 +359,7 @@ CONFIG_ATOF_CFILES = \
 POTFILES = $(MULTI_CFILES) $(CONFIG_ATOF_CFILES) \
 	$(TARG_ENV_HFILES) $(TARG_ENV_CFILES) $(OBJ_FORMAT_HFILES) \
 	$(OBJ_FORMAT_CFILES) $(TARGET_CPU_HFILES) $(TARGET_CPU_CFILES) \
-	$(HFILES) $(CFILES)
+	$(TARGET_EXTRA_FILES) $(HFILES) $(CFILES)
 po/POTFILES.in: @MAINT@ Makefile
 	for f in $(POTFILES); do echo $$f; done | LC_ALL=C sort > tmp \
 	  && mv tmp $(srcdir)/po/POTFILES.in
@@ -367,10 +370,10 @@ noinst_PROGRAMS = as-new
 noinst_SCRIPTS = $(GDBINIT)
 EXTRA_SCRIPTS = .gdbinit
 
-EXTRA_DIST = m68k-parse.c itbl-parse.c itbl-parse.h itbl-lex.c \
-	bfin-parse.c bfin-parse.h bfin-lex.c \
-	rl78-parse.c rl78-parse.h \
-	rx-parse.c rx-parse.h
+EXTRA_DIST = config/m68k-parse.c itbl-parse.c itbl-parse.h itbl-lex.c \
+	config/bfin-parse.c config/bfin-parse.h config/bfin-lex.c \
+	config/rl78-parse.c config/rl78-parse.h \
+	config/rx-parse.c config/rx-parse.h
 
 diststuff: $(EXTRA_DIST) info
 
@@ -405,8 +408,9 @@ as_new_LDADD = $(TARG_CPU_O) $(OBJ_FORMAT_O) $(ATOF_TARG_O) \
 as_new_DEPENDENCIES = $(TARG_CPU_O) $(OBJ_FORMAT_O) $(ATOF_TARG_O) \
 	$(extra_objects) $(GASLIBS) $(LIBINTL_DEP)
 EXTRA_as_new_SOURCES = $(CFILES) $(HFILES) $(TARGET_CPU_CFILES) \
-	$(TARGET_CPU_HFILES) $(OBJ_FORMAT_CFILES) $(OBJ_FORMAT_HFILES) \
-	$(TARG_ENV_CFILES) $(CONFIG_ATOF_CFILES) $(MULTI_CFILES)
+	$(TARGET_CPU_HFILES) $(TARGET_EXTRA_FILES) $(TARG_ENV_CFILES) \
+	$(OBJ_FORMAT_CFILES) $(OBJ_FORMAT_HFILES) \
+	$(CONFIG_ATOF_CFILES) $(MULTI_CFILES)
 
 EXPECT = expect
 RUNTEST = runtest
@@ -436,119 +440,45 @@ development.exp: $(BFDDIR)/development.sh
 	$(EGREP) "(development|experimental)=" $(BFDDIR)/development.sh  \
 	  | $(AWK) -F= '{ print "set " $$1 " " $$2 }' > $@
 
-# The m68k operand parser.
-
 EXTRA_as_new_SOURCES += config/m68k-parse.y
+config/m68k-parse.c: $(srcdir)/config/m68k-parse.y
+	$(SHELL) $(YLWRAP) $(srcdir)/config/m68k-parse.y y.tab.c $@ -- $(YACCCOMPILE)
+config/m68k-parse.h: config/m68k-parse.c
+	@true
 
-# If m68k-parse.y is in a different directory, then ylwrap will use an
-# absolute path when it invokes yacc, which will cause yacc to put the
-# absolute path into the generated file.  That's a pain when it comes
-# to generating snapshots, because it introduces spurious diffs.
-# Since when we make the snapshots $(srcdir) = ".", we check for that
-# case and handle it differently.  This means that anybody who
-# configures with $(srcdir) = "." will have to set their path in the
-# debugger if they want to debug m68k-parse.y.  This is bad, but on
-# the other hand it's good that people who use the prebuilt
-# m68k-parse.c don't get a spurious absolute path.
-m68k-parse.c: $(srcdir)/config/m68k-parse.y
-	f=$(srcdir)/config/m68k-parse.y; \
-	if [ $$f = "./config/m68k-parse.y" ]; then \
-	  ln -s config/m68k-parse.y . > /dev/null 2>/dev/null || \
-	   ln config/m68k-parse.y . > /dev/null 2>/dev/null || \
-	   cp config/m68k-parse.y . >/dev/null 2>/dev/null; \
-	  f=m68k-parse.y; \
-	else true; fi; \
-	$(SHELL) $(YLWRAP) $$f y.tab.c m68k-parse.c -- $(YACCCOMPILE); \
-	if [ $$f = "m68k-parse.y" ]; then \
-	  rm -f m68k-parse.y; \
-	else true; fi
-# Disable -Werror, if it has been enabled, since old versions of bison/
-# yacc will produce working code which contain compile time warnings.
-m68k-parse.@OBJEXT@: m68k-parse.c
-if am__fastdepCC
-	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f m68k-parse.c || echo $(srcdir)/`m68k-parse.c $(NO_WERROR)
-	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-else
-if AMDEP
-	source='m68k-parse.c' object='$@' libtool=no @AMDEPBACKSLASH@
-	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-endif
-	$(COMPILE) -c `test -f m68k-parse.c || echo $(srcdir)/`m68k-parse.c $(NO_WERROR)
-endif
+EXTRA_as_new_SOURCES += config/bfin-parse.y
+config/bfin-parse.c: $(srcdir)/config/bfin-parse.y
+	$(SHELL) $(YLWRAP) $(srcdir)/config/bfin-parse.y y.tab.c $@ y.tab.h config/bfin-parse.h -- $(YACCCOMPILE) -d ;
+config/bfin-parse.h: config/bfin-parse.c
+	@true
 
-# Don't let the .y.h rule clobber m68k-parse.h.
-m68k-parse.h: ; @true
-$(srcdir)/config/m68k-parse.h: ; @true
+EXTRA_as_new_SOURCES += config/bfin-lex.l
+config/bfin-lex.c: $(srcdir)/config/bfin-lex.l
+	$(SHELL) $(YLWRAP) $(srcdir)/config/bfin-lex.l lex.yy.c $@ -- $(LEXCOMPILE)
 
-EXTRA_as_new_SOURCES += config/bfin-parse.y
-bfin-parse.c: $(srcdir)/config/bfin-parse.y $(srcdir)/../bfd/reloc.c
-	$(SHELL) $(YLWRAP) $(srcdir)/config/bfin-parse.y y.tab.c bfin-parse.c y.tab.h bfin-parse.h -- $(YACCCOMPILE) -d ;
-bfin-parse.h: bfin-parse.c
-bfin-parse.h: ; @true
-$(srcdir)/config/bfin-parse.h: ; @true
-
-bfin-lex.c: $(srcdir)/config/bfin-lex.l
-	$(SHELL) $(YLWRAP) $(srcdir)/config/bfin-lex.l lex.yy.c bfin-lex.c -- $(LEXCOMPILE)
-bfin-lex-wrapper.@OBJEXT@: $(srcdir)/config/bfin-lex-wrapper.c bfin-lex.c bfin-parse.h $(srcdir)/config/bfin-defs.h
-if am__fastdepCC
-	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(srcdir)/config/bfin-lex-wrapper.c
-	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-else
-if AMDEP
-	source='bfin-lex-wrapper.c' object='$@' libtool=no @AMDEPBACKSLASH@
-	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-endif
-	$(COMPILE) -c $(srcdir)/config/bfin-lex-wrapper.c
-endif
+config/bfin-lex-wrapper.@OBJEXT@: config/bfin-lex.c config/bfin-parse.h
 
 EXTRA_as_new_SOURCES += config/rl78-parse.y
-rl78-parse.c: $(srcdir)/config/rl78-parse.y $(srcdir)/../bfd/reloc.c
-	$(SHELL) $(YLWRAP) $(srcdir)/config/rl78-parse.y y.tab.c rl78-parse.c y.tab.h rl78-parse.h -- $(YACCCOMPILE) -d ;
-rl78-parse.h: rl78-parse.c
-rl78-defs.h: ; @true
-$(srcdir)/config/rl78-defs.h: ; @true
+config/rl78-parse.c: $(srcdir)/config/rl78-parse.y
+	$(SHELL) $(YLWRAP) $(srcdir)/config/rl78-parse.y y.tab.c $@ y.tab.h config/rl78-parse.h -- $(YACCCOMPILE) -d ;
+config/rl78-parse.h: config/rl78-parse.c
+	@true
 
 EXTRA_as_new_SOURCES += config/rx-parse.y
-rx-parse.c: $(srcdir)/config/rx-parse.y $(srcdir)/../bfd/reloc.c
-	$(SHELL) $(YLWRAP) $(srcdir)/config/rx-parse.y y.tab.c rx-parse.c y.tab.h rx-parse.h -- $(YACCCOMPILE) -d ;
-rx-parse.h: rx-parse.c
-rx-defs.h: ; @true
-$(srcdir)/config/rx-defs.h: ; @true
-
-# The instruction table specification lexical analyzer and parser.
+config/rx-parse.c: $(srcdir)/config/rx-parse.y
+	$(SHELL) $(YLWRAP) $(srcdir)/config/rx-parse.y y.tab.c $@ y.tab.h config/rx-parse.h -- $(YACCCOMPILE) -d ;
+config/rx-parse.h: config/rx-parse.c
+	@true
 
-# Disable -Werror, if it has been enabled, since old versions of bison/
-# yacc will produce working code which contain compile time warnings.
-itbl-lex-wrapper.@OBJEXT@: itbl-lex-wrapper.c itbl-lex.c itbl-parse.h
-if am__fastdepCC
-	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(srcdir)/itbl-lex-wrapper.c $(NO_WERROR)
-	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-else
-if AMDEP
-	source='itbl-lex-wrapper.c' object='$@' libtool=no @AMDEPBACKSLASH@
-	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-endif
-	$(COMPILE) -c $(srcdir)/itbl-lex-wrapper.c $(NO_WERROR)
-endif
+# The mips instruction table specification lexical analyzer and parser.
 
-# Disable -Werror, if it has been enabled, since old versions of bison/
-# yacc will produce working code which contain compile time warnings.
-itbl-parse.@OBJEXT@: itbl-parse.c
-if am__fastdepCC
-	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f itbl-parse.c || echo $(srcdir)/`itbl-parse.c $(NO_WERROR)
-	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-else
-if AMDEP
-	source='itbl-parse.c' object='$@' libtool=no @AMDEPBACKSLASH@
-	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-endif
-	$(COMPILE) -c `test -f itbl-parse.c || echo $(srcdir)/`itbl-parse.c $(NO_WERROR)
-endif
+itbl-lex-wrapper.@OBJEXT@: itbl-lex.c itbl-parse.h
 
 itbl-parse.c: $(srcdir)/itbl-parse.y
-	$(SHELL) $(YLWRAP) $(srcdir)/itbl-parse.y y.tab.c itbl-parse.c y.tab.h itbl-parse.h -- $(YACCCOMPILE) -d
+	$(SHELL) $(YLWRAP) $(srcdir)/itbl-parse.y y.tab.c $@ y.tab.h itbl-parse.h -- $(YACCCOMPILE) -d
 
-itbl-parse.h: itbl-parse.c ; @true
+itbl-parse.h: itbl-parse.c
+	@true
 
 itbl-ops.@OBJEXT@: itbl-parse.h
 
diff --git a/gas/config/bfin-lex-wrapper.c b/gas/config/bfin-lex-wrapper.c
index 292d843734..010c37cbba 100644
--- a/gas/config/bfin-lex-wrapper.c
+++ b/gas/config/bfin-lex-wrapper.c
@@ -22,4 +22,4 @@
    that config.h can set the correct values for various things.  */
 
 #include "sysdep.h"
-#include "bfin-lex.c"
+#include "config/bfin-lex.c"
diff --git a/gas/config/bfin-lex.l b/gas/config/bfin-lex.l
index ec3d1feb04..be72a18e93 100644
--- a/gas/config/bfin-lex.l
+++ b/gas/config/bfin-lex.l
@@ -23,7 +23,7 @@
 
 #include "as.h"
 #include "bfin-defs.h"
-#include "bfin-parse.h"
+#include "config/bfin-parse.h"
 
 static long parse_int (char **end);
 static int parse_halfreg (Register *r, int cl, char *hr);
diff --git a/gas/configure.ac b/gas/configure.ac
index 3abba43231..6a96bb70d7 100644
--- a/gas/configure.ac
+++ b/gas/configure.ac
@@ -429,7 +429,7 @@ changequote([,])dnl
     case ${cpu_type} in
 
       bfin)
-	for f in bfin-parse.o bfin-lex-wrapper.o; do
+	for f in config/bfin-parse.o config/bfin-lex-wrapper.o; do
 	  case " $extra_objects " in
 	    *" $f "*) ;;
 	    *) extra_objects="$extra_objects $f" ;;
@@ -454,7 +454,7 @@ changequote([,])dnl
 	using_cgen=yes
 	;;
       m68k)
-	f=m68k-parse.o
+	f=config/m68k-parse.o
 	case " $extra_objects " in
 	  *" $f "*) ;;
 	  *) extra_objects="$extra_objects $f" ;;
@@ -614,7 +614,7 @@ changequote([,])dnl
         ;;
 
       rl78)
-	f=rl78-parse.o
+	f=config/rl78-parse.o
 	case " $extra_objects " in
 	  *" $f "*) ;;
 	  *) extra_objects="$extra_objects $f" ;;
@@ -622,7 +622,7 @@ changequote([,])dnl
 	;;
 
       rx)
-	f=rx-parse.o
+	f=config/rx-parse.o
 	case " $extra_objects " in
 	  *" $f "*) ;;
 	  *) extra_objects="$extra_objects $f" ;;

-- 
Alan Modra
Australia Development Lab, IBM


More information about the Binutils mailing list