From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30589 invoked by alias); 5 Jun 2010 12:45:35 -0000 Received: (qmail 30577 invoked by uid 22791); 5 Jun 2010 12:45:33 -0000 X-SWARE-Spam-Status: No, hits=-5.8 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_HI,SPF_HELO_PASS,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 05 Jun 2010 12:45:29 +0000 Received: from int-mx04.intmail.prod.int.phx2.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.17]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o55CjRY9008981 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Sat, 5 Jun 2010 08:45:27 -0400 Received: from host0.dyn.jankratochvil.net (ovpn01.gateway.prod.ext.phx2.redhat.com [10.5.9.1]) by int-mx04.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o55CjOPN003468 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sat, 5 Jun 2010 08:45:26 -0400 Received: from host0.dyn.jankratochvil.net (localhost [127.0.0.1]) by host0.dyn.jankratochvil.net (8.14.4/8.14.4) with ESMTP id o55CjOto009857; Sat, 5 Jun 2010 14:45:24 +0200 Received: (from jkratoch@localhost) by host0.dyn.jankratochvil.net (8.14.4/8.14.4/Submit) id o55CjNS5009856; Sat, 5 Jun 2010 14:45:23 +0200 Date: Sat, 05 Jun 2010 12:45:00 -0000 From: Jan Kratochvil To: Doug Evans Cc: Tom Tromey , gdb-patches@sourceware.org Subject: Re: [patch] Smaller gdb: -rdynamic -> -Wl,--dynamic-list Message-ID: <20100605124522.GA31976@host0.dyn.jankratochvil.net> References: <20100513131840.GA31032@host0.dyn.jankratochvil.net> <20100516180828.GA6448@host0.dyn.jankratochvil.net> <20100528185211.GA30412@host0.dyn.jankratochvil.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.20 (2009-12-10) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-06/txt/msg00155.txt.bz2 On Sat, 05 Jun 2010 04:48:33 +0200, Doug Evans wrote: > "ImportError: /usr/grte/v1/k8-linux/lib/python2.4/lib-dynload/itertools.so: > undefined symbol: PyExc_StopIteration" > > when I did "import itertools". > > I was statically linking libpythonX.Y.a. > > I'm not sure what the right fix is. This is an open Python bug: http://bugs.python.org/issue4434 (I was not aware of it.) I doubt how useful is to depend on .so modules while having .a libpython linked in but I understand my patch broke compatibility with such case. With libpythonX.Y.so.1.0 the problem does not happen as all the symbols are present in its .dynsym. There is an inefficiency Python-2.6.4/Include/pyport.h uses dllimport and dllimport declarations for the API but it has no support for gcc __attribute__((visibility)) there and thus libpythonX.Y.so.1.0's .dynsym is excessively large there. I was unable to test it as Fedora (13) does not ship libpythonX.Y.a (and it failed to build one when I tried to). Could you test it, please? If some existing python tests were already broken I can drop this new one. No regressions on {x86_64,x86_64-m32,i686}-fedora13-linux-gnu. Thanks, Jan gdb/ 2010-06-05 Jan Kratochvil * configure.ac <"${have_libpython}" != no>: New workaround of python#4434. * configure: Regenerate. gdb/testsuite/ 2010-06-05 Jan Kratochvil * gdb.python/python.exp (pythonX.Y/lib-dynload/*.so): New. --- 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) --- 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 --- 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"