This is the mail archive of the
elfutils-devel@sourceware.org
mailing list for the elfutils project.
[PATCH] Check if rpath is supported before setting it
- From: Ulf Hermann <ulf dot hermann at qt dot io>
- To: <elfutils-devel at sourceware dot org>
- Date: Fri, 28 Apr 2017 13:21:16 +0200
- Subject: [PATCH] Check if rpath is supported before setting it
- Authentication-results: sourceware.org; auth=none
- Authentication-results: sourceware.org; dkim=none (message not signed) header.d=none;sourceware.org; dmarc=none action=none header.from=qt.io;
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qtcompany.onmicrosoft.com; s=selector1-qt-io; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=ikDrRV/a49tED4fYdtS4S/q9tgZUbVpmp1Sm9hrUFN0=; b=KjtHo4VYyFXeKO9IsyEDEx04DmKY7cCfqqrOpiMxlLnULOsFIoARZNW0Dat7VRZzbGfyO9z02am0lKFibJvgFxQ4agX5BydV2ffim9ErRZt8sNAmXHclL+IeBrAe3qMzTDnaIxLBbbvIO4HaM9u9ZqmXRiyn7t5bYYwvfnZITxw=
- Spamdiagnosticmetadata: NSPM
- Spamdiagnosticoutput: 1:99
Some systems don't have rpath. In that case the backends need to be
made available by some external mechanism. Warn about it.
Signed-off-by: Ulf Hermann <ulf.hermann@qt.io>
---
ChangeLog | 5 +++++
configure.ac | 12 ++++++++++++
libdw/ChangeLog | 5 +++++
libdw/Makefile.am | 9 +++++++--
4 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 01f88f3..e5b74fb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2017-04-28 Ulf Hermann <ulf.hermann@qt.io>
+
+ * configure.ac: Check if the linker supports -rpath and output a
+ warning if it doesn't.
+
2017-04-27 Ulf Hermann <ulf.hermann@qt.io>
* configure.ac: Check if the compiler supports
diff --git a/configure.ac b/configure.ac
index efcd3c0..b943547 100644
--- a/configure.ac
+++ b/configure.ac
@@ -204,6 +204,18 @@ fi
AC_SUBST([dso_LDFLAGS])
+AC_CACHE_CHECK([for rpath support], ac_cv_rpath, [dnl
+save_LDFLAGS="$LDFLAGS"
+LDFLAGS="$save_LDFLAGS -Wl,--enable-new-dtags,-rpath,/foo/bar"
+AC_LINK_IFELSE([AC_LANG_PROGRAM()], ac_cv_rpath=yes, ac_cv_rpath=no)
+LDFLAGS="$save_LDFLAGS"
+])
+if test "$ac_cv_rpath" = "no"; then
+ AC_MSG_WARN([rpath is not supported. libdw will not automatically
+ find the ebl backends.])
+fi
+AM_CONDITIONAL(RPATH, test "$ac_cv_rpath" = "yes")
+
AC_CACHE_CHECK([for __thread support], ac_cv_tls, [dnl
# Use the same flags that we use for our DSOs, so the test is representative.
# Some old compiler/linker/libc combinations fail some ways and not others.
diff --git a/libdw/ChangeLog b/libdw/ChangeLog
index 79c3898..45303d6 100644
--- a/libdw/ChangeLog
+++ b/libdw/ChangeLog
@@ -1,3 +1,8 @@
+2017-02-28 Ulf Hermann <ulf.hermann@qt.io>
+
+ * Makefile.am: If the linker doesn't support -rpath, don't try to set
+ it.
+
2017-02-27 Ulf Hermann <ulf.hermann@qt.io>
* libdwP.h: Use attribute_hidden.
diff --git a/libdw/Makefile.am b/libdw/Makefile.am
index 31f7012..055e3f1 100644
--- a/libdw/Makefile.am
+++ b/libdw/Makefile.am
@@ -99,6 +99,12 @@ $(srcdir)/known-dwarf.h: $(top_srcdir)/config/known-dwarf.awk $(srcdir)/dwarf.h
mv -f $@.new $@
endif
+if RPATH
+PKG_RPATH = -Wl,--enable-new-dtags,-rpath,$(pkglibdir)
+else
+PKG_RPATH =
+endif
+
libdw_pic_a_SOURCES =
am_libdw_pic_a_OBJECTS = $(libdw_a_SOURCES:.c=.os)
@@ -115,8 +121,7 @@ libdw.so$(EXEEXT): $(srcdir)/libdw.map libdw_pic.a ../libdwelf/libdwelf_pic.a \
# The rpath is necessary for libebl because its $ORIGIN use will
# not fly in a setuid executable that links in libdw.
$(AM_V_CCLD)$(LINK) $(dso_LDFLAGS) -o $@ -Wl,--soname,$@.$(VERSION) \
- -Wl,--enable-new-dtags,-rpath,$(pkglibdir) \
- -Wl,--version-script,$<,--no-undefined \
+ -Wl,--version-script,$<,--no-undefined $(PKG_RPATH) \
-Wl,--whole-archive $(filter-out $<,$^) -Wl,--no-whole-archive\
-ldl -lz $(intl_LDADD) $(zip_LIBS) $(libgnu)
@$(textrel_check)
--
2.1.4