libctf: link against libiberty before linking in libbfd or libctf-nobfd
authorNick Alcock <nick.alcock@oracle.com>
Mon, 27 Sep 2021 19:31:21 +0000 (20:31 +0100)
committerNick Alcock <nick.alcock@oracle.com>
Mon, 27 Sep 2021 19:31:22 +0000 (20:31 +0100)
This ensures that the CTF_LIBADD, which always contains at least this
when doing a shared link:

-L`pwd`/../libiberty/pic -liberty

appears in the link line before any requirements pulled in by libbfd.la,
which include -liberty but because it is install-time do not include the
-L`pwd`/../libiberty/pic portion (in an indirect dep like this, the path
comes from the libbfd.la file, and is an install path).  libiberty also
appears after libbfd in the link line by virtue of libctf-nobfd.la,
because libctf-nobfd has to follow libbfd in the link line, and that
needs symbols from libiberty too.

Without this, an installed liberty might well be pulled in by libbfd,
and if --enable-install-libiberty is not specified this libiberty might
be completely incompatible with what is being installed and break either
or boht of libbfd and libctf. (The specific problem observed here is
that bsearch_r was not present, but other problems might easily be
observed in future too.)

Because ld links against libctf, this has a tendency to break the system
linker at install time too, if installing with --prefix=/usr.  That's
quite unpleasant to recover from.

libctf/ChangeLog
2021-09-27  Nick Alcock  <nick.alcock@oracle.com>

PR libctf/27360
* Makefile.am (libctf_la_LIBADD): Link against libiberty
before pulling in libbfd.la or pulling in libctf-nobfd.la.
* Makefile.in: Regenerate.

libctf/ChangeLog
libctf/Makefile.am
libctf/Makefile.in

index 7ccc54209b05177b3d42753b4c13b34b4b2444a6..da361e4450d530f3306746fc9190f5f37941889c 100644 (file)
@@ -1,3 +1,10 @@
+2021-09-27  Nick Alcock  <nick.alcock@oracle.com>
+
+       PR libctf/27360
+       * Makefile.am (libctf_la_LIBADD): Link against libiberty
+       before pulling in libbfd.la or pulling in libctf-nobfd.la.
+       * Makefile.in: Regenerate.
+
 2021-07-03  Nick Clifton  <nickc@redhat.com>
 
        * 2.37 release branch created.
index 76881844798c63cc859298f8035fd087fc71702f..970b66dc6081af831ad4107111e26a21b6522bfd 100644 (file)
@@ -52,7 +52,11 @@ if NEED_CTF_QSORT_R
 libctf_nobfd_la_SOURCES += ctf-qsort_r.c
 endif
 
-libctf_la_LIBADD = ../bfd/libbfd.la $(libctf_nobfd_la_LIBADD)
+# @CTF_LIBADD@ appears here twice: once, to force libiberty to get searched before
+# install-time libbfd adds a -L to the install dir (possibly pointing at an
+# incompatible libiberty), and once via lictf_nobfd_la_LIBADD so that the
+# references in there get picked up.
+libctf_la_LIBADD =  @CTF_LIBADD@ ../bfd/libbfd.la $(libctf_nobfd_la_LIBADD)
 libctf_la_CPPFLAGS = $(AM_CPPFLAGS) -DNOBFD=0
 libctf_la_LDFLAGS = $(libctf_nobfd_la_LDFLAGS)
 libctf_la_SOURCES = $(libctf_nobfd_la_SOURCES) ctf-open-bfd.c
index bb3b88fc109f7aa8dea8b3bee0e004dd1c4c424c..e8a1443ba2860c0e1d9972e1ef8f898c94a6cc10 100644 (file)
@@ -476,7 +476,12 @@ libctf_nobfd_la_SOURCES = ctf-archive.c ctf-dump.c ctf-create.c \
        ctf-decl.c ctf-error.c ctf-hash.c ctf-labels.c ctf-dedup.c \
        ctf-link.c ctf-lookup.c ctf-open.c ctf-serialize.c ctf-sha1.c \
        ctf-string.c ctf-subr.c ctf-types.c ctf-util.c $(am__append_1)
-libctf_la_LIBADD = ../bfd/libbfd.la $(libctf_nobfd_la_LIBADD)
+
+# @CTF_LIBADD@ appears here twice: once, to force libiberty to get searched before
+# install-time libbfd adds a -L to the install dir (possibly pointing at an
+# incompatible libiberty), and once via lictf_nobfd_la_LIBADD so that the
+# references in there get picked up.
+libctf_la_LIBADD = @CTF_LIBADD@ ../bfd/libbfd.la $(libctf_nobfd_la_LIBADD)
 libctf_la_CPPFLAGS = $(AM_CPPFLAGS) -DNOBFD=0
 libctf_la_LDFLAGS = $(libctf_nobfd_la_LDFLAGS)
 libctf_la_SOURCES = $(libctf_nobfd_la_SOURCES) ctf-open-bfd.c