Change scope to local for symbols automatically added by upcoming binutils 2.31

Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1600035
This commit is contained in:
Alexander Bokovoy 2018-07-12 12:03:35 +03:00
parent 11acd9fe49
commit 58966617d0
2 changed files with 103 additions and 2 deletions

View File

@ -0,0 +1,96 @@
From dd70ab4d600192336af547c32acd18dcbcb0c8b0 Mon Sep 17 00:00:00 2001
From: Alexander Bokovoy <ab@samba.org>
Date: Thu, 12 Jul 2018 10:19:41 +0300
Subject: [PATCH] wafsamba/samba_abi: always hide ABI symbols which must be
local
binutils 2.31 is going to change how shared libraries are linked, such
that they always provide their own local definitions of the _end, _edata
and _bss_start symbols. This would all be fine, except for shared
libraries that export all symbols be default. (Rather than just
exporting those symbols that form part of their API).
According to binutils developers, we should only export the symbols we
explicitly want to be used. We don't use this principle for all our
libraries and deliberately don't want to have ABI versioning control for
all of them, so the change I introduce here is to explicitly mark those
symbols that will always be added by default linker configuration with
binutils 2.31 as local. Right now these are '_end', '_edata', and
'_bss_start' symbols.
Signed-off-by: Alexander Bokovoy <ab@samba.org>
---
buildtools/wafsamba/samba_abi.py | 10 ++++++----
buildtools/wafsamba/tests/test_abi.py | 14 ++++++++++++++
2 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/buildtools/wafsamba/samba_abi.py b/buildtools/wafsamba/samba_abi.py
index 196b468f5b3..f3f66dd1d45 100644
--- a/buildtools/wafsamba/samba_abi.py
+++ b/buildtools/wafsamba/samba_abi.py
@@ -192,10 +192,12 @@ def abi_write_vscript(f, libname, current_version, versions, symmap, abi_match):
f.write("\t\t%s;\n" % x)
else:
f.write("\t\t*;\n")
- if abi_match != ["*"]:
- f.write("\tlocal:\n")
- for x in local_abi:
- f.write("\t\t%s;\n" % x[1:])
+ # Always hide symbols that must be local if exist
+ local_abi.extend(["!_end", "!_bss_start", "!_edata"])
+ f.write("\tlocal:\n")
+ for x in local_abi:
+ f.write("\t\t%s;\n" % x[1:])
+ if global_abi != ["*"]:
if len(global_abi) > 0:
f.write("\t\t*;\n")
f.write("};\n")
diff --git a/buildtools/wafsamba/tests/test_abi.py b/buildtools/wafsamba/tests/test_abi.py
index bba78c1ba07..30c152417c7 100644
--- a/buildtools/wafsamba/tests/test_abi.py
+++ b/buildtools/wafsamba/tests/test_abi.py
@@ -66,6 +66,10 @@ class WriteVscriptTests(TestCase):
1.0 {
\tglobal:
\t\t*;
+\tlocal:
+\t\t_end;
+\t\t_bss_start;
+\t\t_edata;
};
""")
@@ -84,6 +88,10 @@ MYLIB_0.1 {
1.0 {
\tglobal:
\t\t*;
+\tlocal:
+\t\t_end;
+\t\t_bss_start;
+\t\t_edata;
};
""")
@@ -99,6 +107,9 @@ MYLIB_0.1 {
\t\t*;
\tlocal:
\t\texc_*;
+\t\t_end;
+\t\t_bss_start;
+\t\t_edata;
};
""")
@@ -115,6 +126,9 @@ MYLIB_0.1 {
\t\tpub_*;
\tlocal:
\t\texc_*;
+\t\t_end;
+\t\t_bss_start;
+\t\t_edata;
\t\t*;
};
""")
--
2.17.1

View File

@ -6,7 +6,7 @@
# ctdb is enabled by default, you can disable it with: --without clustering
%bcond_without clustering
%define main_release 3
%define main_release 4
%define samba_version 4.8.3
%define talloc_version 2.1.11
@ -89,7 +89,7 @@
Name: samba
Version: %{samba_version}
Release: %{samba_release}.1
Release: %{samba_release}
%if 0%{?rhel}
Epoch: 0
@ -123,6 +123,7 @@ Source200: README.dc
Source201: README.downgrade
Patch0: samba-4.8.3-fix_krb5_plugins.patch
Patch1: samba-4.8.3-vscript.local.patch
Requires(pre): /usr/sbin/groupadd
Requires(post): systemd
@ -3530,6 +3531,10 @@ fi
%endif # with_clustering_support
%changelog
* Thu Jul 12 2018 Alexander Bokovoy <abokovoy@redhat.com> - 2:4.8.3-4
- Change scope to local for symbols automatically added by upcoming binutils 2.31
- Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1600035
* Wed Jul 11 2018 Alexander Bokovoy <abokovoy@redhat.com> - 2:4.8.3-3
- Rebuild Samba against binutils 2.30.90-2.fc29
- Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1600035