From: Jan Kratochvil Date: Fri, 28 May 2010 18:50:35 +0000 (+0000) Subject: gdb/ X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f6528abd6444820594f6d2147b9aa7f312539411;p=binutils-gdb.git gdb/ * Makefile.in (RDYNAMIC): New. (SFILES): Add proc-service.list. * config/alpha/alpha-linux.mh (NAT_CDEPS): New. (LOADLIBES): Replace -rdynamic by $(RDYNAMIC). * config/arm/linux.mh: Likewise. * config/i386/linux.mh: Likewise. * config/i386/linux64.mh: Likewise. * config/ia64/linux.mh: Likewise. * config/m32r/linux.mh: Likewise. * config/m68k/linux.mh: Likewise. * config/mips/linux.mh: Likewise. * config/pa/linux.mh: Likewise. * config/powerpc/linux.mh: Likewise. * config/powerpc/ppc64-linux.mh: Likewise. * config/s390/s390.mh: Likewise. * config/sparc/linux.mh: Likewise. * config/sparc/linux64.mh: Likewise. * config/xtensa/linux.mh: Likewise. * configure.ac: New RDYNAMIC on native host and GCC. (solaris*): Replace -Wl,-export-dynamic by $RDYNAMIC. * configure: Regenerate. * proc-service.list: New. gdb/gdbserver/ * Makefile.in (SFILES): Add $(srcdir)/proc-service.list. (CDEPS): New. * configure.ac (RDYNAMIC): New AC_MSG_CHECKING wrapping. Test also -Wl,--dynamic-list. * configure: Regenerate. * proc-service.list: New. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 83da1f4d5ef..41406dadab1 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,28 @@ +2010-05-28 Jan Kratochvil + + * Makefile.in (RDYNAMIC): New. + (SFILES): Add proc-service.list. + * config/alpha/alpha-linux.mh (NAT_CDEPS): New. + (LOADLIBES): Replace -rdynamic by $(RDYNAMIC). + * config/arm/linux.mh: Likewise. + * config/i386/linux.mh: Likewise. + * config/i386/linux64.mh: Likewise. + * config/ia64/linux.mh: Likewise. + * config/m32r/linux.mh: Likewise. + * config/m68k/linux.mh: Likewise. + * config/mips/linux.mh: Likewise. + * config/pa/linux.mh: Likewise. + * config/powerpc/linux.mh: Likewise. + * config/powerpc/ppc64-linux.mh: Likewise. + * config/s390/s390.mh: Likewise. + * config/sparc/linux.mh: Likewise. + * config/sparc/linux64.mh: Likewise. + * config/xtensa/linux.mh: Likewise. + * configure.ac: New RDYNAMIC on native host and GCC. + (solaris*): Replace -Wl,-export-dynamic by $RDYNAMIC. + * configure: Regenerate. + * proc-service.list: New. + 2010-05-28 Jan Kratochvil * linux-nat.c (linux_nat_core_of_thread_1): Fix crash on invalid diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 754671ffb80..b01a3c4dc62 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -157,6 +157,8 @@ GDB_WERROR_CFLAGS = $(WERROR_CFLAGS) GDB_WARN_CFLAGS_NO_FORMAT = `echo " $(GDB_WARN_CFLAGS) " | sed "s/ -Wformat-nonliteral / /g"` +RDYNAMIC = @RDYNAMIC@ + # Where is the INTL library? Typically in ../intl. INTL = @LIBINTL@ INTL_DEPS = @LIBINTL_DEP@ @@ -683,7 +685,7 @@ SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.c \ objc-exp.y objc-lang.c \ objfiles.c osabi.c observer.c osdata.c \ p-exp.y p-lang.c p-typeprint.c p-valprint.c parse.c printcmd.c \ - progspace.c \ + proc-service.list progspace.c \ prologue-value.c psymtab.c \ regcache.c reggroups.c remote.c remote-fileio.c reverse.c \ scm-exp.c scm-lang.c scm-valprint.c \ diff --git a/gdb/config/alpha/alpha-linux.mh b/gdb/config/alpha/alpha-linux.mh index 7fd0d8dfdd4..5074f1e0fb9 100644 --- a/gdb/config/alpha/alpha-linux.mh +++ b/gdb/config/alpha/alpha-linux.mh @@ -3,10 +3,11 @@ NAT_FILE= config/nm-linux.h NATDEPFILES= inf-ptrace.o corelow.o alpha-linux-nat.o \ fork-child.o proc-service.o linux-thread-db.o \ linux-nat.o linux-fork.o +NAT_CDEPS = $(srcdir)/proc-service.list # The dynamically loaded libthread_db needs access to symbols in the # gdb executable. -LOADLIBES = -ldl -rdynamic +LOADLIBES = -ldl $(RDYNAMIC) # doublest.c currently assumes some properties of FP arithmetic # on the host which require this. diff --git a/gdb/config/arm/linux.mh b/gdb/config/arm/linux.mh index 6020d33de75..aa6d08ab22e 100644 --- a/gdb/config/arm/linux.mh +++ b/gdb/config/arm/linux.mh @@ -3,5 +3,6 @@ NAT_FILE= config/nm-linux.h NATDEPFILES= inf-ptrace.o fork-child.o arm-linux-nat.o \ proc-service.o linux-thread-db.o linux-nat.o linux-fork.o +NAT_CDEPS = $(srcdir)/proc-service.list -LOADLIBES= -ldl -rdynamic +LOADLIBES= -ldl $(RDYNAMIC) diff --git a/gdb/config/i386/linux.mh b/gdb/config/i386/linux.mh index 3970e32e95f..302f6d51612 100644 --- a/gdb/config/i386/linux.mh +++ b/gdb/config/i386/linux.mh @@ -5,7 +5,8 @@ NATDEPFILES= inf-ptrace.o fork-child.o \ i386-nat.o i386-linux-nat.o \ proc-service.o linux-thread-db.o \ linux-nat.o linux-fork.o +NAT_CDEPS = $(srcdir)/proc-service.list # The dynamically loaded libthread_db needs access to symbols in the # gdb executable. -LOADLIBES = -ldl -rdynamic +LOADLIBES = -ldl $(RDYNAMIC) diff --git a/gdb/config/i386/linux64.mh b/gdb/config/i386/linux64.mh index 19f3be0f127..3e593009946 100644 --- a/gdb/config/i386/linux64.mh +++ b/gdb/config/i386/linux64.mh @@ -3,7 +3,8 @@ NATDEPFILES= inf-ptrace.o fork-child.o \ i386-nat.o amd64-nat.o amd64-linux-nat.o linux-nat.o \ proc-service.o linux-thread-db.o linux-fork.o NAT_FILE= config/nm-linux.h +NAT_CDEPS = $(srcdir)/proc-service.list # The dynamically loaded libthread_db needs access to symbols in the # gdb executable. -LOADLIBES = -ldl -rdynamic +LOADLIBES = -ldl $(RDYNAMIC) diff --git a/gdb/config/ia64/linux.mh b/gdb/config/ia64/linux.mh index 8a3dc30a660..a069b5b0a21 100644 --- a/gdb/config/ia64/linux.mh +++ b/gdb/config/ia64/linux.mh @@ -4,5 +4,6 @@ NAT_FILE= config/nm-linux.h NATDEPFILES= inf-ptrace.o fork-child.o corelow.o \ core-regset.o ia64-linux-nat.o \ proc-service.o linux-thread-db.o linux-nat.o linux-fork.o +NAT_CDEPS = $(srcdir)/proc-service.list -LOADLIBES = -ldl -rdynamic +LOADLIBES = -ldl $(RDYNAMIC) diff --git a/gdb/config/m32r/linux.mh b/gdb/config/m32r/linux.mh index a92456ac8e2..b3f1c5f447d 100644 --- a/gdb/config/m32r/linux.mh +++ b/gdb/config/m32r/linux.mh @@ -4,5 +4,6 @@ NAT_FILE= config/nm-linux.h NATDEPFILES= inf-ptrace.o fork-child.o corelow.o \ m32r-linux-nat.o proc-service.o linux-thread-db.o \ linux-nat.o linux-fork.o +NAT_CDEPS = $(srcdir)/proc-service.list -LOADLIBES= -ldl -rdynamic +LOADLIBES= -ldl $(RDYNAMIC) diff --git a/gdb/config/m68k/linux.mh b/gdb/config/m68k/linux.mh index 9759bc58b19..4a95208301c 100644 --- a/gdb/config/m68k/linux.mh +++ b/gdb/config/m68k/linux.mh @@ -4,7 +4,8 @@ NAT_FILE= config/nm-linux.h NATDEPFILES= inf-ptrace.o fork-child.o \ corelow.o m68klinux-nat.o \ proc-service.o linux-thread-db.o linux-nat.o linux-fork.o +NAT_CDEPS = $(srcdir)/proc-service.list # The dynamically loaded libthread_db needs access to symbols in the # gdb executable. -LOADLIBES = -ldl -rdynamic +LOADLIBES = -ldl $(RDYNAMIC) diff --git a/gdb/config/mips/linux.mh b/gdb/config/mips/linux.mh index 309ee89c29f..5e9dbb66858 100644 --- a/gdb/config/mips/linux.mh +++ b/gdb/config/mips/linux.mh @@ -3,5 +3,6 @@ NAT_FILE= config/nm-linux.h NATDEPFILES= inf-ptrace.o fork-child.o mips-linux-nat.o \ linux-thread-db.o proc-service.o \ linux-nat.o linux-fork.o +NAT_CDEPS = $(srcdir)/proc-service.list -LOADLIBES = -ldl -rdynamic +LOADLIBES = -ldl $(RDYNAMIC) diff --git a/gdb/config/pa/linux.mh b/gdb/config/pa/linux.mh index cd709e3b225..293964fba26 100644 --- a/gdb/config/pa/linux.mh +++ b/gdb/config/pa/linux.mh @@ -3,5 +3,6 @@ NAT_FILE= config/nm-linux.h NATDEPFILES= inf-ptrace.o fork-child.o corelow.o \ hppa-linux-nat.o proc-service.o linux-thread-db.o linux-nat.o \ linux-fork.o +NAT_CDEPS = $(srcdir)/proc-service.list -LOADLIBES = -ldl -rdynamic +LOADLIBES = -ldl $(RDYNAMIC) diff --git a/gdb/config/powerpc/linux.mh b/gdb/config/powerpc/linux.mh index f31386c8d42..501f2d670a8 100644 --- a/gdb/config/powerpc/linux.mh +++ b/gdb/config/powerpc/linux.mh @@ -6,5 +6,6 @@ NAT_FILE= config/nm-linux.h NATDEPFILES= inf-ptrace.o fork-child.o \ ppc-linux-nat.o proc-service.o linux-thread-db.o \ linux-nat.o linux-fork.o +NAT_CDEPS = $(srcdir)/proc-service.list -LOADLIBES = -ldl -rdynamic +LOADLIBES = -ldl $(RDYNAMIC) diff --git a/gdb/config/powerpc/ppc64-linux.mh b/gdb/config/powerpc/ppc64-linux.mh index 562baa48ade..5675fdca378 100644 --- a/gdb/config/powerpc/ppc64-linux.mh +++ b/gdb/config/powerpc/ppc64-linux.mh @@ -6,6 +6,7 @@ NAT_FILE= config/nm-linux.h NATDEPFILES= inf-ptrace.o fork-child.o \ ppc-linux-nat.o proc-service.o linux-thread-db.o \ linux-nat.o linux-fork.o +NAT_CDEPS = $(srcdir)/proc-service.list # The PowerPC has severe limitations on TOC size, and uses them even # for non-PIC code. GDB overflows those tables when compiling with @@ -15,4 +16,4 @@ MH_CFLAGS= -mminimal-toc # The dynamically loaded libthread_db needs access to symbols in the # gdb executable. -LOADLIBES= -ldl -rdynamic +LOADLIBES= -ldl $(RDYNAMIC) diff --git a/gdb/config/s390/s390.mh b/gdb/config/s390/s390.mh index 765df6bdcb7..9e62904efff 100644 --- a/gdb/config/s390/s390.mh +++ b/gdb/config/s390/s390.mh @@ -2,4 +2,5 @@ NAT_FILE= config/nm-linux.h NATDEPFILES= inf-ptrace.o fork-child.o corelow.o s390-nat.o \ linux-thread-db.o proc-service.o linux-nat.o linux-fork.o -LOADLIBES = -ldl -rdynamic +NAT_CDEPS = $(srcdir)/proc-service.list +LOADLIBES = -ldl $(RDYNAMIC) diff --git a/gdb/config/sparc/linux.mh b/gdb/config/sparc/linux.mh index f3873e6f077..32d1b6abb54 100644 --- a/gdb/config/sparc/linux.mh +++ b/gdb/config/sparc/linux.mh @@ -4,7 +4,8 @@ NATDEPFILES= sparc-nat.o sparc-linux-nat.o \ corelow.o core-regset.o fork-child.o inf-ptrace.o \ proc-service.o linux-thread-db.o \ linux-nat.o linux-fork.o +NAT_CDEPS = $(srcdir)/proc-service.list # The dynamically loaded libthread_db needs access to symbols in the # gdb executable. -LOADLIBES = -ldl -rdynamic +LOADLIBES = -ldl $(RDYNAMIC) diff --git a/gdb/config/sparc/linux64.mh b/gdb/config/sparc/linux64.mh index 5b1497a62d0..b54c3b76cba 100644 --- a/gdb/config/sparc/linux64.mh +++ b/gdb/config/sparc/linux64.mh @@ -5,7 +5,8 @@ NATDEPFILES= sparc-nat.o sparc64-nat.o sparc64-linux-nat.o \ fork-child.o inf-ptrace.o \ proc-service.o linux-thread-db.o \ linux-nat.o linux-fork.o +NAT_CDEPS = $(srcdir)/proc-service.list # The dynamically loaded libthread_db needs access to symbols in the # gdb executable. -LOADLIBES = -ldl -rdynamic +LOADLIBES = -ldl $(RDYNAMIC) diff --git a/gdb/config/xtensa/linux.mh b/gdb/config/xtensa/linux.mh index 174b7ac490d..c83eac0e162 100644 --- a/gdb/config/xtensa/linux.mh +++ b/gdb/config/xtensa/linux.mh @@ -4,5 +4,6 @@ NAT_FILE= config/nm-linux.h NATDEPFILES= inf-ptrace.o fork-child.o xtensa-linux-nat.o \ linux-thread-db.o proc-service.o linux-nat.o linux-fork.o +NAT_CDEPS = $(srcdir)/proc-service.list -LOADLIBES = -ldl -rdynamic +LOADLIBES = -ldl $(RDYNAMIC) diff --git a/gdb/configure b/gdb/configure index 1ac7d4b7afc..5380293df5e 100755 --- a/gdb/configure +++ b/gdb/configure @@ -657,6 +657,7 @@ SYSTEM_GDBINIT TARGET_SYSTEM_ROOT_DEFINE TARGET_SYSTEM_ROOT CONFIG_LDFLAGS +RDYNAMIC ALLOCA PYTHON_CFLAGS python_prog_path @@ -14171,6 +14172,62 @@ esac if test ${build} = ${host} -a ${host} = ${target} ; 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. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the dynamic export flag" >&5 +$as_echo_n "checking for the dynamic export flag... " >&6; } + 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" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; 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 +main () +{ + + ; + return 0; +} +_ACEOF +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 +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + LDFLAGS="$old_LDFLAGS" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $found" >&5 +$as_echo "$found" >&6; } + fi + case ${host_os} in hpux*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HPUX/OSF thread support" >&5 @@ -14253,38 +14310,7 @@ _ACEOF fi - if test "$GCC" = "yes" ; then - # The GNU linker requires the -export-dynamic option to make - # all symbols visible in the dynamic symbol table. - hold_ldflags=$LDFLAGS - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the ld -export-dynamic flag" >&5 -$as_echo_n "checking for the ld -export-dynamic flag... " >&6; } - LDFLAGS="${LDFLAGS} -Wl,-export-dynamic" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -int i; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - found=yes -else - found=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$hold_ldflags - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $found" >&5 -$as_echo "$found" >&6; } - if test $found = yes; then - CONFIG_LDFLAGS="${CONFIG_LDFLAGS} -Wl,-export-dynamic" - fi - fi + CONFIG_LDFLAGS="${CONFIG_LDFLAGS} $RDYNAMIC" # Sun randomly tweaked the prototypes in # at one point. { $as_echo "$as_me:${as_lineno-$LINENO}: checking if is old" >&5 diff --git a/gdb/configure.ac b/gdb/configure.ac index 70608afedbe..16789b9aefa 100644 --- a/gdb/configure.ac +++ b/gdb/configure.ac @@ -1450,6 +1450,30 @@ dnl Note that we only want this if we are both native (host == target), dnl and not doing a canadian cross build (build == host). if test ${build} = ${host} -a ${host} = ${target} ; 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" + 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"])]) + AC_SUBST(RDYNAMIC) + LDFLAGS="$old_LDFLAGS" + AC_MSG_RESULT($found) + fi + case ${host_os} in hpux*) AC_MSG_CHECKING(for HPUX/OSF thread support) @@ -1480,19 +1504,7 @@ if test ${build} = ${host} -a ${host} = ${target} ; then CONFIG_OBS="${CONFIG_OBS} sol-thread.o" CONFIG_SRCS="${CONFIG_SRCS} sol-thread.c" AC_CHECK_LIB(dl, dlopen) - if test "$GCC" = "yes" ; then - # The GNU linker requires the -export-dynamic option to make - # all symbols visible in the dynamic symbol table. - hold_ldflags=$LDFLAGS - AC_MSG_CHECKING(for the ld -export-dynamic flag) - LDFLAGS="${LDFLAGS} -Wl,-export-dynamic" - AC_TRY_LINK(, [int i;], found=yes, found=no) - LDFLAGS=$hold_ldflags - AC_MSG_RESULT($found) - if test $found = yes; then - CONFIG_LDFLAGS="${CONFIG_LDFLAGS} -Wl,-export-dynamic" - fi - fi + CONFIG_LDFLAGS="${CONFIG_LDFLAGS} $RDYNAMIC" # Sun randomly tweaked the prototypes in # at one point. AC_MSG_CHECKING(if is old) diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 16c5149210e..b7d0c0cfc3f 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,12 @@ +2010-05-28 Jan Kratochvil + + * Makefile.in (SFILES): Add $(srcdir)/proc-service.list. + (CDEPS): New. + * configure.ac (RDYNAMIC): New AC_MSG_CHECKING wrapping. Test also + -Wl,--dynamic-list. + * configure: Regenerate. + * proc-service.list: New. + 2010-05-28 Jan Kratochvil * linux-low.c (linux_core_of_thread): Fix crash on invalid CONTENT. diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in index 5e6c4c91ee2..6a75af7d14d 100644 --- a/gdb/gdbserver/Makefile.in +++ b/gdb/gdbserver/Makefile.in @@ -100,7 +100,8 @@ INTERNAL_LDFLAGS = $(LDFLAGS) @RDYNAMIC@ # All source files that go into linking GDB remote server. SFILES= $(srcdir)/gdbreplay.c $(srcdir)/inferiors.c \ - $(srcdir)/mem-break.c $(srcdir)/proc-service.c $(srcdir)/regcache.c \ + $(srcdir)/mem-break.c $(srcdir)/proc-service.c \ + $(srcdir)/proc-service.list $(srcdir)/regcache.c \ $(srcdir)/remote-utils.c $(srcdir)/server.c $(srcdir)/target.c \ $(srcdir)/thread-db.c $(srcdir)/utils.c \ $(srcdir)/linux-arm-low.c $(srcdir)/linux-cris-low.c \ @@ -133,6 +134,7 @@ OBS = inferiors.o regcache.o remote-utils.o server.o signals.o target.o \ GDBREPLAY_OBS = gdbreplay.o version.o GDBSERVER_LIBS = @GDBSERVER_LIBS@ XM_CLIBS = @LIBS@ +CDEPS = $(srcdir)/proc-service.list # XML files to compile in to gdbserver, if any. XML_DIR = $(srcdir)/../features diff --git a/gdb/gdbserver/configure b/gdb/gdbserver/configure index 8db886155a8..d264c23998c 100755 --- a/gdb/gdbserver/configure +++ b/gdb/gdbserver/configure @@ -4349,8 +4349,13 @@ USE_THREAD_DB= if test "$srv_linux_thread_db" = "yes"; then if test "$ac_cv_lib_dl_dlopen" = "yes"; then srv_libs="-ldl" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the dynamic export flag" >&5 +$as_echo_n "checking for the dynamic export flag... " >&6; } old_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -rdynamic" + # Older GNU ld supports --export-dynamic but --dynamic-list may not be + # supported there. + RDYNAMIC="-Wl,--dynamic-list=${srcdir}/proc-service.list" + LDFLAGS="$LDFLAGS $RDYNAMIC" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4363,14 +4368,37 @@ main () } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - RDYNAMIC=-rdynamic + found="-Wl,--dynamic-list" + RDYNAMIC='-Wl,--dynamic-list=$(srcdir)/proc-service.list' else - RDYNAMIC= + RDYNAMIC="-rdynamic" + LDFLAGS="$old_LDFLAGS $RDYNAMIC" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + found="-rdynamic" +else + found="no" + RDYNAMIC="" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$old_LDFLAGS" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $found" >&5 +$as_echo "$found" >&6; } else srv_libs="-lthread_db" fi diff --git a/gdb/gdbserver/configure.ac b/gdb/gdbserver/configure.ac index a2dfa372546..bc550b679df 100644 --- a/gdb/gdbserver/configure.ac +++ b/gdb/gdbserver/configure.ac @@ -188,11 +188,24 @@ USE_THREAD_DB= if test "$srv_linux_thread_db" = "yes"; then if test "$ac_cv_lib_dl_dlopen" = "yes"; then srv_libs="-ldl" + AC_MSG_CHECKING(for the dynamic export flag) old_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -rdynamic" - AC_TRY_LINK([], [], [RDYNAMIC=-rdynamic], [RDYNAMIC=]) + # Older GNU ld supports --export-dynamic but --dynamic-list may not be + # supported there. + 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" + RDYNAMIC=""])]) AC_SUBST(RDYNAMIC) LDFLAGS="$old_LDFLAGS" + AC_MSG_RESULT($found) else srv_libs="-lthread_db" fi diff --git a/gdb/gdbserver/proc-service.list b/gdb/gdbserver/proc-service.list new file mode 100644 index 00000000000..03b05608ee9 --- /dev/null +++ b/gdb/gdbserver/proc-service.list @@ -0,0 +1,30 @@ +/* -Wl,--dynamic-list symbols exported for libthread_db. + + Copyright (C) 2010 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +{ + ps_get_thread_area; + ps_getpid; + ps_lgetfpregs; + ps_lgetregs; + ps_lsetfpregs; + ps_lsetregs; + ps_pdread; + ps_pdwrite; + ps_pglobal_lookup; +}; diff --git a/gdb/proc-service.list b/gdb/proc-service.list new file mode 100644 index 00000000000..9b3eb433270 --- /dev/null +++ b/gdb/proc-service.list @@ -0,0 +1,40 @@ +/* -Wl,--dynamic-list symbols exported for libthread_db. + + Copyright (C) 2010 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +{ + ps_get_thread_area; + ps_getpid; + ps_lcontinue; + ps_lgetfpregs; + ps_lgetregs; + ps_lgetxregs; + ps_lgetxregsize; + ps_lsetfpregs; + ps_lsetregs; + ps_lsetxregs; + ps_lstop; + ps_pcontinue; + ps_pdread; + ps_pdwrite; + ps_pglobal_lookup; + ps_plog; + ps_pstop; + ps_ptread; + ps_ptwrite; +};