From patchwork Tue Aug 6 18:08:32 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Frank Ch. Eigler" X-Patchwork-Id: 33977 Received: (qmail 39941 invoked by alias); 6 Aug 2019 18:08:43 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 39928 invoked by uid 89); 6 Aug 2019 18:08:43 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-14.0 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_ASCII_DIVIDERS, KAM_SHORT, SPF_HELO_PASS autolearn=ham version=3.3.1 spammy=H*F:U*fche, casual, dnl X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 06 Aug 2019 18:08:35 +0000 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B183752145; Tue, 6 Aug 2019 18:08:34 +0000 (UTC) Received: from redhat.com (ovpn-116-26.phx2.redhat.com [10.3.116.26]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 64995608A5; Tue, 6 Aug 2019 18:08:34 +0000 (UTC) Received: from fche by redhat.com with local (Exim 4.92) (envelope-from ) id 1hv3sv-0003TY-0j; Tue, 06 Aug 2019 14:08:33 -0400 Date: Tue, 6 Aug 2019 14:08:32 -0400 From: "Frank Ch. Eigler" To: gdb-patches@sourceware.org Cc: tromey@sourceware.org Subject: [PATCH][PR build/24886] disable glibc mcheck support Message-ID: <20190806180832.GB12272@redhat.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.12.0 (2019-05-25) This patch drops gdb's configury support for glibc's mcheck function. It has been observed to cause false abort()s, because it is thread-unsafe yet interposes every malloc/free operation. So if any library transitively used by gdb also uses threads, then these functions can easily corrupt their own checking data. These days, gcc ASAN and valgrind provide high quality checking, and mcheck is apparently itself being slowly deprecated. So, let's stop linking to it. Attached patch drops the autoconf/Makefile machinery for both gdb and gdbserver. No testsuite-visible impact. IMHO not worth mentioning in NEWS. See also: https://sourceware.org/bugzilla/show_bug.cgi?id=9939 gdb/ChangeLog PR build/24886 * configure.ac: Drop enable-libmcheck support. * configure, config.in: Rebuild. * libmcheck.m4: Remove. * acinclude.m4: Don't include it. * Makefile.in: Don't distribute it. * top.c (print_gdb_configuration): Don't mention it. gdb/gdbserver/ChangeLog PR build/24886 * configure.ac: Drop enable-libmcheck support. * configure, config.in: Rebuild. * acinclude.m4: Don't include it. diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 10762ee14ccb..0f3b6eed13f7 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -2047,7 +2047,6 @@ ACLOCAL_AMFLAGS = -I ../config aclocal_m4_deps = \ configure.ac \ acx_configure_dir.m4 \ - libmcheck.m4 \ transform.m4 \ ../bfd/bfd.m4 \ ../config/acinclude.m4 \ diff --git a/gdb/acinclude.m4 b/gdb/acinclude.m4 index b32dcf58c253..6e81aaed3bf4 100644 --- a/gdb/acinclude.m4 +++ b/gdb/acinclude.m4 @@ -6,9 +6,6 @@ dnl major rewriting for Tcl 7.5 by Don Libes sinclude(acx_configure_dir.m4) -# This gets GDB_AC_LIBMCHECK. -sinclude(libmcheck.m4) - # This gets GDB_AC_TRANSFORM. sinclude(transform.m4) diff --git a/gdb/config.in b/gdb/config.in index 57ca593b9a8c..239ed361438e 100644 --- a/gdb/config.in +++ b/gdb/config.in @@ -246,9 +246,6 @@ /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM -/* Define to 1 if you have the `mcheck' library (-lmcheck). */ -#undef HAVE_LIBMCHECK - /* Define if you have the mpfr library. */ #undef HAVE_LIBMPFR diff --git a/gdb/configure b/gdb/configure index f722d8032e1d..03645e1bad96 100755 --- a/gdb/configure +++ b/gdb/configure @@ -884,7 +884,6 @@ with_libmpfr_prefix with_python with_guile enable_source_highlight -enable_libmcheck with_intel_pt with_libipt_prefix with_included_regex @@ -1561,7 +1560,6 @@ if test -n "$ac_init_help"; then --enable-codesign=CERT sign gdb with 'codesign -s CERT' --enable-source-highlight enable source-highlight for source listings - --enable-libmcheck Try linking with -lmcheck if available --enable-werror treat compile warnings as errors --enable-build-warnings enable build-time compiler warnings if gcc is used --enable-gdb-build-warnings @@ -11820,85 +11818,6 @@ fi -# --------------------- # -# Check for libmcheck. # -# --------------------- # - -# Enable -lmcheck by default (it provides cheap-enough memory mangling), -# but turn it off if Python is enabled with threads, since -lmcheck is -# not thread safe (http://sourceware.org/bugzilla/show_bug.cgi?id=9939), -# and for releases. -if test \( "${have_libpython}" = "no" -o "${python_has_threads}" = "no" \) \ - && $development; then - libmcheck_default=yes -else - libmcheck_default=no -fi - - # Check whether --enable-libmcheck was given. -if test "${enable_libmcheck+set}" = set; then : - enableval=$enable_libmcheck; case "${enableval}" in - yes | y) ENABLE_LIBMCHECK="yes" ;; - no | n) ENABLE_LIBMCHECK="no" ;; - *) as_fn_error $? "bad value ${enableval} for --enable-libmcheck" "$LINENO" 5 ;; - esac -fi - - - if test -z "${ENABLE_LIBMCHECK}"; then - ENABLE_LIBMCHECK=${libmcheck_default} - fi - - if test "$ENABLE_LIBMCHECK" = "yes" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lmcheck" >&5 -$as_echo_n "checking for main in -lmcheck... " >&6; } -if ${ac_cv_lib_mcheck_main+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lmcheck $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_mcheck_main=yes -else - ac_cv_lib_mcheck_main=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mcheck_main" >&5 -$as_echo "$ac_cv_lib_mcheck_main" >&6; } -if test "x$ac_cv_lib_mcheck_main" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBMCHECK 1 -_ACEOF - - LIBS="-lmcheck $LIBS" - -fi - - fi - - -if test "$ENABLE_LIBMCHECK" = "yes" \ - -a "${have_libpython}" != "no" \ - -a "${python_has_threads}" = "yes" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-libmcheck may lead to spurious crashes if threads are used in python" >&5 -$as_echo "$as_me: WARNING: --enable-libmcheck may lead to spurious crashes if threads are used in python" >&2;} -fi - # Check whether --with-intel_pt was given. if test "${with_intel_pt+set}" = set; then : diff --git a/gdb/configure.ac b/gdb/configure.ac index 4062d33f3e6e..bee923113b63 100644 --- a/gdb/configure.ac +++ b/gdb/configure.ac @@ -1261,28 +1261,6 @@ fi AC_SUBST(SRCHIGH_LIBS) AC_SUBST(SRCHIGH_CFLAGS) -# --------------------- # -# Check for libmcheck. # -# --------------------- # - -# Enable -lmcheck by default (it provides cheap-enough memory mangling), -# but turn it off if Python is enabled with threads, since -lmcheck is -# not thread safe (http://sourceware.org/bugzilla/show_bug.cgi?id=9939), -# and for releases. -if test \( "${have_libpython}" = "no" -o "${python_has_threads}" = "no" \) \ - && $development; then - libmcheck_default=yes -else - libmcheck_default=no -fi -GDB_AC_LIBMCHECK(${libmcheck_default}) - -if test "$ENABLE_LIBMCHECK" = "yes" \ - -a "${have_libpython}" != "no" \ - -a "${python_has_threads}" = "yes" ; then - AC_MSG_WARN(--enable-libmcheck may lead to spurious crashes if threads are used in python) -fi - AC_ARG_WITH(intel_pt, AS_HELP_STRING([--with-intel-pt], [include Intel Processor Trace support (auto/yes/no)]), [], [with_intel_pt=auto]) diff --git a/gdb/gdbserver/acinclude.m4 b/gdb/gdbserver/acinclude.m4 index 96ded3d7d390..3887b165c66c 100644 --- a/gdb/gdbserver/acinclude.m4 +++ b/gdb/gdbserver/acinclude.m4 @@ -3,9 +3,6 @@ sinclude(../../bfd/bfd.m4) sinclude(../acx_configure_dir.m4) -# This gets GDB_AC_LIBMCHECK. -sinclude(../libmcheck.m4) - # This gets AM_GDB_WARNINGS. sinclude(../warning.m4) diff --git a/gdb/gdbserver/config.in b/gdb/gdbserver/config.in index 05537df81e37..3991964f9bd5 100644 --- a/gdb/gdbserver/config.in +++ b/gdb/gdbserver/config.in @@ -123,9 +123,6 @@ /* Define to 1 if you have the `dl' library (-ldl). */ #undef HAVE_LIBDL -/* Define to 1 if you have the `mcheck' library (-lmcheck). */ -#undef HAVE_LIBMCHECK - /* Define if the target supports branch tracing. */ #undef HAVE_LINUX_BTRACE diff --git a/gdb/gdbserver/configure b/gdb/gdbserver/configure index 0c04fcc8ae6a..7e5be51cb281 100755 --- a/gdb/gdbserver/configure +++ b/gdb/gdbserver/configure @@ -721,7 +721,6 @@ ac_user_opts=' enable_option_checking enable_maintainer_mode enable_largefile -enable_libmcheck enable_unit_tests with_ust with_ust_include @@ -1367,7 +1366,6 @@ if test -n "$ac_init_help"; then enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --disable-largefile omit support for large files - --enable-libmcheck Try linking with -lmcheck if available --enable-unit-tests Enable the inclusion of unit tests when compiling GDB --enable-werror treat compile warnings as errors @@ -1756,52 +1754,6 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_header_compile -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache @@ -1856,6 +1808,52 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_type +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly @@ -5827,71 +5825,6 @@ fi # Set the 'development' global. . $srcdir/../../bfd/development.sh -# Enable -lmcheck by default (it provides cheap-enough memory -# mangling), but turn it off for releases. -if $development; then - libmcheck_default=yes -else - libmcheck_default=no -fi - - # Check whether --enable-libmcheck was given. -if test "${enable_libmcheck+set}" = set; then : - enableval=$enable_libmcheck; case "${enableval}" in - yes | y) ENABLE_LIBMCHECK="yes" ;; - no | n) ENABLE_LIBMCHECK="no" ;; - *) as_fn_error $? "bad value ${enableval} for --enable-libmcheck" "$LINENO" 5 ;; - esac -fi - - - if test -z "${ENABLE_LIBMCHECK}"; then - ENABLE_LIBMCHECK=${libmcheck_default} - fi - - if test "$ENABLE_LIBMCHECK" = "yes" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lmcheck" >&5 -$as_echo_n "checking for main in -lmcheck... " >&6; } -if ${ac_cv_lib_mcheck_main+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lmcheck $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main () -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_mcheck_main=yes -else - ac_cv_lib_mcheck_main=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mcheck_main" >&5 -$as_echo "$ac_cv_lib_mcheck_main" >&6; } -if test "x$ac_cv_lib_mcheck_main" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBMCHECK 1 -_ACEOF - - LIBS="-lmcheck $LIBS" - -fi - - fi - - # Check whether we will enable the inclusion of unit tests when # compiling GDB. diff --git a/gdb/gdbserver/configure.ac b/gdb/gdbserver/configure.ac index 574b7c5b2879..0009aac9f207 100644 --- a/gdb/gdbserver/configure.ac +++ b/gdb/gdbserver/configure.ac @@ -45,15 +45,6 @@ AC_HEADER_STDC # Set the 'development' global. . $srcdir/../../bfd/development.sh -# Enable -lmcheck by default (it provides cheap-enough memory -# mangling), but turn it off for releases. -if $development; then - libmcheck_default=yes -else - libmcheck_default=no -fi -GDB_AC_LIBMCHECK(${libmcheck_default}) - GDB_AC_SELFTEST([ srv_selftest_objs="gdbsupport/selftest.o" ]) diff --git a/gdb/libmcheck.m4 b/gdb/libmcheck.m4 deleted file mode 100644 index 692a5c868925..000000000000 --- a/gdb/libmcheck.m4 +++ /dev/null @@ -1,43 +0,0 @@ -dnl Copyright (C) 2012-2019 Free Software Foundation, Inc. -dnl -dnl This file is part of GDB. -dnl -dnl This program is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 3 of the License, or -dnl (at your option) any later version. -dnl -dnl This program is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -dnl GNU General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this program. If not, see . - -dnl GDB_AC_LIBMCHECK([DEFAULT]) -dnl Provide an --enable-libmcheck/--disable-libmcheck set of options -dnl allowing a user to enable this option even when building releases, -dnl or to disable it when building a snapshot. -dnl DEFAULT (yes/no) is used as default if the user doesn't set -dnl the option explicitly. - -AC_DEFUN([GDB_AC_LIBMCHECK], -[ - AC_ARG_ENABLE(libmcheck, - AS_HELP_STRING([--enable-libmcheck], - [Try linking with -lmcheck if available]), - [case "${enableval}" in - yes | y) ENABLE_LIBMCHECK="yes" ;; - no | n) ENABLE_LIBMCHECK="no" ;; - *) AC_MSG_ERROR(bad value ${enableval} for --enable-libmcheck) ;; - esac]) - - if test -z "${ENABLE_LIBMCHECK}"; then - ENABLE_LIBMCHECK=[$1] - fi - - if test "$ENABLE_LIBMCHECK" = "yes" ; then - AC_CHECK_LIB(mcheck, main) - fi -]) diff --git a/gdb/top.c b/gdb/top.c index 60f81b3bf854..a9f9a384f7e1 100644 --- a/gdb/top.c +++ b/gdb/top.c @@ -1462,15 +1462,6 @@ This GDB was configured as follows:\n\ --without-intel-pt\n\ ")); #endif -#if HAVE_LIBMCHECK - fprintf_filtered (stream, _("\ - --enable-libmcheck\n\ -")); -#else - fprintf_filtered (stream, _("\ - --disable-libmcheck\n\ -")); -#endif #if HAVE_LIBMPFR fprintf_filtered (stream, _("\ --with-mpfr\n\