From 3bebe2f205d1c30429898da05047b656e6796f6a Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Tue, 8 Jun 2010 16:41:45 +0000 Subject: [PATCH] gdb/ * configure.ac <"${have_libpython}" != no>: New workaround of python#4434. * configure: Regenerate. gdb/testsuite/ * gdb.python/python.exp (pythonX.Y/lib-dynload/*.so): New. --- gdb/ChangeLog | 6 ++++ gdb/configure | 61 ++++++++++++++++++++++++++++++------- gdb/configure.ac | 43 ++++++++++++++++++++------ gdb/testsuite/ChangeLog | 4 +++ gdb/testsuite/gdb.python/python.exp | 3 ++ 5 files changed, 96 insertions(+), 21 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 83d00ab..e593274 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2010-06-08 Jan Kratochvil + + * configure.ac <"${have_libpython}" != no>: New workaround of + python#4434. + * configure: Regenerate. + 2010-06-08 Hui Zhu * record.c (record_wait): Move signal out of replay code. diff --git a/gdb/configure b/gdb/configure index bae0b5b..f3cb23a 100755 --- a/gdb/configure +++ b/gdb/configure @@ -14199,7 +14199,9 @@ $as_echo_n "checking for the dynamic export flag... " >&6; } # Older GNU ld supports --export-dynamic but --dynamic-list it does not. RDYNAMIC="-Wl,--dynamic-list=${srcdir}/proc-service.list" LDFLAGS="$LDFLAGS $RDYNAMIC" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + dynamic_list=false + if test "${have_libpython}" = no; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -14211,12 +14213,51 @@ main () } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - found="-Wl,--dynamic-list" - RDYNAMIC='-Wl,--dynamic-list=$(srcdir)/proc-service.list' + dynamic_list=true +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + else + # Workaround http://bugs.python.org/issue4434 where static + # libpythonX.Y.a would get its symbols required for + # pythonX.Y/lib-dynload/*.so modules hidden by -Wl,--dynamic-list. + # Problem does not happen for the recommended libpythonX.Y.so linkage. + old_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PYTHON_CFLAGS" + if test "$cross_compiling" = yes; then : + true else - RDYNAMIC="-rdynamic" - LDFLAGS="$old_LDFLAGS $RDYNAMIC" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include "${have_libpython}/Python.h" +int +main () +{ +int err; + Py_Initialize (); + err = PyRun_SimpleString ("import itertools\n"); + Py_Finalize (); + return err == 0 ? 0 : 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + dynamic_list=true +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + CFLAGS="$old_CFLAGS" + fi + if $dynamic_list;then + found="-Wl,--dynamic-list" + RDYNAMIC='-Wl,--dynamic-list=$(srcdir)/proc-service.list' + else + RDYNAMIC="-rdynamic" + LDFLAGS="$old_LDFLAGS $RDYNAMIC" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -14231,14 +14272,12 @@ if ac_fn_c_try_link "$LINENO"; then : found="-rdynamic" else found="no" - # Error on its usage by .mh file. - RDYNAMIC="no-rdynamic-available" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext + # Error on its usage by .mh file. + RDYNAMIC="no-rdynamic-available" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext + fi LDFLAGS="$old_LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $found" >&5 diff --git a/gdb/configure.ac b/gdb/configure.ac index d65fd49..6d140cb 100644 --- a/gdb/configure.ac +++ b/gdb/configure.ac @@ -1470,16 +1470,39 @@ if test ${build} = ${host} -a ${host} = ${target} ; then # Older GNU ld supports --export-dynamic but --dynamic-list it does not. RDYNAMIC="-Wl,--dynamic-list=${srcdir}/proc-service.list" LDFLAGS="$LDFLAGS $RDYNAMIC" - AC_TRY_LINK([], [], - [found="-Wl,--dynamic-list" - RDYNAMIC='-Wl,--dynamic-list=$(srcdir)/proc-service.list'], - [RDYNAMIC="-rdynamic" - LDFLAGS="$old_LDFLAGS $RDYNAMIC" - AC_TRY_LINK([], [], - [found="-rdynamic"], - [found="no" - # Error on its usage by .mh file. - RDYNAMIC="no-rdynamic-available"])]) + dynamic_list=false + if test "${have_libpython}" = no; then + AC_TRY_LINK([], [], [dynamic_list=true]) + else + # Workaround http://bugs.python.org/issue4434 where static + # libpythonX.Y.a would get its symbols required for + # pythonX.Y/lib-dynload/*.so modules hidden by -Wl,--dynamic-list. + # Problem does not happen for the recommended libpythonX.Y.so linkage. + old_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $PYTHON_CFLAGS" + AC_RUN_IFELSE( + AC_LANG_PROGRAM( + [#include "]${have_libpython}[/Python.h"], + [int err; + Py_Initialize (); + err = PyRun_SimpleString ("import itertools\n"); + Py_Finalize (); + return err == 0 ? 0 : 1;]), + [dynamic_list=true], [], [true]) + CFLAGS="$old_CFLAGS" + fi + if $dynamic_list;then + found="-Wl,--dynamic-list" + RDYNAMIC='-Wl,--dynamic-list=$(srcdir)/proc-service.list' + else + RDYNAMIC="-rdynamic" + LDFLAGS="$old_LDFLAGS $RDYNAMIC" + AC_TRY_LINK([], [], + [found="-rdynamic"], + [found="no" + # Error on its usage by .mh file. + RDYNAMIC="no-rdynamic-available"]) + fi AC_SUBST(RDYNAMIC) LDFLAGS="$old_LDFLAGS" AC_MSG_RESULT($found) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 5ec9006..815c3bc 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2010-06-08 Jan Kratochvil + + * gdb.python/python.exp (pythonX.Y/lib-dynload/*.so): New. + 2010-06-07 Jan Kratochvil Test PR 10640. diff --git a/gdb/testsuite/gdb.python/python.exp b/gdb/testsuite/gdb.python/python.exp index b345ad2..185f45d 100644 --- a/gdb/testsuite/gdb.python/python.exp +++ b/gdb/testsuite/gdb.python/python.exp @@ -80,3 +80,6 @@ gdb_test "source $srcdir/$subdir/source2.py" "yes" gdb_test "python print gdb.current_objfile()" "None" gdb_test "python print gdb.objfiles()" "\\\[\\\]" + +# Test http://bugs.python.org/issue4434 workaround in configure.ac +gdb_test "python import itertools; print 'IMPOR'+'TED'" "IMPORTED" "pythonX.Y/lib-dynload/*.so" -- 2.7.4