aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2021-01-07 10:37:51 +0100
committerTom de Vries <tdevries@suse.de>2021-01-07 10:37:51 +0100
commit78e49486944c515dfed6a437edff4c2c15dd1d4e (patch)
treedb3a1596978393a781df04f97d552bd9ab524305
parentaa881ecde48c7a0224b92e2cfa43b37ee9ec9fa2 (diff)
downloadgdb-78e49486944c515dfed6a437edff4c2c15dd1d4e.zip
gdb-78e49486944c515dfed6a437edff4c2c15dd1d4e.tar.gz
gdb-78e49486944c515dfed6a437edff4c2c15dd1d4e.tar.bz2
[gdb/build] Fix gdbserver build with -fsanitize=address
When doing a gdbserver build with CFLAGS/CXXFLAGS/LDFLAGS=-fsanitize=address we run into: ... ld: ../libiberty/libiberty.a(safe-ctype.o): relocation R_X86_64_32 against `.data' can not be used when making a shared object; recompile with -fPIC collect2: error: ld returned 1 exit status make[1]: *** [libinproctrace.so] Error 1 ... This started with commit 96648494173 "gdbsupport: make use of safe-ctype functions from libiberty", which introduced a dependency of libinproctrace.so on libiberty. Fix this in gdbserver/Makefile.in by using a setup similar to what is done in gcc-repo/src/libcc1/Makefile.am, such that ../libiberty/noasan/libiberty.a is used instead. Build on x86_64-linux, both with and without -fsanitize=address. gdbserver/ChangeLog: 2021-01-07 Tom de Vries <tdevries@suse.de> * Makefile.in (LIBIBERTY_NORMAL, LIBIBERTY_NOASAN, LIBIBERTY_PIC): (LIBIBERTY_FOR_SHLIB): New var. (LIBIBERTY): Set using $(LIBIBERTY_NORMAL). (IPA_LIB): Use LIBIBERTY_FOR_SHLIB instead of LIBIBERTY in target rule.
-rw-r--r--gdbserver/ChangeLog7
-rw-r--r--gdbserver/Makefile.in13
2 files changed, 18 insertions, 2 deletions
diff --git a/gdbserver/ChangeLog b/gdbserver/ChangeLog
index 6c7738e..3323ecf 100644
--- a/gdbserver/ChangeLog
+++ b/gdbserver/ChangeLog
@@ -1,3 +1,10 @@
+2021-01-07 Tom de Vries <tdevries@suse.de>
+
+ * Makefile.in (LIBIBERTY_NORMAL, LIBIBERTY_NOASAN, LIBIBERTY_PIC):
+ (LIBIBERTY_FOR_SHLIB): New var.
+ (LIBIBERTY): Set using $(LIBIBERTY_NORMAL).
+ (IPA_LIB): Use LIBIBERTY_FOR_SHLIB instead of LIBIBERTY in target rule.
+
2021-01-04 Simon Marchi <simon.marchi@efficios.com>
* debug.cc (debug_print_depth): New.
diff --git a/gdbserver/Makefile.in b/gdbserver/Makefile.in
index a2fe302..a14d3a7 100644
--- a/gdbserver/Makefile.in
+++ b/gdbserver/Makefile.in
@@ -103,7 +103,16 @@ INCLUDE_DIR = ${srcdir}/../include
INCLUDE_DEP = $$(INCLUDE_DIR)
LIBIBERTY_BUILDDIR = ../libiberty
-LIBIBERTY = $(LIBIBERTY_BUILDDIR)/libiberty.a
+LIBIBERTY_NORMAL = $(LIBIBERTY_BUILDDIR)/libiberty.a
+LIBIBERTY_NOASAN = $(LIBIBERTY_BUILDDIR)/noasan/libiberty.a
+LIBIBERTY_PIC = $(LIBIBERTY_BUILDDIR)/pic/libiberty.a
+LIBIBERTY_FOR_SHLIB = \
+ $(if $(wildcard $(LIBIBERTY_NOASAN)),\
+ $(LIBIBERTY_NOASAN),\
+ $(if $(wildcard $(LIBIBERTY_PIC)),\
+ $(LIBIBERTY_PIC),\
+ $(LIBIBERTY_NORMAL)))
+LIBIBERTY = $(LIBIBERTY_NORMAL)
GDBSUPPORT_BUILDDIR = ../gdbsupport
GDBSUPPORT = $(GDBSUPPORT_BUILDDIR)/libgdbsupport.a
@@ -395,7 +404,7 @@ $(IPA_LIB): $(sort $(IPA_OBJS)) ${CDEPS}
$(ECHO_CXXLD) $(CC_LD) -shared -fPIC -Wl,--soname=$(IPA_LIB) \
-Wl,--no-undefined $(INTERNAL_CFLAGS) $(INTERNAL_LDFLAGS) \
$(CXXFLAGS) \
- -o $(IPA_LIB) ${IPA_OBJS} $(LIBIBERTY) -ldl -pthread
+ -o $(IPA_LIB) ${IPA_OBJS} $(LIBIBERTY_FOR_SHLIB) -ldl -pthread
# Put the proper machine-specific files first, so M-. on a machine
# specific routine gets the one for the correct machine.