From 34f0b7d381f403e33b34afdfdb5ee25da22c7f1a Mon Sep 17 00:00:00 2001 From: BrunoASMauricio Date: Mon, 17 Jul 2023 10:50:35 +0100 Subject: [PATCH 1/2] Tests: Added compat tests in Makefile.in Added ability to run compatibility tests within build system. Control of the testsuite is done by setting environment variables. The main ones are: - GCC_COMPAT_GCC_OPTIONS: GCC flags - GCC_COMPAT_EXTRA_GCC_OPTIONS: GCC flags to be appended to the defaults - GCC_COMPAT_ALT_PATH: Path to alternate compiler binary (if not present, GCC self-tests) - GCC_COMPAT_ALT_OPTIONS: Alt compiler flags If the ALT_PATH contains ccac (MetaWare), the following variables can be used: - GCC_METAWARE_ROOT: Path to metaware root. Adds -lmw and appropriate -L to GCC_COMPAT_GCC_OPTIONS - GCC_COMPAT_ALT_OPTIONS has default values depending on the target Signed-off-by: BrunoASMauricio --- Makefile.in | 70 ++++++++++++++++++++++++++++++++++++++++++++++++ dejagnu/site.exp | 22 +++++++++++++++ 2 files changed, 92 insertions(+) diff --git a/Makefile.in b/Makefile.in index 7d33943..1835a77 100644 --- a/Makefile.in +++ b/Makefile.in @@ -119,6 +119,70 @@ SIM_PATH:=$(srcdir)/scripts/wrapper/$(SIM) SIM_PREPARE:=PATH="$(SIM_PATH):$(INSTALL_DIR)/bin:$(PATH)" ARC_SYSROOT="$(SYSROOT)" DEJAGNU="$(srcdir)/dejagnu/site.exp" QEMU_CPU="$(QEMU_CPU)" +# Default compatibility test flags +# ALT is by default ccac +GCC_COMMON_OPTS:=-O0 -g -Wl,-zmuldefs -Wl,--no-warn-mismatch -lgcc -lnsim -lg -lm +CCAC_COMMON_OPTS:=-O0 -g -Xbasecase -Hnocopyr -Hnosdata -fstrict-abi +# ArcV2 +ifeq (@target_alias@,arc) + GCC_METAWARE_LIB:=arc/lib/av2em/le + GCC_COMPAT_GCC_OPTIONS_DEFAULT:=-mcpu=em4_dmips -mno-sdata -fshort-enums + GCC_COMPAT_CCAC_OPTIONS_DEFAULT:=-av2em +else +# hs5x +ifeq (@target_alias@,arc32) + GCC_METAWARE_LIB:=arc/lib/av3hs/le + GCC_COMPAT_GCC_OPTIONS_DEFAULT:=-mcpu=hs5x + GCC_COMPAT_CCAC_OPTIONS_DEFAULT:=-arcv3hs + +# hs6x +else + GCC_METAWARE_LIB:=arc/lib/av2em/le + GCC_COMPAT_GCC_OPTIONS_DEFAULT:= -mcpu=hs6x + GCC_COMPAT_CCAC_OPTIONS_DEFAULT:=-arc64 +endif +endif + +GCC_COMPAT_GCC_OPTIONS_DEFAULT:=$(GCC_COMMON_OPTS) $(GCC_COMPAT_GCC_OPTIONS_DEFAULT) +GCC_COMPAT_CCAC_OPTIONS_DEFAULT:=$(CCAC_COMMON_OPTS) $(GCC_COMPAT_CCAC_OPTIONS_DEFAULT) + +# Check for GCC compat flags +ifndef GCC_COMPAT_GCC_OPTIONS + GCC_COMPAT_GCC_OPTIONS:=$(GCC_COMPAT_GCC_OPTIONS_DEFAULT) +endif + +# Check for added GCC compat flags (so we can add to the defaults) +ifdef GCC_COMPAT_EXTRA_GCC_OPTIONS + GCC_COMPAT_GCC_OPTIONS:=$(GCC_COMPAT_GCC_OPTIONS) $(GCC_COMPAT_EXTRA_GCC_OPTIONS) +endif + +# Use alternate if available +ifdef GCC_COMPAT_ALT_PATH + + # We can use some defaults for MetaWares' CCAC + ifeq ($(shell echo $(GCC_COMPAT_ALT_PATH) | grep -q ccac && echo 1 || echo 0), 1) + ifndef GCC_COMPAT_ALT_OPTIONS + GCC_COMPAT_ALT_OPTIONS:=$(GCC_COMPAT_CCAC_OPTIONS_DEFAULT) + endif + + # Default to use metaware libraries if available + ifdef GCC_METAWARE_ROOT + GCC_COMPAT_GCC_OPTIONS:=$(GCC_COMPAT_GCC_OPTIONS) -L$(GCC_METAWARE_ROOT)/$(GCC_METAWARE_LIB) -lmw + endif + endif + ALT_CC_UNDER_TEST:=$(GCC_COMPAT_ALT_PATH) + + COMPAT_PREPARE := ALT_CC_UNDER_TEST="$(ALT_CC_UNDER_TEST)" GCC_COMPAT_ALT_OPTIONS="$(GCC_COMPAT_ALT_OPTIONS)" GCC_COMPAT_GCC_OPTIONS="$(GCC_COMPAT_GCC_OPTIONS)" $(SIM_PREPARE) + +# No alternate compiler provided, do self sanity checks +else + + ALT_CC_UNDER_TEST:="same" + COMPAT_PREPARE := ALT_CC_UNDER_TEST="$(ALT_CC_UNDER_TEST)" GCC_COMPAT_GCC_OPTIONS="$(GCC_COMPAT_GCC_OPTIONS)" $(SIM_PREPARE) + +endif + + all: @default_target@ @qemu_build@ echo "$(INSTALL_DIR)" > stamps/install_dir baremetal: stamps/build-gcc-newlib-stage2 @@ -141,6 +205,7 @@ check-baremetal: $(patsubst %,check-%-baremetal,$(REGRESSION_TEST_LIST)) check-gcc: check-gcc-@default_target@ check-gcc-baremetal: stamps/check-gcc-baremetal +check-gcc-compat: stamps/check-gcc-compat check-gcc-linux: stamps/check-gcc-linux check-binutils: check-binutils-@default_target@ @@ -537,6 +602,11 @@ stamps/check-gcc-baremetal: stamps/build-gcc-newlib-stage2 $(SIM_STAMP) mkdir -p $(dir $@) date > $@ +stamps/check-gcc-compat: stamps/build-gcc-newlib-stage2 $(SIM_STAMP) + $(COMPAT_PREPARE) $(MAKE) -C build-gcc-newlib-stage2 check-gcc "RUNTESTFLAGS='compat.exp'$(RUNTESTFLAGS) --target_board='$(NEWLIB_TARGET_BOARDS)'" + mkdir -p $(dir $@) + date > $@ + stamps/check-binutils-baremetal: stamps/build-gcc-newlib-stage2 $(SIM_STAMP) $(SIM_PREPARE) $(MAKE) -C build-binutils-newlib check-binutils check-gas check-ld -k "RUNTESTFLAGS=--target_board='$(NEWLIB_TARGET_BOARDS)'" || true date > $@ diff --git a/dejagnu/site.exp b/dejagnu/site.exp index 71c3539..b117a5b 100644 --- a/dejagnu/site.exp +++ b/dejagnu/site.exp @@ -34,4 +34,26 @@ if ![ info exists HOSTCFLAGS ] { set HOSTCFLAGS "-g -O2" } +if { [info exists env(GCC_COMPAT_GCC_OPTIONS)] } { + set is_gcc_compat_suite "1" + set GCC_COMPAT_GCC_OPTIONS $env(GCC_COMPAT_GCC_OPTIONS) + + set ALT_CC_UNDER_TEST "$env(ALT_CC_UNDER_TEST)" + set ALT_CXX_UNDER_TEST "$ALT_CC_UNDER_TEST" + + # MetaWare specs are defined + if { [info exists env(GCC_COMPAT_ALT_OPTIONS)] } { + set GCC_COMPAT_ALT_OPTIONS $env(GCC_COMPAT_ALT_OPTIONS) + + set COMPAT_OPTIONS [list [list $GCC_COMPAT_GCC_OPTIONS $GCC_COMPAT_ALT_OPTIONS]] + + # No MetaWare specs, perform sanity (self) compatibility checks + } else { + set COMPAT_OPTIONS [list [list $GCC_COMPAT_GCC_OPTIONS $GCC_COMPAT_GCC_OPTIONS]] + + } + # Disable tests with packed structures to avoid unaligned access errors. + set COMPAT_SKIPS [list {ATTRIBUTE}] +} + # vim: noexpandtab sts=4 ts=8: From dd2a876f4fe8b844040534efe8e2b88c2d32b3a7 Mon Sep 17 00:00:00 2001 From: Luis Silva Date: Fri, 1 Sep 2023 14:55:35 +0100 Subject: [PATCH 2/2] Integrated GCC compatibility tests into the entire GCC testsuite. Revised the approach for enabling compatibility tests by introducing a new configuration option, --enable-compat-tests. Expanded CPU architecture (ARCHS) support for GCC compatibility tests and resolved issues related to the ARCv3 path. The -SKIP_ATTRIBUTE flag, which was used to prevent tests involving packed structures and potential unaligned access errors from running, has been removed. This change was made because, in addition to the initial execution of the compat.exp testsuite, a second testsuite, struct-layout-1.exp, relies on the compat.exp testsuite, and several tests were failing as a result of this interdependence. For running only the GCC compatibility tests, use this command: ``` make check-gcc RUNTESTFLAGS="compat.exp" -j$(nproc) ``` Please note that compatibility tests are exclusively supported for the Baremetal toolchain distribution. Signed-off-by: Luis Silva --- Makefile.in | 31 +++++++++++++++++++------------ configure.ac | 10 ++++++++++ dejagnu/site.exp | 2 -- 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/Makefile.in b/Makefile.in index 1835a77..2a5f638 100644 --- a/Makefile.in +++ b/Makefile.in @@ -39,6 +39,7 @@ SED := @GSED@ PATH := $(INSTALL_DIR)/bin:$(PATH) DEBUG_INFO := @debug_info@ DEBUG_INFO_GLIBC := @debug_info_glibc@ +COMPAT_TESTS := @compat_tests@ # Check to see if we need wrapper scripts for awk/sed (which point to # gawk/gsed on platforms where these aren't the default), otherwise @@ -119,15 +120,26 @@ SIM_PATH:=$(srcdir)/scripts/wrapper/$(SIM) SIM_PREPARE:=PATH="$(SIM_PATH):$(INSTALL_DIR)/bin:$(PATH)" ARC_SYSROOT="$(SYSROOT)" DEJAGNU="$(srcdir)/dejagnu/site.exp" QEMU_CPU="$(QEMU_CPU)" +ifeq ($(COMPAT_TESTS),--enable-compat-tests) +ifeq (@default_target@, linux) + $(error Default target cannot be set to Linux when running compatibility tests) +endif + # Default compatibility test flags # ALT is by default ccac GCC_COMMON_OPTS:=-O0 -g -Wl,-zmuldefs -Wl,--no-warn-mismatch -lgcc -lnsim -lg -lm CCAC_COMMON_OPTS:=-O0 -g -Xbasecase -Hnocopyr -Hnosdata -fstrict-abi # ArcV2 ifeq (@target_alias@,arc) - GCC_METAWARE_LIB:=arc/lib/av2em/le - GCC_COMPAT_GCC_OPTIONS_DEFAULT:=-mcpu=em4_dmips -mno-sdata -fshort-enums - GCC_COMPAT_CCAC_OPTIONS_DEFAULT:=-av2em + ifeq ($(WITH_CPU),--with-cpu=archs) + GCC_METAWARE_LIB:=arc/lib/av2hs/le + GCC_COMPAT_GCC_OPTIONS_DEFAULT:=-mcpu=archs -mno-sdata + GCC_COMPAT_CCAC_OPTIONS_DEFAULT:=-av2hs + else + GCC_METAWARE_LIB:=arc/lib/av2em/le + GCC_COMPAT_GCC_OPTIONS_DEFAULT:=-mcpu=em4_dmips -mno-sdata -fshort-enums + GCC_COMPAT_CCAC_OPTIONS_DEFAULT:=-av2em + endif else # hs5x ifeq (@target_alias@,arc32) @@ -137,7 +149,7 @@ ifeq (@target_alias@,arc32) # hs6x else - GCC_METAWARE_LIB:=arc/lib/av2em/le + GCC_METAWARE_LIB:=arc/lib/arc64/le GCC_COMPAT_GCC_OPTIONS_DEFAULT:= -mcpu=hs6x GCC_COMPAT_CCAC_OPTIONS_DEFAULT:=-arc64 endif @@ -172,16 +184,16 @@ ifdef GCC_COMPAT_ALT_PATH endif ALT_CC_UNDER_TEST:=$(GCC_COMPAT_ALT_PATH) - COMPAT_PREPARE := ALT_CC_UNDER_TEST="$(ALT_CC_UNDER_TEST)" GCC_COMPAT_ALT_OPTIONS="$(GCC_COMPAT_ALT_OPTIONS)" GCC_COMPAT_GCC_OPTIONS="$(GCC_COMPAT_GCC_OPTIONS)" $(SIM_PREPARE) + SIM_PREPARE := ALT_CC_UNDER_TEST="$(ALT_CC_UNDER_TEST)" GCC_COMPAT_ALT_OPTIONS="$(GCC_COMPAT_ALT_OPTIONS)" GCC_COMPAT_GCC_OPTIONS="$(GCC_COMPAT_GCC_OPTIONS)" $(SIM_PREPARE) # No alternate compiler provided, do self sanity checks else ALT_CC_UNDER_TEST:="same" - COMPAT_PREPARE := ALT_CC_UNDER_TEST="$(ALT_CC_UNDER_TEST)" GCC_COMPAT_GCC_OPTIONS="$(GCC_COMPAT_GCC_OPTIONS)" $(SIM_PREPARE) + SIM_PREPARE := ALT_CC_UNDER_TEST="$(ALT_CC_UNDER_TEST)" GCC_COMPAT_GCC_OPTIONS="$(GCC_COMPAT_GCC_OPTIONS)" $(SIM_PREPARE) endif - +endif all: @default_target@ @qemu_build@ echo "$(INSTALL_DIR)" > stamps/install_dir @@ -602,11 +614,6 @@ stamps/check-gcc-baremetal: stamps/build-gcc-newlib-stage2 $(SIM_STAMP) mkdir -p $(dir $@) date > $@ -stamps/check-gcc-compat: stamps/build-gcc-newlib-stage2 $(SIM_STAMP) - $(COMPAT_PREPARE) $(MAKE) -C build-gcc-newlib-stage2 check-gcc "RUNTESTFLAGS='compat.exp'$(RUNTESTFLAGS) --target_board='$(NEWLIB_TARGET_BOARDS)'" - mkdir -p $(dir $@) - date > $@ - stamps/check-binutils-baremetal: stamps/build-gcc-newlib-stage2 $(SIM_STAMP) $(SIM_PREPARE) $(MAKE) -C build-binutils-newlib check-binutils check-gas check-ld -k "RUNTESTFLAGS=--target_board='$(NEWLIB_TARGET_BOARDS)'" || true date > $@ diff --git a/configure.ac b/configure.ac index 99b1155..e9a03dc 100644 --- a/configure.ac +++ b/configure.ac @@ -153,6 +153,16 @@ AS_IF([test "x$enable_gcc_checking" != xno], [AC_SUBST(gcc_checking, --enable-checking=yes)], [AC_SUBST(gcc_checking, --enable-checking=release)]) +AC_ARG_ENABLE(compat-tests, + [AS_HELP_STRING([--enable-compat-tests], + [Enable gcc compatibility tests, Linux toolchain is not supported @<:@--disable-compact-tests@:>@])], + [], + [enable_compat_tests=no] + ) +AS_IF([test "x$enable_compat_tests" != xno], + [AC_SUBST(compat_tests, --enable-compat-tests)], + [AC_SUBST(compat_tests, --disable-compat-tests)]) + AC_ARG_WITH(cmodel, [AS_HELP_STRING([--with-cmodel], [Select the code model to use when building libc and libgcc @<:@--with-cmodel=medlow@:>@])], diff --git a/dejagnu/site.exp b/dejagnu/site.exp index b117a5b..e955f35 100644 --- a/dejagnu/site.exp +++ b/dejagnu/site.exp @@ -52,8 +52,6 @@ if { [info exists env(GCC_COMPAT_GCC_OPTIONS)] } { set COMPAT_OPTIONS [list [list $GCC_COMPAT_GCC_OPTIONS $GCC_COMPAT_GCC_OPTIONS]] } - # Disable tests with packed structures to avoid unaligned access errors. - set COMPAT_SKIPS [list {ATTRIBUTE}] } # vim: noexpandtab sts=4 ts=8: