summaryrefslogtreecommitdiff
path: root/lib/sanitizer_common/scripts
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2015-05-05 22:51:35 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2015-05-05 22:51:35 +0000
commit068324156f233827ae425641e2a384a4b4f0869c (patch)
tree3674db20d582d9a6c1a6c12853f3584e845e28df /lib/sanitizer_common/scripts
parent64004ef9585a1ad5a40866f16e85951d638f1910 (diff)
[asan] Use a version script to limit the symbols exported by the ASan shared runtime library.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@236551 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/sanitizer_common/scripts')
-rwxr-xr-xlib/sanitizer_common/scripts/gen_dynamic_list.py21
1 files changed, 17 insertions, 4 deletions
diff --git a/lib/sanitizer_common/scripts/gen_dynamic_list.py b/lib/sanitizer_common/scripts/gen_dynamic_list.py
index 7bab23065..a5fed7e05 100755
--- a/lib/sanitizer_common/scripts/gen_dynamic_list.py
+++ b/lib/sanitizer_common/scripts/gen_dynamic_list.py
@@ -14,6 +14,7 @@
# gen_dynamic_list.py libclang_rt.*san*.a [ files ... ]
#
#===------------------------------------------------------------------------===#
+import argparse
import os
import re
import subprocess
@@ -49,10 +50,17 @@ def get_global_functions(library):
return functions
def main(argv):
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--version-list', action='store_true')
+ parser.add_argument('--extra', default=[], action='append')
+ parser.add_argument('libraries', default=[], nargs='+')
+ args = parser.parse_args()
+
result = []
- library = argv[1]
- all_functions = get_global_functions(library)
+ all_functions = []
+ for library in args.libraries:
+ all_functions.extend(get_global_functions(library))
function_set = set(all_functions)
for func in all_functions:
# Export new/delete operators.
@@ -74,15 +82,20 @@ def main(argv):
result.append(func)
# Additional exported functions from files.
- for fname in argv[2:]:
+ for fname in args.extra:
f = open(fname, 'r')
for line in f:
result.append(line.rstrip())
# Print the resulting list in the format recognized by ld.
print('{')
+ if args.version_list:
+ print('global:')
result.sort()
for f in result:
- print(' ' + f + ';')
+ print(' ' + f.encode('utf-8') + ';')
+ if args.version_list:
+ print('local:')
+ print(' *;')
print('};')
if __name__ == '__main__':