From: Simon Marchi Date: Thu, 8 Apr 2021 13:49:30 +0000 (-0400) Subject: sim: set ASAN_OPTIONS=detect_leaks=0 when running igen and opc2c X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2b8d134be46071f6869ed45ebbf521d91c93fb66;p=binutils-gdb.git sim: set ASAN_OPTIONS=detect_leaks=0 when running igen and opc2c The igen/dgen and opc2c tools leak their heap-allocated memory (on purpose) at program exit, which makes AddressSanitizer fail the tool execution. This breaks the build, as it makes the tool return a non-zero exit code. Fix that by disabling leak detection through the setting of that environment variable. I also changed the opc2c rules for m32c to go through a temporary file. What happened is that the failing opc2c would produce an incomplete file (probably because ASan exits the process before stdout is flushed). This meant that further make attempts didn't try to re-create the file, as it already existed. A "clean" was therefore necessary. This can also happen in regular builds if the user interrupts the build (^C) in the middle of the opc2c execution and tries to resume it. Going to a temporary file avoids this issue. sim/m32c/ChangeLog: * Makefile.in: Set ASAN_OPTIONS when running opc2c. sim/mips/ChangeLog: * Makefile.in: Set ASAN_OPTIONS when running igen. sim/mn10300/ChangeLog: * Makefile.in: Set ASAN_OPTIONS when running igen. sim/ppc/ChangeLog: * Makefile.in: Set ASAN_OPTIONS when running igen. sim/v850/ChangeLog: * Makefile.in: Set ASAN_OPTIONS when running igen. Change-Id: I00f21d4dc1aff0ef73471925d41ce7c23e83e082 --- diff --git a/sim/common/Make-common.in b/sim/common/Make-common.in index c8445bce59e..28f50abb220 100644 --- a/sim/common/Make-common.in +++ b/sim/common/Make-common.in @@ -111,6 +111,10 @@ COMPILE.post = -c -o $@ COMPILE = $(COMPILE.pre) $(ALL_CFLAGS) $(COMPILE.post) POSTCOMPILE = @true +# igen leaks memory, and therefore makes AddressSanitizer unhappy. Disable +# leak detection while running it. +IGEN = ASAN_OPTIONS=detect_leaks=0 ../igen/igen + # Each simulator's Makefile.in defines one or more of these variables # to override our settings as necessary. There is no need to define these # in the simulator's Makefile.in if one is using the default value. In fact diff --git a/sim/m32c/ChangeLog b/sim/m32c/ChangeLog index 31e3523bd53..458024c575f 100644 --- a/sim/m32c/ChangeLog +++ b/sim/m32c/ChangeLog @@ -1,3 +1,7 @@ +2021-04-08 Simon Marchi + + * Makefile.in: Set ASAN_OPTIONS when running opc2c. + 2021-04-07 Simon Marchi * opc2c.c (main): Remove vlist variable. diff --git a/sim/m32c/Makefile.in b/sim/m32c/Makefile.in index 6bc5c5b743d..186c9c063d3 100644 --- a/sim/m32c/Makefile.in +++ b/sim/m32c/Makefile.in @@ -46,11 +46,17 @@ LIBS = $B/bfd/libbfd.a $B/libiberty/libiberty.a arch = m32c +# opc2c leaks memory, and therefore makes AddressSanitizer unhappy. Disable +# leak detection while running it. +OPC2C = ASAN_OPTIONS=detect_leaks=0 ./opc2c + r8c.c : r8c.opc opc2c - ./opc2c -l r8c.out $(srcdir)/r8c.opc > r8c.c + $(OPC2C) -l r8c.out $(srcdir)/r8c.opc > r8c.c.tmp + mv r8c.c.tmp r8c.c m32c.c : m32c.opc opc2c - ./opc2c -l m32c.out $(srcdir)/m32c.opc > m32c.c + $(OPC2C) -l m32c.out $(srcdir)/m32c.opc > m32c.c.tmp + mv m32c.c.tmp m32c.c opc2c : opc2c.o safe-fgets.o $(LINK_FOR_BUILD) $^ diff --git a/sim/mips/ChangeLog b/sim/mips/ChangeLog index 8c2bc70336f..6d515f80486 100644 --- a/sim/mips/ChangeLog +++ b/sim/mips/ChangeLog @@ -1,3 +1,7 @@ +2021-04-08 Simon Marchi + + * Makefile.in: Set ASAN_OPTIONS when running igen. + 2021-04-04 Steve Ellcey Faraz Shahbazker diff --git a/sim/mips/Makefile.in b/sim/mips/Makefile.in index c66c6e83978..00906451c4c 100644 --- a/sim/mips/Makefile.in +++ b/sim/mips/Makefile.in @@ -149,7 +149,7 @@ BUILT_SRC_FROM_IGEN = \ $(BUILT_SRC_FROM_IGEN): tmp-igen tmp-igen: $(IGEN_INSN) $(IGEN_DC) ../igen/igen $(IGEN_INCLUDE) - ../igen/igen \ + $(IGEN) \ $(IGEN_TRACE) \ -I $(srcdir) \ -Werror \ @@ -220,7 +220,7 @@ BUILT_SRC_FROM_M16 = \ $(BUILT_SRC_FROM_M16): tmp-m16 tmp-m16: $(IGEN_INSN) $(IGEN_DC) ../igen/igen $(IGEN_INCLUDE) - ../igen/igen \ + $(IGEN) \ $(IGEN_TRACE) \ -I $(srcdir) \ -Werror \ @@ -255,7 +255,7 @@ tmp-m16: $(IGEN_INSN) $(IGEN_DC) ../igen/igen $(IGEN_INCLUDE) $(SHELL) $(srcdir)/../../move-if-change tmp-model.c m16_model.c $(SHELL) $(srcdir)/../../move-if-change tmp-support.h m16_support.h $(SHELL) $(srcdir)/../../move-if-change tmp-support.c m16_support.c - ../igen/igen \ + $(IGEN) \ $(IGEN_TRACE) \ -I $(srcdir) \ -Werror \ @@ -292,7 +292,7 @@ tmp-m16: $(IGEN_INSN) $(IGEN_DC) ../igen/igen $(IGEN_INCLUDE) $(SHELL) $(srcdir)/../../move-if-change tmp-model.c m32_model.c $(SHELL) $(srcdir)/../../move-if-change tmp-support.h m32_support.h $(SHELL) $(srcdir)/../../move-if-change tmp-support.c m32_support.c - ../igen/igen \ + $(IGEN) \ $(IGEN_TRACE) \ -I $(srcdir) \ -Werror \ @@ -346,7 +346,7 @@ BUILT_SRC_FROM_MICROMIPS = \ $(BUILT_SRC_FROM_MICROMIPS): tmp-micromips tmp-micromips: $(IGEN_INSN) $(IGEN_DC) ../igen/igen $(IGEN_INCLUDE) - ../igen/igen \ + $(IGEN) \ $(IGEN_TRACE) \ -I $(srcdir) \ -Werror \ @@ -391,7 +391,7 @@ tmp-micromips: $(IGEN_INSN) $(IGEN_DC) ../igen/igen $(IGEN_INCLUDE) micromips16_support.h $(SHELL) $(srcdir)/../../move-if-change tmp-support.c \ micromips16_support.c - ../igen/igen \ + $(IGEN) \ $(IGEN_TRACE) \ -I $(srcdir) \ -Werror \ @@ -436,7 +436,7 @@ tmp-micromips: $(IGEN_INSN) $(IGEN_DC) ../igen/igen $(IGEN_INCLUDE) micromips32_support.h $(SHELL) $(srcdir)/../../move-if-change tmp-support.c \ micromips32_support.c - ../igen/igen \ + $(IGEN) \ $(IGEN_TRACE) \ -I $(srcdir) \ -Werror \ @@ -481,7 +481,7 @@ tmp-micromips: $(IGEN_INSN) $(IGEN_DC) ../igen/igen $(IGEN_INCLUDE) micromips_m32_support.h $(SHELL) $(srcdir)/../../move-if-change tmp-support.c \ micromips_m32_support.c - ../igen/igen \ + $(IGEN) \ $(IGEN_TRACE) \ -I $(srcdir) \ -Werror \ @@ -521,7 +521,7 @@ tmp-mach-multi: $(IGEN_INSN) $(IGEN_DC) ../igen/igen $(IGEN_INCLUDE) m16*) e="-B 16 -H 15 -o $(M16_DC) -F 16" ;; \ *) e="-B 32 -H 31 -o $(IGEN_DC) -F $${f}" ;; \ esac; \ - ../igen/igen \ + $(IGEN) \ $(IGEN_TRACE) \ $${e} \ -I $(srcdir) \ @@ -574,7 +574,7 @@ tmp-mach-multi: $(IGEN_INSN) $(IGEN_DC) ../igen/igen $(IGEN_INCLUDE) done touch tmp-mach-multi tmp-itable-multi: $(IGEN_INSN) $(IGEN_DC) ../igen/igen $(IGEN_INCLUDE) - ../igen/igen \ + $(IGEN) \ $(IGEN_TRACE) \ -I $(srcdir) \ -Werror \ diff --git a/sim/mn10300/ChangeLog b/sim/mn10300/ChangeLog index 4a2d2b3f65e..9b3a9c58134 100644 --- a/sim/mn10300/ChangeLog +++ b/sim/mn10300/ChangeLog @@ -1,3 +1,7 @@ +2021-04-08 Simon Marchi + + * Makefile.in: Set ASAN_OPTIONS when running igen. + 2021-04-02 Mike Frysinger * Makefile.in (../igen/igen): Delete rule. diff --git a/sim/mn10300/Makefile.in b/sim/mn10300/Makefile.in index 6cdf9712882..773b7f9a0c5 100644 --- a/sim/mn10300/Makefile.in +++ b/sim/mn10300/Makefile.in @@ -69,7 +69,7 @@ IGEN_TRACE= # -G omit-line-numbers # -G trace-rule-selection -G trace-rule-rejec IGEN_INSN=$(srcdir)/mn10300.igen $(srcdir)/am33.igen $(srcdir)/am33-2.igen IGEN_DC=$(srcdir)/mn10300.dc tmp-igen: $(IGEN_INSN) $(IGEN_DC) ../igen/igen - ../igen/igen \ + $(IGEN) \ $(IGEN_TRACE) \ -G gen-direct-access \ -M mn10300,am33 -G gen-multi-sim=am33 \ diff --git a/sim/ppc/ChangeLog b/sim/ppc/ChangeLog index 539d3179ef8..910996fe346 100644 --- a/sim/ppc/ChangeLog +++ b/sim/ppc/ChangeLog @@ -1,3 +1,7 @@ +2021-04-08 Simon Marchi + + * Makefile.in: Set ASAN_OPTIONS when running igen. + 2021-04-03 Mike Frysinger * Makefile.in (install): Install as run-ppc when not the primary arch. diff --git a/sim/ppc/Makefile.in b/sim/ppc/Makefile.in index d2bd1d31775..d9d01985404 100644 --- a/sim/ppc/Makefile.in +++ b/sim/ppc/Makefile.in @@ -133,6 +133,12 @@ IGEN_FLAGS = \ $(IGEN_SMP) \ $(IGEN_LINE_NR) +# igen/dgen leak memory, and therefore makes AddressSanitizer unhappy. Disable +# leak detection while running them. + +IGEN = ASAN_OPTIONS=detect_leaks=0 ./igen +DGEN = ASAN_OPTIONS=detect_leaks=0 ./dgen + .NOEXPORT: MAKEOVERRIDES= @@ -666,7 +672,7 @@ ppc-config.h: $(CONFIG_FILE) tmp-dgen: dgen ppc-spr-table $(srcdir)/../../move-if-change - ./dgen $(DGEN_FLAGS) \ + $(DGEN) $(DGEN_FLAGS) \ -r $(srcdir)/ppc-spr-table \ -n spreg.h -hp tmp-spreg.h \ -n spreg.c -p tmp-spreg.c @@ -675,7 +681,7 @@ tmp-dgen: dgen ppc-spr-table $(srcdir)/../../move-if-change touch tmp-dgen tmp-igen: igen $(srcdir)/ppc-instructions $(srcdir)/altivec.igen $(srcdir)/e500.igen $(IGEN_OPCODE_RULES) $(srcdir)/../../move-if-change tmp-ld-decode tmp-ld-cache tmp-ld-insn tmp-filter - ./igen $(IGEN_FLAGS) \ + $(IGEN) $(IGEN_FLAGS) \ -o $(srcdir)/$(IGEN_OPCODE_RULES) \ -I $(srcdir) -i $(srcdir)/ppc-instructions \ -n icache.h -hc tmp-icache.h \ diff --git a/sim/v850/ChangeLog b/sim/v850/ChangeLog index 27af3c305d0..4488b2eb772 100644 --- a/sim/v850/ChangeLog +++ b/sim/v850/ChangeLog @@ -1,3 +1,7 @@ +2021-04-08 Simon Marchi + + * Makefile.in: Set ASAN_OPTIONS when running igen. + 2021-04-02 Mike Frysinger * Makefile.in (../igen/igen): Delete rule. diff --git a/sim/v850/Makefile.in b/sim/v850/Makefile.in index 983fc79f93a..250129c549f 100644 --- a/sim/v850/Makefile.in +++ b/sim/v850/Makefile.in @@ -69,7 +69,7 @@ IGEN_TRACE= # -G omit-line-numbers # -G trace-rule-selection -G trace-rule-rejec IGEN_INSN=$(srcdir)/v850.igen IGEN_DC=$(srcdir)/v850-dc tmp-igen: $(IGEN_INSN) $(IGEN_DC) ../igen/igen - ../igen/igen \ + $(IGEN) \ $(IGEN_TRACE) \ -G gen-direct-access \ -G gen-zero-r0 \