Re: [patch] Smaller gdb: -rdynamic -> -Wl,--dynamic-list

Jan Kratochvil
2010-06-15T20:36:14Z

On Tue, 15 Jun 2010 19:31:01 +0200, Tom Tromey wrote:
> >>>>> "Andreas" == Andreas Schwab <schwab@linux-m68k.org> writes:
>
> Andreas> 2010-06-13 Andreas Schwab <schwab@linux-m68k.org>
> Andreas> * configure.ac: Check for RDYNAMIC also for cross builds.
> Andreas> * configure: Regenerate.
>
> This is ok. Thanks.

A patch on top of this one is attached.

Original code had `-rdynamic' hardcoded in the .mh files. .mh files get
included iff we have ${gdb_native}. It means two things:

(1) The `-rdynamic' upgrade to `-Wl,--dynamic-list' makes sense only iff
we have ${gdb_native}.

(2) Iff we have ${gdb_native} we should always provide at least `-rdynamic'.
Current code with my change for non-$GCC configurations provided empty
RDYNAMIC and thus breaking non-$GCC threading support.
(OTOH there is a notice -rdynamic' is required only for $GCC thus probably
nothing got broken.)

Moreover as the functionality is really tested (by either AC_RUN_IFELSE or
AC_TRY_LINK) it should not be needed to check $GCC. On non-$GCC the
functionality test should always fail anyway. Removed the $GCC check.

This patch is more a cleanup only / safer change from the original code before
`-Wl,--dynamic-list' introduction. I am not aware on which configuration this
patch below can change anything. No problem dropping it.

Tested build on x86_64-fedora13-linux-gnu and x86_64-rhel4-linux-gnu.

Thanks,
Jan

2010-06-15 Jan Kratochvil <jan.kratochvil@redhat.com>

* configure.ac: Always set RDYNAMIC at least as `-rdynamic'.
* configure: Regenerate.

--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -1453,54 +1453,47 @@ aix*)
;;
esac

+AC_MSG_CHECKING(for the dynamic export flag)
+dynamic_list=false
if test "${gdb_native}" = yes; then
- if test "$GCC" = "yes" ; then
- # The dynamically loaded libthread_db needs access to symbols in the gdb
- # executable. Older GNU ld supports --export-dynamic but --dynamic-list
- # may not be supported there.
- AC_MSG_CHECKING(for the dynamic export flag)
- old_LDFLAGS="$LDFLAGS"
- # Older GNU ld supports --export-dynamic but --dynamic-list it does not.
- RDYNAMIC="-Wl,--dynamic-list=${srcdir}/proc-service.list"
- LDFLAGS="$LDFLAGS $RDYNAMIC"
- 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)
+ # The dynamically loaded libthread_db needs access to symbols in the gdb
+ # executable. Older GNU ld supports --export-dynamic but --dynamic-list
+ # may not be supported there.
+ old_LDFLAGS="$LDFLAGS"
+ # Older GNU ld supports --export-dynamic but --dynamic-list it does not.
+ RDYNAMIC="-Wl,--dynamic-list=${srcdir}/proc-service.list"
+ LDFLAGS="$LDFLAGS $RDYNAMIC"
+ 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
+ LDFLAGS="$old_LDFLAGS"
+fi
+if $dynamic_list; then
+ found="-Wl,--dynamic-list"
+ RDYNAMIC='-Wl,--dynamic-list=$(srcdir)/proc-service.list'
+else
+ found="-rdynamic"
+ RDYNAMIC="-rdynamic"
fi
+AC_SUBST(RDYNAMIC)
+AC_MSG_RESULT($found)

dnl For certain native configurations, we need to check whether thread
dnl support can be built in or not.