[PR build/24886] disable glibc mcheck support

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.
This commit is contained in:
Frank Ch. Eigler 2019-08-06 11:23:48 -04:00
parent 046bebe1c0
commit 404f29021a
13 changed files with 63 additions and 290 deletions

View File

@ -1,3 +1,13 @@
2019-08-06 Frank Ch. Eigler <fche@redhat.com>
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.
2019-08-06 Tom Tromey <tom@tromey.com>
* utils.c (set_output_style): Sometimes pass stream to

View File

@ -2044,7 +2044,6 @@ ACLOCAL_AMFLAGS = -I ../config
aclocal_m4_deps = \
configure.ac \
acx_configure_dir.m4 \
libmcheck.m4 \
transform.m4 \
../bfd/bfd.m4 \
../config/acinclude.m4 \

View File

@ -6,9 +6,6 @@ dnl major rewriting for Tcl 7.5 by Don Libes <libes@nist.gov>
sinclude(acx_configure_dir.m4)
# This gets GDB_AC_LIBMCHECK.
sinclude(libmcheck.m4)
# This gets GDB_AC_TRANSFORM.
sinclude(transform.m4)

View File

@ -243,9 +243,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

81
gdb/configure vendored
View File

@ -879,7 +879,6 @@ with_libmpfr_prefix
with_python
with_guile
enable_source_highlight
enable_libmcheck
with_intel_pt
with_libipt_prefix
with_included_regex
@ -1556,7 +1555,6 @@ Optional Features:
--disable-rpath do not hardcode runtime library paths
--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
@ -11316,85 +11314,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 :

View File

@ -1234,28 +1234,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])

View File

@ -1,3 +1,10 @@
2019-08-06 Frank Ch. Eigler <fche@redhat.com>
PR build/24886
* configure.ac: Drop enable-libmcheck support.
* configure, config.in: Rebuild.
* acinclude.m4: Don't include it.
2019-07-19 Alan Hayward <alan.hayward@arm.com>
* configure.srv: Remove Arm xml files.

View File

@ -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)

View File

@ -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

View File

@ -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 @@ Optional Features:
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.

View File

@ -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"
])

View File

@ -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 <http://www.gnu.org/licenses/>.
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
])

View File

@ -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\