From: Bruno Haible Date: Sat, 20 Jul 2024 23:19:01 +0000 (+0200) Subject: stack-trace: Don't use libasan by default. X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=c1b8e30d30df59a619d4f7cc0efa72aaf3a844fe;p=gnulib.git stack-trace: Don't use libasan by default. * m4/stack-trace.m4 (gl_STACK_TRACE_EARLY): Remove libasan as second choice. --- diff --git a/ChangeLog b/ChangeLog index 2fecfed6d5..954ccf98de 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2024-07-20 Bruno Haible + + stack-trace: Don't use libasan by default. + * m4/stack-trace.m4 (gl_STACK_TRACE_EARLY): Remove libasan as second + choice. + 2024-07-20 Bruno Haible doc: Sort the ISO C and POSIX Function Substitutes by header file. diff --git a/m4/stack-trace.m4 b/m4/stack-trace.m4 index faf86eefe9..43f6ef2abf 100644 --- a/m4/stack-trace.m4 +++ b/m4/stack-trace.m4 @@ -1,5 +1,5 @@ # stack-trace.m4 -# serial 2 +# serial 3 dnl Copyright (C) 2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -22,7 +22,6 @@ AC_DEFUN([gl_STACK_TRACE_EARLY], AC_MSG_RESULT([$enable_debug]) AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) - AC_REQUIRE([AC_CANONICAL_HOST]) if test $enable_debug = yes; then dnl The first choice is libbacktrace by Ian Lance Taylor. dnl Maintained at https://github.com/ianlancetaylor/libbacktrace, @@ -49,71 +48,25 @@ AC_DEFUN([gl_STACK_TRACE_EARLY], CAN_PRINT_STACK_TRACE=1 LIBS="$LIBS -lbacktrace" else - dnl The second choice is GCC's libasan, installed as part of GCC. - dnl It produces source file names and line numbers, if the binary - dnl is compiled with debug information. - AC_CACHE_CHECK([for libasan], [gl_cv_lib_asan], [ - gl_saved_LIBS="$LIBS" - LIBS="$gl_saved_LIBS -lasan" - dnl We need AC_RUN_IFELSE here, not merely AC_LINK_IFELSE, because on - dnl NetBSD libasan exists but every program that links to it immediately - dnl prints "This sanitizer is not compatible with enabled ASLR" to - dnl standard error and exits with code 0, without even invoking main(). - AC_RUN_IFELSE( - [AC_LANG_PROGRAM( - [[#include - extern - #ifdef __cplusplus - "C" - #endif - void __sanitizer_print_stack_trace (void); - ]], - [[remove ("conftest.c"); - __sanitizer_print_stack_trace (); - ]])], - [if test -f conftest.c; then - dnl main() was not reached. NetBSD! - gl_cv_lib_asan=no - else - gl_cv_lib_asan=yes - fi - ], - [gl_cv_lib_asan=no], - [case "$host_os" in - netbsd*) gl_cv_lib_asan="guessing no" ;; - *) gl_cv_lib_asan="guessing yes" ;; - esac - ]) - LIBS="$gl_saved_LIBS" - ]) - case "$gl_cv_lib_asan" in - *yes) - AC_DEFINE([HAVE_LIBASAN], [1], - [Define if you have the libasan library.]) + dnl The second choice is libexecinfo. + dnl It does not produce source file names and line numbers, only addresses + dnl (which are mostly useless due to ASLR) and _sometimes_ function names. + AC_REQUIRE([AC_CANONICAL_HOST]) + case "$host_os" in + *-gnu* | gnu* | darwin* | freebsd* | dragonfly* | netbsd* | openbsd* | solaris*) + dnl execinfo might be implemented on this platform. CAN_PRINT_STACK_TRACE=1 - LIBS="$LIBS -lasan" - ;; - *) - dnl The third choice is libexecinfo. - dnl It does not produce source file names and line numbers, only addresses - dnl (which are mostly useless due to ASLR) and _sometimes_ function names. + dnl On *BSD system, link all programs with -lexecinfo. Cf. m4/execinfo.m4. + case "$host_os" in + freebsd* | dragonfly* | netbsd* | openbsd*) + LIBS="$LIBS -lexecinfo" + ;; + esac + dnl Link all programs in such a way that the stack trace includes the + dnl function names. '-rdynamic' is equivalent to '-Wl,-export-dynamic'. case "$host_os" in - *-gnu* | gnu* | darwin* | freebsd* | dragonfly* | netbsd* | openbsd* | solaris*) - dnl execinfo might be implemented on this platform. - CAN_PRINT_STACK_TRACE=1 - dnl On *BSD system, link all programs with -lexecinfo. Cf. m4/execinfo.m4. - case "$host_os" in - freebsd* | dragonfly* | netbsd* | openbsd*) - LIBS="$LIBS -lexecinfo" - ;; - esac - dnl Link all programs in such a way that the stack trace includes the - dnl function names. '-rdynamic' is equivalent to '-Wl,-export-dynamic'. - case "$host_os" in - *-gnu* | gnu* | openbsd*) - LDFLAGS="$LDFLAGS -rdynamic" - ;; - esac + *-gnu* | gnu* | openbsd*) + LDFLAGS="$LDFLAGS -rdynamic" ;; esac ;;