gdb/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Tue, 8 Jun 2010 16:41:45 +0000 (16:41 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Tue, 8 Jun 2010 16:41:45 +0000 (16:41 +0000)
* 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
gdb/configure
gdb/configure.ac
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.python/python.exp

index 83d00ab..e593274 100644 (file)
@@ -1,3 +1,9 @@
+2010-06-08  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * configure.ac <"${have_libpython}" != no>: New workaround of
+       python#4434.
+       * configure: Regenerate.
+
 2010-06-08  Hui Zhu  <teawater@gmail.com>
 
        * record.c (record_wait): Move signal out of replay code.
index bae0b5b..f3cb23a 100755 (executable)
@@ -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
index d65fd49..6d140cb 100644 (file)
@@ -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)
index 5ec9006..815c3bc 100644 (file)
@@ -1,3 +1,7 @@
+2010-06-08  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * gdb.python/python.exp (pythonX.Y/lib-dynload/*.so): New.
+
 2010-06-07  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        Test PR 10640.
index b345ad2..185f45d 100644 (file)
@@ -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"