This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [patch] Re: Disable -lmcheck when Python has threads (Re: [BUG] gdb crash when "python import gtk")
On Fri, 31 Aug 2012 03:32:06 +0200, Khoo Yit Phang wrote:
> Do not enable -lmcheck by default when Python is enabled with
> threading support.
> * configure.ac: (python_has_threads) New variable, by testing
> if WITH_THREAD is defined in Python.h.
> Move --enable-lmcheck after --with-python.
> Do not enable -lmcheck by default if python_has_threads=yes.
> Warn if --enable-lmcheck=yes and python_has_threads=yes.
> * configure: Regenerate.
OK with the changes below.
Be sure to use autoconf-2.64 so that configure gets regenerated without
unrelated version changes.
> diff --git a/gdb/configure.ac b/gdb/configure.ac
> --- a/gdb/configure.ac
> +++ b/gdb/configure.ac
> @@ -645,28 +645,6 @@
> AC_SUBST(READLINE_CFLAGS)
> AC_SUBST(READLINE_TEXI_INCFLAG)
>
> -# Provide a --enable-libmcheck/--disable-libmcheck set of options
> -# allowing a user to enable this option even when building releases,
> -# or to disable it when building a snapshot.
> -AC_ARG_ENABLE(libmcheck,
> - AS_HELP_STRING([--enable-libmcheck],
> - [Try building GDB 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])
> -
> -# Enable -lmcheck by default (it provides cheap-enough memory mangling),
> -# but turn it off for releases.
> -if test -z "${ENABLE_LIBMCHECK}" && $development; then
> - ENABLE_LIBMCHECK=yes
> -fi
> -
> -if test "$ENABLE_LIBMCHECK" = "yes" ; then
> - AC_CHECK_LIB(mcheck, main)
> -fi
> -
> # Generate jit-reader.h
>
> # This is typedeffed to GDB_CORE_ADDR in jit-reader.h
> @@ -1017,6 +995,18 @@
> fi
> ;;
> esac
> +
Put here a comment with reference to the Python issue why '-m threading' is
not used.
> + AC_MSG_CHECKING(whether python supports threads)
> + saved_CPPFLAGS="${CPPFLAGS}"
> + CPPFLAGS="${PYTHON_CPPFLAGS}"
> + AC_PREPROC_IFELSE(AC_LANG_SOURCE([[
> +#include <Python.h>
> +#ifndef WITH_THREAD
> +#error
> +#endif
A nitpick but the indentation should be:
#ifndef WITH_THREAD
# error
#endif
> + ]]), [python_has_threads=yes], [python_has_threads=no])
Revert the condition. If for any reason the compilation fails then it is
safer to default to 'python_has_threads=yes' than to 'no'.
> + AC_MSG_RESULT(${python_has_threads})
> + CPPFLAGS="${saved_CPPFLAGS}"
> else
> # Even if Python support is not compiled in, we need to have these files
> # included.
> @@ -1028,6 +1018,34 @@
> AC_SUBST(PYTHON_CPPFLAGS)
> AC_SUBST(PYTHON_LIBS)
>
> +# Provide a --enable-libmcheck/--disable-libmcheck set of options
> +# allowing a user to enable this option even when building releases,
> +# or to disable it when building a snapshot.
> +AC_ARG_ENABLE(libmcheck,
> + AS_HELP_STRING([--enable-libmcheck],
> + [Try building GDB 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])
> +
> +# Enable -lmcheck by default (it provides cheap-enough memory mangling),
> +# but turn it off if Python is enabled with threads, and for releases.
Here should be also comment with the PR libc/9939 to explain why to "turn it
off if Python is enabled with threads".
> +if test -z "${ENABLE_LIBMCHECK}" \
> + -a \( "${have_libpython}" = "no" \
> + -o "${python_has_threads}" = "no" \) \
> + && $development; then
> + ENABLE_LIBMCHECK=yes
> +fi
> +
> +if test "$ENABLE_LIBMCHECK" = "yes" ; then
> + if test "${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_CHECK_LIB(mcheck, main)
> +fi
> +
> # ------------------------- #
> # Checks for header files. #
> # ------------------------- #
Thanks,
Jan