This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]