12d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier#!/usr/bin/env python 2a9e91f30eea39e57e4d9cd0067f6a5f10a64c2ebEric Fiselier#===----------------------------------------------------------------------===## 3a9e91f30eea39e57e4d9cd0067f6a5f10a64c2ebEric Fiselier# 4a9e91f30eea39e57e4d9cd0067f6a5f10a64c2ebEric Fiselier# The LLVM Compiler Infrastructure 5a9e91f30eea39e57e4d9cd0067f6a5f10a64c2ebEric Fiselier# 6a9e91f30eea39e57e4d9cd0067f6a5f10a64c2ebEric Fiselier# This file is dual licensed under the MIT and the University of Illinois Open 7a9e91f30eea39e57e4d9cd0067f6a5f10a64c2ebEric Fiselier# Source Licenses. See LICENSE.TXT for details. 8a9e91f30eea39e57e4d9cd0067f6a5f10a64c2ebEric Fiselier# 9a9e91f30eea39e57e4d9cd0067f6a5f10a64c2ebEric Fiselier#===----------------------------------------------------------------------===## 102d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier""" 112d9feb59f05b62531bd8070b41615da5df15d67dEric Fiseliersym_extract - Extract and output a list of symbols from a shared library. 122d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier""" 132d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselierfrom argparse import ArgumentParser 141147753b1ccb0bbc40d05e7e73089e2b7bb38317Eric Fiselierfrom libcxx.sym_check import extract, util 152d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier 162d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier 172d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselierdef main(): 182d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier parser = ArgumentParser( 192d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier description='Extract a list of symbols from a shared library.') 202d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier parser.add_argument('library', metavar='shared-lib', type=str, 212d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier help='The library to extract symbols from') 222d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier parser.add_argument('-o', '--output', dest='output', 232d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier help='The output file. stdout is used if not given', 242d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier type=str, action='store', default=None) 252d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier parser.add_argument('--names-only', dest='names_only', 262d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier help='Output only the name of the symbol', 272d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier action='store_true', default=False) 280d6941834cb62a02deed43af20d24cc2a10e8acbEric Fiselier parser.add_argument('--only-stdlib-symbols', dest='only_stdlib', 290d6941834cb62a02deed43af20d24cc2a10e8acbEric Fiselier help="Filter all symbols not related to the stdlib", 300d6941834cb62a02deed43af20d24cc2a10e8acbEric Fiselier action='store_true', default=False) 312d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier args = parser.parse_args() 322d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier if args.output is not None: 332d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier print('Extracting symbols from %s to %s.' 342d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier % (args.library, args.output)) 352d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier syms = extract.extract_symbols(args.library) 360d6941834cb62a02deed43af20d24cc2a10e8acbEric Fiselier if args.only_stdlib: 370d6941834cb62a02deed43af20d24cc2a10e8acbEric Fiselier syms, other_syms = util.filter_stdlib_symbols(syms) 382d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier util.write_syms(syms, out=args.output, names_only=args.names_only) 392d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier 402d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier 412d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselierif __name__ == '__main__': 422d9feb59f05b62531bd8070b41615da5df15d67dEric Fiselier main() 43