[PR gdb/23985] Fix libinproctrace.so build
authorSzabolcs Nagy <szabolcs.nagy@arm.com>
Fri, 14 Dec 2018 14:02:54 +0000 (14:02 +0000)
committerSzabolcs Nagy <szabolcs.nagy@arm.com>
Wed, 30 Jan 2019 18:03:36 +0000 (18:03 +0000)
The IPA objects currently may use gnulib replacement apis, which is
wrong: gnulib is not linked into the produced dso and it cannot be
because it is not built with -fPIC -fvisibility=hidden.

The gnulib replacement detection is broken under cross compilation:
for targets other than *-gnu*, replacements are enabled that depend
on execution time detection. This causes unnecessary build failure
when the target has proper support for the replaced api.

This fix tries to undo the replacements, which is tricky because the
gnulib headers are still used for various compile time fixups and
there is no simple knob in gnulib to only turn the replacements off.

Without this workaround gdb fails to cross build to non-gnu targets:

  ld: tracepoint-ipa.o: in function `gdb_agent_helper_thread(void*)':
  gdb/gdbserver/tracepoint.c:7221: undefined reference to `rpl_strerror'
  ...
  Makefile:434: recipe for target 'libinproctrace.so' failed

gdb/gdbserver/ChangeLog:

PR gdb/23985
* Makefile.in (IPAGENT_CFLAGS): Add UNDO_GNULIB_CFLAGS.
(UNDO_GNULIB_CFLAGS): Undo gnulib replacements.

gdb/gdbserver/ChangeLog
gdb/gdbserver/Makefile.in

index a244c4ffef654e6f2adc13ec7b52a242f675266f..be9a26302b2bc42140dfa8170ad4103565e3b8dd 100644 (file)
@@ -1,3 +1,9 @@
+2018-01-30  Szabolcs Nagy  <szabolcs.nagy@arm.com>
+
+       PR gdb/23985
+       * Makefile.in (IPAGENT_CFLAGS): Add UNDO_GNULIB_CFLAGS.
+       (UNDO_GNULIB_CFLAGS): Undo gnulib replacements.
+
 2019-01-25  Tom Tromey  <tom@tromey.com>
 
        * Makefile.in (INCLUDE_CFLAGS): Don't add -I for common.
index 8cffe3dda2d5d300f5ec71f63b36f6e3045d732d..f5fc55034ee9bb66018a9478e594f6f43cd0feba 100644 (file)
@@ -544,9 +544,15 @@ regdat_sh = $(srcdir)/../regformats/regdat.sh
 
 UST_CFLAGS = $(ustinc) -DCONFIG_UST_GDB_INTEGRATION
 
+# Undo gnulib replacements for the IPA shared library build.
+# The gnulib headers are still needed, but gnulib is not linked
+# into the IPA lib so replacement apis don't work.
+UNDO_GNULIB_CFLAGS = -Drpl_strerror=strerror
+
 # Note, we only build the IPA if -fvisibility=hidden is supported in
 # the first place.
 IPAGENT_CFLAGS = $(INTERNAL_CFLAGS) $(UST_CFLAGS) \
+       $(UNDO_GNULIB_CFLAGS) \
        -fPIC -DIN_PROCESS_AGENT \
        -fvisibility=hidden