diff options
| author | Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | 2023-11-28 14:54:34 +0100 |
|---|---|---|
| committer | Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | 2023-11-28 14:54:34 +0100 |
| commit | 088d3cbc5f906444a7dee98bc9a6f4b724ddfc21 (patch) | |
| tree | ef1a523363cc1a1fe6484ceb4872a98ce7512527 /libsanitizer/configure | |
| parent | 099b15e2bdb78c21ad3f9001af77072413f4e159 (diff) | |
libsanitizer: Check assembler support for symbol assignment [PR112563]
The recent libsanitizer import broke the build on Solaris/SPARC with the
native as:
/usr/ccs/bin/as: ".libs/sanitizer_errno.s", line 4247: error: symbol
"__sanitizer_internal_memset" is used but not defined
/usr/ccs/bin/as: ".libs/sanitizer_errno.s", line 4247: error: symbol
"__sanitizer_internal_memcpy" is used but not defined
/usr/ccs/bin/as: ".libs/sanitizer_errno.s", line 4247: error: symbol
"__sanitizer_internal_memmove" is used but not defined
Since none of the alternatives considered in the PR worked out, this
patch checks if the assembler does support symbol assignment, disabling
the code otherwise. This returns the code to the way it was up to LLVM 16.
Bootstrapped without regressions on sparc-sun-solaris2.11 (as and gas) and
i386-pc-solaris2.11 (as and gas).
2023-11-23 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
libsanitizer:
PR sanitizer/112563
* configure.ac (libsanitizer_cv_as_sym_assign): Check for
assembler symbol assignment support.
* configure: Regenerate.
* asan/Makefile.am (DEFS): Add @AS_SYM_ASSIGN_DEFS@.
* Makefile.in, asan/Makefile.in, hwasan/Makefile.in,
interception/Makefile.in, libbacktrace/Makefile.in,
lsan/Makefile.in, sanitizer_common/Makefile.in, tsan/Makefile.in,
ubsan/Makefile.in: Regenerate.
Diffstat (limited to 'libsanitizer/configure')
| -rwxr-xr-x | libsanitizer/configure | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/libsanitizer/configure b/libsanitizer/configure index 2edd5c37ce7..6bfd28916d2 100755 --- a/libsanitizer/configure +++ b/libsanitizer/configure @@ -651,6 +651,7 @@ ALLOC_FILE VIEW_FILE BACKTRACE_SUPPORTED FORMAT_FILE +AS_SYM_ASSIGN_DEFS SANITIZER_SUPPORTED_FALSE SANITIZER_SUPPORTED_TRUE USING_MAC_INTERPOSE_FALSE @@ -12474,7 +12475,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12477 "configure" +#line 12478 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12580,7 +12581,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12583 "configure" +#line 12584 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -16333,6 +16334,38 @@ $as_echo "#define HAVE_ATOMIC_FUNCTIONS 1" >>confdefs.h fi +# Check if assembler supports symbol assignment. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler symbol assignment" >&5 +$as_echo_n "checking assembler symbol assignment... " >&6; } +if ${libsanitizer_cv_as_sym_assign+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +asm("a = b"); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + libsanitizer_cv_as_sym_assign=yes +else + libsanitizer_cv_as_sym_assign=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libsanitizer_cv_as_sym_assign" >&5 +$as_echo "$libsanitizer_cv_as_sym_assign" >&6; } +if test "$libsanitizer_cv_as_sym_assign" = "yes"; then + as_sym_assign_defs=-DHAVE_AS_SYM_ASSIGN=1 +fi +AS_SYM_ASSIGN_DEFS=$as_sym_assign_defs + + # The library needs to be able to read the executable itself. Compile # a file to determine the executable format. The awk script # filetype.awk prints out the file type. |
