b49cb5bbcc
There was a typo in the original bug which used _bss_start instead of __bss_start. As result, __bss_start wasn't scoped locally.
97 lines
2.7 KiB
Diff
97 lines
2.7 KiB
Diff
From dd9da7bc9306b95496d502589f95be0efc097fc0 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..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
|
|
|