summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/libcxx/utils/sym_extract.py
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2021-01-02 20:29:13 +0000
committerpatrick <patrick@openbsd.org>2021-01-02 20:29:13 +0000
commit46035553bfdd96e63c94e32da0210227ec2e3cf1 (patch)
treeb191f708fb9a2995ba745b2f31cdeeaee4872b7f /gnu/llvm/libcxx/utils/sym_extract.py
parentMove Makefiles for libc++ and libc++abi to gnu/lib in preparation for an (diff)
downloadwireguard-openbsd-46035553bfdd96e63c94e32da0210227ec2e3cf1.tar.xz
wireguard-openbsd-46035553bfdd96e63c94e32da0210227ec2e3cf1.zip
Import libc++ 10.0.1 release.
Diffstat (limited to 'gnu/llvm/libcxx/utils/sym_extract.py')
-rwxr-xr-xgnu/llvm/libcxx/utils/sym_extract.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/gnu/llvm/libcxx/utils/sym_extract.py b/gnu/llvm/libcxx/utils/sym_extract.py
new file mode 100755
index 00000000000..987c207c1e4
--- /dev/null
+++ b/gnu/llvm/libcxx/utils/sym_extract.py
@@ -0,0 +1,54 @@
+#!/usr/bin/env python
+#===----------------------------------------------------------------------===##
+#
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+#
+#===----------------------------------------------------------------------===##
+"""
+sym_extract - Extract and output a list of symbols from a shared library.
+"""
+from argparse import ArgumentParser
+from libcxx.sym_check import extract, util
+
+
+def main():
+ parser = ArgumentParser(
+ description='Extract a list of symbols from a shared library.')
+ parser.add_argument('library', metavar='shared-lib', type=str,
+ help='The library to extract symbols from')
+ parser.add_argument('-o', '--output', dest='output',
+ help='The output file. stdout is used if not given',
+ type=str, action='store', default=None)
+ parser.add_argument('--names-only', dest='names_only',
+ help='Output only the name of the symbol',
+ action='store_true', default=False)
+ parser.add_argument('--only-stdlib-symbols', dest='only_stdlib',
+ help="Filter all symbols not related to the stdlib",
+ action='store_true', default=False)
+ parser.add_argument('--defined-only', dest='defined_only',
+ help="Filter all symbols that are not defined",
+ action='store_true', default=False)
+ parser.add_argument('--undefined-only', dest='undefined_only',
+ help="Filter all symbols that are defined",
+ action='store_true', default=False)
+
+ args = parser.parse_args()
+ assert not (args.undefined_only and args.defined_only)
+ if args.output is not None:
+ print('Extracting symbols from %s to %s.'
+ % (args.library, args.output))
+ syms = extract.extract_symbols(args.library)
+ if args.only_stdlib:
+ syms, other_syms = util.filter_stdlib_symbols(syms)
+ filter = lambda x: x
+ if args.defined_only:
+ filter = lambda l: list([x for x in l if x['is_defined']])
+ if args.undefined_only:
+ filter = lambda l: list([x for x in l if not x['is_defined']])
+ util.write_syms(syms, out=args.output, names_only=args.names_only, filter=filter)
+
+
+if __name__ == '__main__':
+ main()