From 5245c957563f866c502e2275863e5e9f697eb860 Mon Sep 17 00:00:00 2001 From: Alexander Bokovoy 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. Fixes: https://bugzilla.samba.org/show_bug.cgi?id=13579 Cherry-picked from commit 4e123c46820e737968fa3d1c594aa016cca39637 Signed-off-by: Alexander Bokovoy Reviewed-by: Andrew Bartlett --- 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..4603e764fea 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..74892146990 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