[TCWG CI] Regression caused by gcc: VxWorks config fixes for shared objects

ci_notify@linaro.org ci_notify@linaro.org
Sun Dec 19 12:45:15 GMT 2021


[TCWG CI] Regression caused by gcc: VxWorks config fixes for shared objects:
commit 0515c95d5fe0a865f688f3ab89572b917e8f0185
Author: Frederic Konrad <konrad@adacore.com>

    VxWorks config fixes for shared objects

Results regressed to
# reset_artifacts:
-10
# build_abe binutils:
-9
# build_abe stage1 -- --set gcc_override_configure=--disable-libsanitizer --set gcc_override_configure=--disable-multilib --set gcc_override_configure=--with-cpu=cortex-m4 --set gcc_override_configure=--with-mode=thumb --set gcc_override_configure=--with-float=hard:
-8
# build_abe newlib:
-6
# build_abe stage2 -- --set gcc_override_configure=--disable-libsanitizer --set gcc_override_configure=--disable-multilib --set gcc_override_configure=--with-cpu=cortex-m4 --set gcc_override_configure=--with-mode=thumb --set gcc_override_configure=--with-float=hard:
-5
# benchmark -- -Os_LTO_mthumb artifacts/build-0515c95d5fe0a865f688f3ab89572b917e8f0185/results_id:
1

from
# reset_artifacts:
-10
# build_abe binutils:
-9
# build_abe stage1 -- --set gcc_override_configure=--disable-libsanitizer --set gcc_override_configure=--disable-multilib --set gcc_override_configure=--with-cpu=cortex-m4 --set gcc_override_configure=--with-mode=thumb --set gcc_override_configure=--with-float=hard:
-8
# build_abe newlib:
-6
# build_abe stage2 -- --set gcc_override_configure=--disable-libsanitizer --set gcc_override_configure=--disable-multilib --set gcc_override_configure=--with-cpu=cortex-m4 --set gcc_override_configure=--with-mode=thumb --set gcc_override_configure=--with-float=hard:
-5
# benchmark -- -Os_LTO_mthumb artifacts/build-baseline/results_id:
1

THIS IS THE END OF INTERESTING STUFF.  BELOW ARE LINKS TO BUILDS, REPRODUCTION INSTRUCTIONS, AND THE RAW COMMIT.

This commit has regressed these CI configurations:
 - tcwg_bmk_gnu_eabi_stm32/gnu_eabi-master-arm_eabi-coremark-Os_LTO

First_bad build: https://ci.linaro.org/job/tcwg_bmk_ci_gnu_eabi-bisect-tcwg_bmk_stm32-gnu_eabi-master-arm_eabi-coremark-Os_LTO/15/artifact/artifacts/build-0515c95d5fe0a865f688f3ab89572b917e8f0185/
Last_good build: https://ci.linaro.org/job/tcwg_bmk_ci_gnu_eabi-bisect-tcwg_bmk_stm32-gnu_eabi-master-arm_eabi-coremark-Os_LTO/15/artifact/artifacts/build-0ecb48d753005405f84876ed3032c4cda789e072/
Baseline build: https://ci.linaro.org/job/tcwg_bmk_ci_gnu_eabi-bisect-tcwg_bmk_stm32-gnu_eabi-master-arm_eabi-coremark-Os_LTO/15/artifact/artifacts/build-baseline/
Even more details: https://ci.linaro.org/job/tcwg_bmk_ci_gnu_eabi-bisect-tcwg_bmk_stm32-gnu_eabi-master-arm_eabi-coremark-Os_LTO/15/artifact/artifacts/

Reproduce builds:
<cut>
mkdir investigate-gcc-0515c95d5fe0a865f688f3ab89572b917e8f0185
cd investigate-gcc-0515c95d5fe0a865f688f3ab89572b917e8f0185

# Fetch scripts
git clone https://git.linaro.org/toolchain/jenkins-scripts

# Fetch manifests and test.sh script
mkdir -p artifacts/manifests
curl -o artifacts/manifests/build-baseline.sh https://ci.linaro.org/job/tcwg_bmk_ci_gnu_eabi-bisect-tcwg_bmk_stm32-gnu_eabi-master-arm_eabi-coremark-Os_LTO/15/artifact/artifacts/manifests/build-baseline.sh --fail
curl -o artifacts/manifests/build-parameters.sh https://ci.linaro.org/job/tcwg_bmk_ci_gnu_eabi-bisect-tcwg_bmk_stm32-gnu_eabi-master-arm_eabi-coremark-Os_LTO/15/artifact/artifacts/manifests/build-parameters.sh --fail
curl -o artifacts/test.sh https://ci.linaro.org/job/tcwg_bmk_ci_gnu_eabi-bisect-tcwg_bmk_stm32-gnu_eabi-master-arm_eabi-coremark-Os_LTO/15/artifact/artifacts/test.sh --fail
chmod +x artifacts/test.sh

# Reproduce the baseline build (build all pre-requisites)
./jenkins-scripts/tcwg_bmk-build.sh @@ artifacts/manifests/build-baseline.sh

# Save baseline build state (which is then restored in artifacts/test.sh)
mkdir -p ./bisect
rsync -a --del --delete-excluded --exclude /bisect/ --exclude /artifacts/ --exclude /gcc/ ./ ./bisect/baseline/

cd gcc

# Reproduce first_bad build
git checkout --detach 0515c95d5fe0a865f688f3ab89572b917e8f0185
../artifacts/test.sh

# Reproduce last_good build
git checkout --detach 0ecb48d753005405f84876ed3032c4cda789e072
../artifacts/test.sh

cd ..
</cut>

Full commit (up to 1000 lines):
<cut>
commit 0515c95d5fe0a865f688f3ab89572b917e8f0185
Author: Frederic Konrad <konrad@adacore.com>
Date:   Fri Nov 6 19:42:27 2020 +0100

    VxWorks config fixes for shared objects
    
    This strengthens the VxWorks configuration files for the support
    of shared objects, which encompasses a VxWorks specific "non-static"
    mode for RTPs (in addition to -static and -shared).
    
    2020-11-06  Fred Konrad  <konrad@adacore.com>
                Olivier Hainque  <hainque@adacore.com>
    
    gcc/
            * config/vx-common.h: Define REAL_LIBGCC_SPEC since the
            '-non-static' option is not standard.
            * config/vxworks.h (VXWORKS_LIBGCC_SPEC): Implement the LIBGCC_SPEC
            since REAL_LIBGCC_SPEC is used now.
            (STARTFILE_PREFIX_SPEC): Use the PIC VSB when building shared libraries
            or non-static binaries.
---
 gcc/config/vx-common.h |  7 +++++--
 gcc/config/vxworks.h   | 19 ++++++++++++++++++-
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/gcc/config/vx-common.h b/gcc/config/vx-common.h
index a436bf14074..efa5d5f6a60 100644
--- a/gcc/config/vx-common.h
+++ b/gcc/config/vx-common.h
@@ -23,8 +23,11 @@ along with GCC; see the file COPYING3.  If not see
 /* Most of these will probably be overridden by subsequent headers.  We
    undefine them here just in case, and define VXWORKS_ versions of each,
    to be used in port-specific vxworks.h.  */
-#undef LIBGCC_SPEC
-#define LIBGCC_SPEC VXWORKS_LIBGCC_SPEC
+
+/* REAL_LIBGCC_SPEC needs to be used since the non-static option is not
+   handled in gcc.c.  */
+#undef REAL_LIBGCC_SPEC
+#define REAL_LIBGCC_SPEC VXWORKS_LIBGCC_SPEC
 #undef STARTFILE_SPEC
 #undef ENDFILE_SPEC
 
diff --git a/gcc/config/vxworks.h b/gcc/config/vxworks.h
index f76141ffdca..96076e3c272 100644
--- a/gcc/config/vxworks.h
+++ b/gcc/config/vxworks.h
@@ -143,11 +143,21 @@ along with GCC; see the file COPYING3.  If not see
    tlsLib, responsible for TLS support by the OS.  */
 
 #if TARGET_VXWORKS7
+
+/* For static links, /usr/lib/common has everything. For dynamic links,
+   /usr/lib/common/PIC has the static libs and objects that might be needed
+   in the closure (e.g. crt0.o), while the shared version of standard deps
+   (e.g. libc.so) are still in /usr/lib/common.  */
 #undef  STARTFILE_PREFIX_SPEC
-#define STARTFILE_PREFIX_SPEC "/usr/lib/common"
+#define STARTFILE_PREFIX_SPEC \
+  "%{shared|non-static:/usr/lib/common/PIC} /usr/lib/common"
+
 #define TLS_SYM "-u __tls__"
+
 #else
+
 #define TLS_SYM ""
+
 #endif
 
 #undef VXWORKS_LIB_SPEC
@@ -177,7 +187,14 @@ along with GCC; see the file COPYING3.  If not see
  		  %{non-static:--force-dynamic --export-dynamic}}}"
 
 #undef VXWORKS_LIBGCC_SPEC
+#if defined(ENABLE_SHARED_LIBGCC)
+#define VXWORKS_LIBGCC_SPEC                                             \
+"%{!mrtp:-lgcc -lgcc_eh}                                                \
+ %{mrtp:%{!static-libgcc:%{shared|non-static:-lgcc_s;:-lgcc -lgcc_eh}}  \
+         %{static-libgcc:-lgcc -lgcc_eh}}"
+#else
 #define VXWORKS_LIBGCC_SPEC "-lgcc"
+#endif
 
 /* Setup the crtstuff begin/end we might need for dwarf EH registration.  */
 
</cut>


More information about the Gcc-regression mailing list