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