dcb3b7
From f6bc8fb3d26892ba1a84ba2df76beedd51998dd2 Mon Sep 17 00:00:00 2001
dcb3b7
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
dcb3b7
Date: Mon, 29 Jan 2018 16:34:17 +0100
dcb3b7
Subject: [PATCH] hints/linux: Add -lphtread to lddlflags
dcb3b7
MIME-Version: 1.0
dcb3b7
Content-Type: text/plain; charset=UTF-8
dcb3b7
Content-Transfer-Encoding: 8bit
dcb3b7
dcb3b7
Passing -z defs to linker flags causes perl to fail to build if threads are
dcb3b7
enabled:
dcb3b7
dcb3b7
gcc  -shared -Wl,-z,relro -Wl,-z,defs -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -L/usr/local/lib -fstack-protector-strong Bzip2.o  -o ../../lib/auto/Compress/Raw/Bzip2/Bzip2.so  \
dcb3b7
   -L/usr/lib64 -lbz2 "-L../.." -lperl   \
dcb3b7
dcb3b7
Bzip2.o: In function `deRef':
dcb3b7
/builddir/build/BUILD/perl-5.26.1/cpan/Compress-Raw-Bzip2/Bzip2.xs:256: undefined reference to `pthread_getspecific'
dcb3b7
dcb3b7
The reason is Bzip2.xs calls dTHX macro included from thread.h via perl.h that
dcb3b7
expands to pthread_getspecific() function call that is defined in pthread
dcb3b7
library. But the pthread library is not explicitly linked to Bzip.so (see the
dcb3b7
gcc command). This is exactly what -z defs linker flag enforces.
dcb3b7
dcb3b7
Underlinking ELFs can be dangerous because in case of versioned
dcb3b7
symbols it can cause run-time binding to an improper version symbol or
dcb3b7
even to an symbold from different library.
dcb3b7
dcb3b7
This patch fixes hints for Linux by adding -lpthreads to lddlflags. It
dcb3b7
also adds -shared there because Configure.sh adds it only hints return
dcb3b7
lddlflags empty.
dcb3b7
dcb3b7
<https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/3RHZEHLRUHJFF2XGHI5RB6YPDNLDR4HG/>
dcb3b7
dcb3b7
Signed-off-by: Petr Písař <ppisar@redhat.com>
dcb3b7
---
dcb3b7
 hints/linux.sh | 4 ++++
dcb3b7
 1 file changed, 4 insertions(+)
dcb3b7
dcb3b7
diff --git a/hints/linux.sh b/hints/linux.sh
dcb3b7
index 3f38ea07f1..9ec3bc02ef 100644
dcb3b7
--- a/hints/linux.sh
dcb3b7
+++ b/hints/linux.sh
dcb3b7
@@ -353,12 +353,16 @@ if [ -f /etc/synoinfo.conf -a -d /usr/syno ]; then
dcb3b7
     echo "$libswanted" >&4
dcb3b7
 fi
dcb3b7
 
dcb3b7
+# Flags needed to produce shared libraries.
dcb3b7
+lddlflags='-shared'
dcb3b7
+
dcb3b7
 # This script UU/usethreads.cbu will get 'called-back' by Configure
dcb3b7
 # after it has prompted the user for whether to use threads.
dcb3b7
 cat > UU/usethreads.cbu <<'EOCBU'
dcb3b7
 case "$usethreads" in
dcb3b7
 $define|true|[yY]*)
dcb3b7
         ccflags="-D_REENTRANT -D_GNU_SOURCE $ccflags"
dcb3b7
+        lddlflags="-lpthread $lddlflags"
dcb3b7
         if echo $libswanted | grep -v pthread >/dev/null
dcb3b7
         then
dcb3b7
             set `echo X "$libswanted "| sed -e 's/ c / pthread c /'`
dcb3b7
-- 
dcb3b7
2.13.6
dcb3b7