[libcxx] r294644 - Start libc++ python cleanup and consolidation.
Eric Fiselier via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 9 14:53:15 PST 2017
Author: ericwf
Date: Thu Feb 9 16:53:14 2017
New Revision: 294644
URL: http://llvm.org/viewvc/llvm-project?rev=294644&view=rev
Log:
Start libc++ python cleanup and consolidation.
Libc++ frequently creates and uses utilities written in python.
Currently there are python modules under both libcxx/test and
libcxx/util. My goal with these changes is to consolidate them
into a single package under libcxx/utils/libcxx.
Added:
libcxx/trunk/utils/gen_link_script.py
- copied, changed from r294612, libcxx/trunk/utils/gen_link_script/gen_link_script.py
libcxx/trunk/utils/libcxx/
libcxx/trunk/utils/libcxx/__init__.py
- copied, changed from r294612, libcxx/trunk/utils/sym_check/sym_check/__init__.py
libcxx/trunk/utils/libcxx/sym_check/
libcxx/trunk/utils/libcxx/sym_check/__init__.py
- copied, changed from r294612, libcxx/trunk/utils/sym_check/sym_check/__init__.py
libcxx/trunk/utils/libcxx/sym_check/diff.py
- copied, changed from r294612, libcxx/trunk/utils/sym_check/sym_check/diff.py
libcxx/trunk/utils/libcxx/sym_check/extract.py
- copied, changed from r294612, libcxx/trunk/utils/sym_check/sym_check/extract.py
libcxx/trunk/utils/libcxx/sym_check/match.py
- copied, changed from r294612, libcxx/trunk/utils/sym_check/sym_check/match.py
libcxx/trunk/utils/libcxx/sym_check/util.py
- copied, changed from r294612, libcxx/trunk/utils/sym_check/sym_check/util.py
libcxx/trunk/utils/not.py
- copied, changed from r294612, libcxx/trunk/utils/not/not.py
libcxx/trunk/utils/sym_diff.py
- copied, changed from r294612, libcxx/trunk/utils/sym_check/sym_diff.py
libcxx/trunk/utils/sym_extract.py
- copied, changed from r294612, libcxx/trunk/utils/sym_check/sym_extract.py
libcxx/trunk/utils/sym_match.py
- copied, changed from r294612, libcxx/trunk/utils/sym_check/sym_match.py
libcxx/trunk/utils/symcheck-blacklists/
libcxx/trunk/utils/symcheck-blacklists/linux_blacklist.txt
- copied, changed from r294612, libcxx/trunk/utils/sym_check/linux_blacklist.txt
libcxx/trunk/utils/symcheck-blacklists/osx_blacklist.txt
- copied, changed from r294612, libcxx/trunk/utils/sym_check/osx_blacklist.txt
Removed:
libcxx/trunk/utils/gen_link_script/gen_link_script.py
libcxx/trunk/utils/not/not.py
libcxx/trunk/utils/sym_check/linux_blacklist.txt
libcxx/trunk/utils/sym_check/osx_blacklist.txt
libcxx/trunk/utils/sym_check/sym_check/__init__.py
libcxx/trunk/utils/sym_check/sym_check/diff.py
libcxx/trunk/utils/sym_check/sym_check/extract.py
libcxx/trunk/utils/sym_check/sym_check/match.py
libcxx/trunk/utils/sym_check/sym_check/util.py
libcxx/trunk/utils/sym_check/sym_diff.py
libcxx/trunk/utils/sym_check/sym_extract.py
libcxx/trunk/utils/sym_check/sym_match.py
Modified:
libcxx/trunk/lib/CMakeLists.txt
libcxx/trunk/lib/abi/CMakeLists.txt
libcxx/trunk/test/libcxx/test/config.py
Modified: libcxx/trunk/lib/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/lib/CMakeLists.txt?rev=294644&r1=294643&r2=294644&view=diff
==============================================================================
--- libcxx/trunk/lib/CMakeLists.txt (original)
+++ libcxx/trunk/lib/CMakeLists.txt Thu Feb 9 16:53:14 2017
@@ -332,7 +332,7 @@ if (LIBCXX_ENABLE_SHARED AND LIBCXX_ENAB
# after cxx builds.
add_custom_command(TARGET cxx_shared POST_BUILD
COMMAND
- ${PYTHON_EXECUTABLE} ${LIBCXX_SOURCE_DIR}/utils/gen_link_script/gen_link_script.py
+ ${PYTHON_EXECUTABLE} ${LIBCXX_SOURCE_DIR}/utils/gen_link_script.py
ARGS
"$<TARGET_LINKER_FILE:cxx_shared>"
${LIBCXX_INTERFACE_LIBRARY_NAMES}
Modified: libcxx/trunk/lib/abi/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/lib/abi/CMakeLists.txt?rev=294644&r1=294643&r2=294644&view=diff
==============================================================================
--- libcxx/trunk/lib/abi/CMakeLists.txt (original)
+++ libcxx/trunk/lib/abi/CMakeLists.txt Thu Feb 9 16:53:14 2017
@@ -27,7 +27,7 @@ endif()
if (LIBCXX_HAS_ABILIST_CONFIGURATION)
set(ABILIST_FILE "${CMAKE_CURRENT_LIST_DIR}/${GENERIC_TARGET_TRIPLE}.abilist")
- set(SYMDIFF_EXE "${LIBCXX_SOURCE_DIR}/utils/sym_check/sym_diff.py")
+ set(SYMDIFF_EXE "${LIBCXX_SOURCE_DIR}/utils/sym_diff.py")
add_custom_target(check-cxx-abilist
${SYMDIFF_EXE} --only-stdlib-symbols --strict ${ABILIST_FILE}
$<TARGET_SONAME_FILE:cxx_shared>
Modified: libcxx/trunk/test/libcxx/test/config.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/test/config.py?rev=294644&r1=294643&r2=294644&view=diff
==============================================================================
--- libcxx/trunk/test/libcxx/test/config.py (original)
+++ libcxx/trunk/test/libcxx/test/config.py Thu Feb 9 16:53:14 2017
@@ -932,7 +932,7 @@ class Configuration(object):
# Configure run shortcut
sub.append(('%run', exec_str + ' %t.exe'))
# Configure not program substitutions
- not_py = os.path.join(self.libcxx_src_root, 'utils', 'not', 'not.py')
+ not_py = os.path.join(self.libcxx_src_root, 'utils', 'not.py')
not_str = '%s %s ' % (sys.executable, not_py)
sub.append(('not ', not_str))
Copied: libcxx/trunk/utils/gen_link_script.py (from r294612, libcxx/trunk/utils/gen_link_script/gen_link_script.py)
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/gen_link_script.py?p2=libcxx/trunk/utils/gen_link_script.py&p1=libcxx/trunk/utils/gen_link_script/gen_link_script.py&r1=294612&r2=294644&rev=294644&view=diff
==============================================================================
(empty)
Removed: libcxx/trunk/utils/gen_link_script/gen_link_script.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/gen_link_script/gen_link_script.py?rev=294643&view=auto
==============================================================================
--- libcxx/trunk/utils/gen_link_script/gen_link_script.py (original)
+++ libcxx/trunk/utils/gen_link_script/gen_link_script.py (removed)
@@ -1,84 +0,0 @@
-#!/usr/bin/env python
-#===----------------------------------------------------------------------===##
-#
-# The LLVM Compiler Infrastructure
-#
-# This file is dual licensed under the MIT and the University of Illinois Open
-# Source Licenses. See LICENSE.TXT for details.
-#
-#===----------------------------------------------------------------------===##
-
-import os
-import sys
-
-def print_and_exit(msg):
- sys.stderr.write(msg + '\n')
- sys.exit(1)
-
-def usage_and_exit():
- print_and_exit("Usage: ./gen_link_script.py [--help] [--dryrun] <path/to/libcxx.so> <public_libs>...")
-
-def help_and_exit():
- help_msg = \
-"""Usage
-
- gen_link_script.py [--help] [--dryrun] <path/to/libcxx.so> <public_libs>...
-
- Generate a linker script that links libc++ to the proper ABI library.
- The script replaces the specified libc++ symlink.
- An example script for c++abi would look like "INPUT(libc++.so.1 -lc++abi)".
-
-Arguments
- <path/to/libcxx.so> - The top level symlink to the versioned libc++ shared
- library. This file is replaced with a linker script.
- <public_libs> - List of library names to include in linker script.
-
-Exit Status:
- 0 if OK,
- 1 if the action failed.
-"""
- print_and_exit(help_msg)
-
-def parse_args():
- args = list(sys.argv)
- del args[0]
- if len(args) == 0:
- usage_and_exit()
- if args[0] == '--help':
- help_and_exit()
- dryrun = '--dryrun' == args[0]
- if dryrun:
- del args[0]
- if len(args) < 2:
- usage_and_exit()
- symlink_file = args[0]
- public_libs = args[1:]
- return dryrun, symlink_file, public_libs
-
-def main():
- dryrun, symlink_file, public_libs = parse_args()
-
- # Check that the given libc++.so file is a valid symlink.
- if not os.path.islink(symlink_file):
- print_and_exit("symlink file %s is not a symlink" % symlink_file)
-
- # Read the symlink so we know what libc++ to link to in the linker script.
- linked_libcxx = os.readlink(symlink_file)
-
- # Prepare the list of public libraries to link.
- public_libs = ['-l%s' % l for l in public_libs]
-
- # Generate the linker script contents and print the script and destination
- # information.
- contents = "INPUT(%s %s)" % (linked_libcxx, ' '.join(public_libs))
- print("GENERATING SCRIPT: '%s' as file %s" % (contents, symlink_file))
-
- # Remove the existing libc++ symlink and replace it with the script.
- if not dryrun:
- os.unlink(symlink_file)
- with open(symlink_file, 'w') as f:
- f.write(contents + "\n")
-
-
-if __name__ == '__main__':
- main()
Copied: libcxx/trunk/utils/libcxx/__init__.py (from r294612, libcxx/trunk/utils/sym_check/sym_check/__init__.py)
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/libcxx/__init__.py?p2=libcxx/trunk/utils/libcxx/__init__.py&p1=libcxx/trunk/utils/sym_check/sym_check/__init__.py&r1=294612&r2=294644&rev=294644&view=diff
==============================================================================
--- libcxx/trunk/utils/sym_check/sym_check/__init__.py (original)
+++ libcxx/trunk/utils/libcxx/__init__.py Thu Feb 9 16:53:14 2017
@@ -7,11 +7,11 @@
#
#===----------------------------------------------------------------------===##
-"""libcxx abi symbol checker"""
+"""libcxx python utilities"""
__author__ = 'Eric Fiselier'
__email__ = 'eric at efcs.ca'
__versioninfo__ = (0, 1, 0)
__version__ = ' '.join(str(v) for v in __versioninfo__) + 'dev'
-__all__ = ['diff', 'extract', 'util']
+__all__ = []
Copied: libcxx/trunk/utils/libcxx/sym_check/__init__.py (from r294612, libcxx/trunk/utils/sym_check/sym_check/__init__.py)
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/libcxx/sym_check/__init__.py?p2=libcxx/trunk/utils/libcxx/sym_check/__init__.py&p1=libcxx/trunk/utils/sym_check/sym_check/__init__.py&r1=294612&r2=294644&rev=294644&view=diff
==============================================================================
(empty)
Copied: libcxx/trunk/utils/libcxx/sym_check/diff.py (from r294612, libcxx/trunk/utils/sym_check/sym_check/diff.py)
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/libcxx/sym_check/diff.py?p2=libcxx/trunk/utils/libcxx/sym_check/diff.py&p1=libcxx/trunk/utils/sym_check/sym_check/diff.py&r1=294612&r2=294644&rev=294644&view=diff
==============================================================================
--- libcxx/trunk/utils/sym_check/sym_check/diff.py (original)
+++ libcxx/trunk/utils/libcxx/sym_check/diff.py Thu Feb 9 16:53:14 2017
@@ -11,7 +11,7 @@
diff - A set of functions for diff-ing two symbol lists.
"""
-from sym_check import util
+from libcxx.sym_check import util
def _symbol_difference(lhs, rhs):
Copied: libcxx/trunk/utils/libcxx/sym_check/extract.py (from r294612, libcxx/trunk/utils/sym_check/sym_check/extract.py)
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/libcxx/sym_check/extract.py?p2=libcxx/trunk/utils/libcxx/sym_check/extract.py&p1=libcxx/trunk/utils/sym_check/sym_check/extract.py&r1=294612&r2=294644&rev=294644&view=diff
==============================================================================
--- libcxx/trunk/utils/sym_check/sym_check/extract.py (original)
+++ libcxx/trunk/utils/libcxx/sym_check/extract.py Thu Feb 9 16:53:14 2017
@@ -14,7 +14,7 @@ import distutils.spawn
import sys
import re
-from sym_check import util
+from libcxx.sym_check import util
extract_ignore_names = ['_init', '_fini']
Copied: libcxx/trunk/utils/libcxx/sym_check/match.py (from r294612, libcxx/trunk/utils/sym_check/sym_check/match.py)
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/libcxx/sym_check/match.py?p2=libcxx/trunk/utils/libcxx/sym_check/match.py&p1=libcxx/trunk/utils/sym_check/sym_check/match.py&r1=294612&r2=294644&rev=294644&view=diff
==============================================================================
(empty)
Copied: libcxx/trunk/utils/libcxx/sym_check/util.py (from r294612, libcxx/trunk/utils/sym_check/sym_check/util.py)
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/libcxx/sym_check/util.py?p2=libcxx/trunk/utils/libcxx/sym_check/util.py&p1=libcxx/trunk/utils/sym_check/sym_check/util.py&r1=294612&r2=294644&rev=294644&view=diff
==============================================================================
--- libcxx/trunk/utils/sym_check/sym_check/util.py (original)
+++ libcxx/trunk/utils/libcxx/sym_check/util.py Thu Feb 9 16:53:14 2017
@@ -152,9 +152,9 @@ def is_library_file(filename):
def extract_or_load(filename):
- import sym_check.extract
+ import libcxx.sym_check.extract
if is_library_file(filename):
- return sym_check.extract.extract_symbols(filename)
+ return libcxx.sym_check.extract.extract_symbols(filename)
return read_syms_from_file(filename)
def adjust_mangled_name(name):
Copied: libcxx/trunk/utils/not.py (from r294612, libcxx/trunk/utils/not/not.py)
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/not.py?p2=libcxx/trunk/utils/not.py&p1=libcxx/trunk/utils/not/not.py&r1=294612&r2=294644&rev=294644&view=diff
==============================================================================
(empty)
Removed: libcxx/trunk/utils/not/not.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/not/not.py?rev=294643&view=auto
==============================================================================
--- libcxx/trunk/utils/not/not.py (original)
+++ libcxx/trunk/utils/not/not.py (removed)
@@ -1,44 +0,0 @@
-#===----------------------------------------------------------------------===##
-#
-# The LLVM Compiler Infrastructure
-#
-# This file is dual licensed under the MIT and the University of Illinois Open
-# Source Licenses. See LICENSE.TXT for details.
-#
-#===----------------------------------------------------------------------===##
-
-"""not.py is a utility for inverting the return code of commands.
-It acts similar to llvm/utils/not.
-ex: python /path/to/not.py ' echo hello
- echo $? // (prints 1)
-"""
-
-import distutils.spawn
-import subprocess
-import sys
-
-
-def main():
- argv = list(sys.argv)
- del argv[0]
- if len(argv) > 0 and argv[0] == '--crash':
- del argv[0]
- expectCrash = True
- else:
- expectCrash = False
- if len(argv) == 0:
- return 1
- prog = distutils.spawn.find_executable(argv[0])
- if prog is None:
- sys.stderr.write('Failed to find program %s' % argv[0])
- return 1
- rc = subprocess.call(argv)
- if rc < 0:
- return 0 if expectCrash else 1
- if expectCrash:
- return 1
- return rc == 0
-
-
-if __name__ == '__main__':
- exit(main())
Removed: libcxx/trunk/utils/sym_check/linux_blacklist.txt
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/sym_check/linux_blacklist.txt?rev=294643&view=auto
==============================================================================
--- libcxx/trunk/utils/sym_check/linux_blacklist.txt (original)
+++ libcxx/trunk/utils/sym_check/linux_blacklist.txt (removed)
@@ -1,19 +0,0 @@
-# all guard variables
-_ZGVNSt3__
-# all vtables
-_ZTV
-# all VTT
-_ZTT
-# all non-virtual thunks
-_ZTh
-# all virtual thunks
-_ZTv
-# typeinfo for std::__1::__types
-# There are no std::__types
-_ZTINSt3__1[0-9][0-9]*__
-# typeinfo name for std::__1::__types
-_ZTSNSt3__1[0-9][0-9]*__
-# anything using __hidden_allocator
-.*__hidden_allocator
-# anything using __sso_allocator
-.*__sso_allocator
Removed: libcxx/trunk/utils/sym_check/osx_blacklist.txt
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/sym_check/osx_blacklist.txt?rev=294643&view=auto
==============================================================================
--- libcxx/trunk/utils/sym_check/osx_blacklist.txt (original)
+++ libcxx/trunk/utils/sym_check/osx_blacklist.txt (removed)
@@ -1,19 +0,0 @@
-# all guard variables
-__ZGVNSt3__
-# all vtables
-__ZTV
-# all VTT
-__ZTT
-# all non-virtual thunks
-__ZTh
-# all virtual thunks
-__ZTv
-# typeinfo for std::__1::__types
-# There are no std::__types
-__ZTINSt3__1[0-9][0-9]*__
-# typeinfo name for std::__1::__types
-__ZTSNSt3__1[0-9][0-9]*__
-# anything using __hidden_allocator
-.*__hidden_allocator
-# anything using __sso_allocator
-.*__sso_allocator
Removed: libcxx/trunk/utils/sym_check/sym_check/__init__.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/sym_check/sym_check/__init__.py?rev=294643&view=auto
==============================================================================
--- libcxx/trunk/utils/sym_check/sym_check/__init__.py (original)
+++ libcxx/trunk/utils/sym_check/sym_check/__init__.py (removed)
@@ -1,17 +0,0 @@
-#===----------------------------------------------------------------------===##
-#
-# The LLVM Compiler Infrastructure
-#
-# This file is dual licensed under the MIT and the University of Illinois Open
-# Source Licenses. See LICENSE.TXT for details.
-#
-#===----------------------------------------------------------------------===##
-
-"""libcxx abi symbol checker"""
-
-__author__ = 'Eric Fiselier'
-__email__ = 'eric at efcs.ca'
-__versioninfo__ = (0, 1, 0)
-__version__ = ' '.join(str(v) for v in __versioninfo__) + 'dev'
-
-__all__ = ['diff', 'extract', 'util']
Removed: libcxx/trunk/utils/sym_check/sym_check/diff.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/sym_check/sym_check/diff.py?rev=294643&view=auto
==============================================================================
--- libcxx/trunk/utils/sym_check/sym_check/diff.py (original)
+++ libcxx/trunk/utils/sym_check/sym_check/diff.py (removed)
@@ -1,103 +0,0 @@
-# -*- Python -*- vim: set syntax=python tabstop=4 expandtab cc=80:
-#===----------------------------------------------------------------------===##
-#
-# The LLVM Compiler Infrastructure
-#
-# This file is dual licensed under the MIT and the University of Illinois Open
-# Source Licenses. See LICENSE.TXT for details.
-#
-#===----------------------------------------------------------------------===##
-"""
-diff - A set of functions for diff-ing two symbol lists.
-"""
-
-from sym_check import util
-
-
-def _symbol_difference(lhs, rhs):
- lhs_names = set((n['name'] for n in lhs))
- rhs_names = set((n['name'] for n in rhs))
- diff_names = lhs_names - rhs_names
- return [n for n in lhs if n['name'] in diff_names]
-
-
-def _find_by_key(sym_list, k):
- for sym in sym_list:
- if sym['name'] == k:
- return sym
- return None
-
-
-def added_symbols(old, new):
- return _symbol_difference(new, old)
-
-
-def removed_symbols(old, new):
- return _symbol_difference(old, new)
-
-
-def changed_symbols(old, new):
- changed = []
- for old_sym in old:
- if old_sym in new:
- continue
- new_sym = _find_by_key(new, old_sym['name'])
- if (new_sym is not None and not new_sym in old
- and cmp(old_sym, new_sym) != 0):
- changed += [(old_sym, new_sym)]
- return changed
-
-
-def diff(old, new):
- added = added_symbols(old, new)
- removed = removed_symbols(old, new)
- changed = changed_symbols(old, new)
- return added, removed, changed
-
-
-def report_diff(added_syms, removed_syms, changed_syms, names_only=False,
- demangle=True):
- def maybe_demangle(name):
- return util.demangle_symbol(name) if demangle else name
-
- report = ''
- for sym in added_syms:
- report += 'Symbol added: %s\n' % maybe_demangle(sym['name'])
- if not names_only:
- report += ' %s\n\n' % sym
- if added_syms and names_only:
- report += '\n'
- for sym in removed_syms:
- report += 'SYMBOL REMOVED: %s\n' % maybe_demangle(sym['name'])
- if not names_only:
- report += ' %s\n\n' % sym
- if removed_syms and names_only:
- report += '\n'
- if not names_only:
- for sym_pair in changed_syms:
- old_sym, new_sym = sym_pair
- old_str = '\n OLD SYMBOL: %s' % old_sym
- new_str = '\n NEW SYMBOL: %s' % new_sym
- report += ('SYMBOL CHANGED: %s%s%s\n\n' %
- (maybe_demangle(old_sym['name']),
- old_str, new_str))
-
- added = bool(len(added_syms) != 0)
- abi_break = bool(len(removed_syms))
- if not names_only:
- abi_break = abi_break or len(changed_syms)
- if added or abi_break:
- report += 'Summary\n'
- report += ' Added: %d\n' % len(added_syms)
- report += ' Removed: %d\n' % len(removed_syms)
- if not names_only:
- report += ' Changed: %d\n' % len(changed_syms)
- if not abi_break:
- report += 'Symbols added.'
- else:
- report += 'ABI BREAKAGE: SYMBOLS ADDED OR REMOVED!'
- else:
- report += 'Symbols match.'
- is_different = abi_break or bool(len(added_syms)) \
- or bool(len(changed_syms))
- return report, abi_break, is_different
Removed: libcxx/trunk/utils/sym_check/sym_check/extract.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/sym_check/sym_check/extract.py?rev=294643&view=auto
==============================================================================
--- libcxx/trunk/utils/sym_check/sym_check/extract.py (original)
+++ libcxx/trunk/utils/sym_check/sym_check/extract.py (removed)
@@ -1,193 +0,0 @@
-# -*- Python -*- vim: set syntax=python tabstop=4 expandtab cc=80:
-#===----------------------------------------------------------------------===##
-#
-# The LLVM Compiler Infrastructure
-#
-# This file is dual licensed under the MIT and the University of Illinois Open
-# Source Licenses. See LICENSE.TXT for details.
-#
-#===----------------------------------------------------------------------===##
-"""
-extract - A set of function that extract symbol lists from shared libraries.
-"""
-import distutils.spawn
-import sys
-import re
-
-from sym_check import util
-
-extract_ignore_names = ['_init', '_fini']
-
-class NMExtractor(object):
- """
- NMExtractor - Extract symbol lists from libraries using nm.
- """
-
- @staticmethod
- def find_tool():
- """
- Search for the nm executable and return the path.
- """
- return distutils.spawn.find_executable('nm')
-
- def __init__(self):
- """
- Initialize the nm executable and flags that will be used to extract
- symbols from shared libraries.
- """
- self.nm_exe = self.find_tool()
- if self.nm_exe is None:
- # ERROR no NM found
- print("ERROR: Could not find nm")
- sys.exit(1)
- self.flags = ['-P', '-g']
-
- def extract(self, lib):
- """
- Extract symbols from a library and return the results as a dict of
- parsed symbols.
- """
- cmd = [self.nm_exe] + self.flags + [lib]
- out, _, exit_code = util.execute_command_verbose(cmd)
- if exit_code != 0:
- raise RuntimeError('Failed to run %s on %s' % (self.nm_exe, lib))
- fmt_syms = (self._extract_sym(l)
- for l in out.splitlines() if l.strip())
- # Cast symbol to string.
- final_syms = (repr(s) for s in fmt_syms if self._want_sym(s))
- # Make unique and sort strings.
- tmp_list = list(sorted(set(final_syms)))
- # Cast string back to symbol.
- return util.read_syms_from_list(tmp_list)
-
- def _extract_sym(self, sym_str):
- bits = sym_str.split()
- # Everything we want has at least two columns.
- if len(bits) < 2:
- return None
- new_sym = {
- 'name': bits[0],
- 'type': bits[1],
- 'is_defined': (bits[1].lower() != 'u')
- }
- new_sym['name'] = new_sym['name'].replace('@@', '@')
- new_sym = self._transform_sym_type(new_sym)
- # NM types which we want to save the size for.
- if new_sym['type'] == 'OBJECT' and len(bits) > 3:
- new_sym['size'] = int(bits[3], 16)
- return new_sym
-
- @staticmethod
- def _want_sym(sym):
- """
- Check that s is a valid symbol that we want to keep.
- """
- if sym is None or len(sym) < 2:
- return False
- if sym['name'] in extract_ignore_names:
- return False
- bad_types = ['t', 'b', 'r', 'd', 'w']
- return (sym['type'] not in bad_types
- and sym['name'] not in ['__bss_start', '_end', '_edata'])
-
- @staticmethod
- def _transform_sym_type(sym):
- """
- Map the nm single letter output for type to either FUNC or OBJECT.
- If the type is not recognized it is left unchanged.
- """
- func_types = ['T', 'W']
- obj_types = ['B', 'D', 'R', 'V', 'S']
- if sym['type'] in func_types:
- sym['type'] = 'FUNC'
- elif sym['type'] in obj_types:
- sym['type'] = 'OBJECT'
- return sym
-
-class ReadElfExtractor(object):
- """
- ReadElfExtractor - Extract symbol lists from libraries using readelf.
- """
-
- @staticmethod
- def find_tool():
- """
- Search for the readelf executable and return the path.
- """
- return distutils.spawn.find_executable('readelf')
-
- def __init__(self):
- """
- Initialize the readelf executable and flags that will be used to
- extract symbols from shared libraries.
- """
- self.tool = self.find_tool()
- if self.tool is None:
- # ERROR no NM found
- print("ERROR: Could not find readelf")
- sys.exit(1)
- self.flags = ['--wide', '--symbols']
-
- def extract(self, lib):
- """
- Extract symbols from a library and return the results as a dict of
- parsed symbols.
- """
- cmd = [self.tool] + self.flags + [lib]
- out, _, exit_code = util.execute_command_verbose(cmd)
- if exit_code != 0:
- raise RuntimeError('Failed to run %s on %s' % (self.nm_exe, lib))
- dyn_syms = self.get_dynsym_table(out)
- return self.process_syms(dyn_syms)
-
- def process_syms(self, sym_list):
- new_syms = []
- for s in sym_list:
- parts = s.split()
- if not parts:
- continue
- assert len(parts) == 7 or len(parts) == 8 or len(parts) == 9
- if len(parts) == 7:
- continue
- new_sym = {
- 'name': parts[7],
- 'size': int(parts[2]),
- 'type': parts[3],
- 'is_defined': (parts[6] != 'UND')
- }
- assert new_sym['type'] in ['OBJECT', 'FUNC', 'NOTYPE']
- if new_sym['name'] in extract_ignore_names:
- continue
- if new_sym['type'] == 'NOTYPE':
- continue
- if new_sym['type'] == 'FUNC':
- del new_sym['size']
- new_syms += [new_sym]
- return new_syms
-
- def get_dynsym_table(self, out):
- lines = out.splitlines()
- start = -1
- end = -1
- for i in range(len(lines)):
- if lines[i].startswith("Symbol table '.dynsym'"):
- start = i + 2
- if start != -1 and end == -1 and not lines[i].strip():
- end = i + 1
- assert start != -1
- if end == -1:
- end = len(lines)
- return lines[start:end]
-
-
-def extract_symbols(lib_file):
- """
- Extract and return a list of symbols extracted from a dynamic library.
- The symbols are extracted using NM. They are then filtered and formated.
- Finally they symbols are made unique.
- """
- if ReadElfExtractor.find_tool():
- extractor = ReadElfExtractor()
- else:
- extractor = NMExtractor()
- return extractor.extract(lib_file)
Removed: libcxx/trunk/utils/sym_check/sym_check/match.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/sym_check/sym_check/match.py?rev=294643&view=auto
==============================================================================
--- libcxx/trunk/utils/sym_check/sym_check/match.py (original)
+++ libcxx/trunk/utils/sym_check/sym_check/match.py (removed)
@@ -1,40 +0,0 @@
-# -*- Python -*- vim: set syntax=python tabstop=4 expandtab cc=80:
-#===----------------------------------------------------------------------===##
-#
-# The LLVM Compiler Infrastructure
-#
-# This file is dual licensed under the MIT and the University of Illinois Open
-# Source Licenses. See LICENSE.TXT for details.
-#
-#===----------------------------------------------------------------------===##
-"""
-match - A set of functions for matching symbols in a list to a list of regexs
-"""
-
-import re
-
-
-def find_and_report_matching(symbol_list, regex_list):
- report = ''
- found_count = 0
- for regex_str in regex_list:
- report += 'Matching regex "%s":\n' % regex_str
- matching_list = find_matching_symbols(symbol_list, regex_str)
- if not matching_list:
- report += ' No matches found\n\n'
- continue
- # else
- found_count += len(matching_list)
- for m in matching_list:
- report += ' MATCHES: %s\n' % m['name']
- report += '\n'
- return found_count, report
-
-
-def find_matching_symbols(symbol_list, regex_str):
- regex = re.compile(regex_str)
- matching_list = []
- for s in symbol_list:
- if regex.match(s['name']):
- matching_list += [s]
- return matching_list
Removed: libcxx/trunk/utils/sym_check/sym_check/util.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/sym_check/sym_check/util.py?rev=294643&view=auto
==============================================================================
--- libcxx/trunk/utils/sym_check/sym_check/util.py (original)
+++ libcxx/trunk/utils/sym_check/sym_check/util.py (removed)
@@ -1,323 +0,0 @@
-#===----------------------------------------------------------------------===##
-#
-# The LLVM Compiler Infrastructure
-#
-# This file is dual licensed under the MIT and the University of Illinois Open
-# Source Licenses. See LICENSE.TXT for details.
-#
-#===----------------------------------------------------------------------===##
-
-import ast
-import distutils.spawn
-import signal
-import subprocess
-import sys
-import re
-
-def to_bytes(str):
- # Encode to UTF-8 to get binary data.
- if isinstance(str, bytes):
- return str
- return str.encode('utf-8')
-
-def to_string(bytes):
- if isinstance(bytes, str):
- return bytes
- return to_bytes(bytes)
-
-def convert_string(bytes):
- try:
- return to_string(bytes.decode('utf-8'))
- except AttributeError: # 'str' object has no attribute 'decode'.
- return str(bytes)
- except UnicodeError:
- return str(bytes)
-
-def execute_command(cmd, input_str=None):
- """
- Execute a command, capture and return its output.
- """
- kwargs = {
- 'stdin': subprocess.PIPE,
- 'stdout': subprocess.PIPE,
- 'stderr': subprocess.PIPE,
- }
- p = subprocess.Popen(cmd, **kwargs)
- out, err = p.communicate(input=input_str)
- exitCode = p.wait()
- if exitCode == -signal.SIGINT:
- raise KeyboardInterrupt
- out = convert_string(out)
- err = convert_string(err)
- return out, err, exitCode
-
-
-def execute_command_verbose(cmd, input_str=None):
- """
- Execute a command and print its output on failure.
- """
- out, err, exitCode = execute_command(cmd, input_str=input_str)
- if exitCode != 0:
- report = "Command: %s\n" % ' '.join(["'%s'" % a for a in cmd])
- report += "Exit Code: %d\n" % exitCode
- if out:
- report += "Standard Output:\n--\n%s--" % out
- if err:
- report += "Standard Error:\n--\n%s--" % err
- report += "\n\nFailed!"
- sys.stderr.write('%s\n' % report)
- return out, err, exitCode
-
-
-def read_syms_from_list(slist):
- """
- Read a list of symbols from a list of strings.
- Each string is one symbol.
- """
- return [ast.literal_eval(l) for l in slist]
-
-
-def read_syms_from_file(filename):
- """
- Read a list of symbols in from a file.
- """
- with open(filename, 'r') as f:
- data = f.read()
- return read_syms_from_list(data.splitlines())
-
-
-def read_blacklist(filename):
- with open(filename, 'r') as f:
- data = f.read()
- lines = [l.strip() for l in data.splitlines() if l.strip()]
- lines = [l for l in lines if not l.startswith('#')]
- return lines
-
-
-def write_syms(sym_list, out=None, names_only=False):
- """
- Write a list of symbols to the file named by out.
- """
- out_str = ''
- out_list = sym_list
- out_list.sort(key=lambda x: x['name'])
- if names_only:
- out_list = [sym['name'] for sym in sym_list]
- for sym in out_list:
- out_str += '%s\n' % sym
- if out is None:
- sys.stdout.write(out_str)
- else:
- with open(out, 'w') as f:
- f.write(out_str)
-
-
-_cppfilt_exe = distutils.spawn.find_executable('c++filt')
-
-
-def demangle_symbol(symbol):
- if _cppfilt_exe is None:
- return symbol
- out, _, exit_code = execute_command_verbose(
- [_cppfilt_exe], input_str=symbol)
- if exit_code != 0:
- return symbol
- return out
-
-
-def is_elf(filename):
- with open(filename, 'rb') as f:
- magic_bytes = f.read(4)
- return magic_bytes == b'\x7fELF'
-
-
-def is_mach_o(filename):
- with open(filename, 'rb') as f:
- magic_bytes = f.read(4)
- return magic_bytes in [
- '\xfe\xed\xfa\xce', # MH_MAGIC
- '\xce\xfa\xed\xfe', # MH_CIGAM
- '\xfe\xed\xfa\xcf', # MH_MAGIC_64
- '\xcf\xfa\xed\xfe', # MH_CIGAM_64
- '\xca\xfe\xba\xbe', # FAT_MAGIC
- '\xbe\xba\xfe\xca' # FAT_CIGAM
- ]
-
-
-def is_library_file(filename):
- if sys.platform == 'darwin':
- return is_mach_o(filename)
- else:
- return is_elf(filename)
-
-
-def extract_or_load(filename):
- import sym_check.extract
- if is_library_file(filename):
- return sym_check.extract.extract_symbols(filename)
- return read_syms_from_file(filename)
-
-def adjust_mangled_name(name):
- if not name.startswith('__Z'):
- return name
- return name[1:]
-
-new_delete_std_symbols = [
- '_Znam',
- '_Znwm',
- '_ZdaPv',
- '_ZdaPvm',
- '_ZdlPv',
- '_ZdlPvm'
-]
-
-cxxabi_symbols = [
- '___dynamic_cast',
- '___gxx_personality_v0',
- '_ZTIDi',
- '_ZTIDn',
- '_ZTIDs',
- '_ZTIPDi',
- '_ZTIPDn',
- '_ZTIPDs',
- '_ZTIPKDi',
- '_ZTIPKDn',
- '_ZTIPKDs',
- '_ZTIPKa',
- '_ZTIPKb',
- '_ZTIPKc',
- '_ZTIPKd',
- '_ZTIPKe',
- '_ZTIPKf',
- '_ZTIPKh',
- '_ZTIPKi',
- '_ZTIPKj',
- '_ZTIPKl',
- '_ZTIPKm',
- '_ZTIPKs',
- '_ZTIPKt',
- '_ZTIPKv',
- '_ZTIPKw',
- '_ZTIPKx',
- '_ZTIPKy',
- '_ZTIPa',
- '_ZTIPb',
- '_ZTIPc',
- '_ZTIPd',
- '_ZTIPe',
- '_ZTIPf',
- '_ZTIPh',
- '_ZTIPi',
- '_ZTIPj',
- '_ZTIPl',
- '_ZTIPm',
- '_ZTIPs',
- '_ZTIPt',
- '_ZTIPv',
- '_ZTIPw',
- '_ZTIPx',
- '_ZTIPy',
- '_ZTIa',
- '_ZTIb',
- '_ZTIc',
- '_ZTId',
- '_ZTIe',
- '_ZTIf',
- '_ZTIh',
- '_ZTIi',
- '_ZTIj',
- '_ZTIl',
- '_ZTIm',
- '_ZTIs',
- '_ZTIt',
- '_ZTIv',
- '_ZTIw',
- '_ZTIx',
- '_ZTIy',
- '_ZTSDi',
- '_ZTSDn',
- '_ZTSDs',
- '_ZTSPDi',
- '_ZTSPDn',
- '_ZTSPDs',
- '_ZTSPKDi',
- '_ZTSPKDn',
- '_ZTSPKDs',
- '_ZTSPKa',
- '_ZTSPKb',
- '_ZTSPKc',
- '_ZTSPKd',
- '_ZTSPKe',
- '_ZTSPKf',
- '_ZTSPKh',
- '_ZTSPKi',
- '_ZTSPKj',
- '_ZTSPKl',
- '_ZTSPKm',
- '_ZTSPKs',
- '_ZTSPKt',
- '_ZTSPKv',
- '_ZTSPKw',
- '_ZTSPKx',
- '_ZTSPKy',
- '_ZTSPa',
- '_ZTSPb',
- '_ZTSPc',
- '_ZTSPd',
- '_ZTSPe',
- '_ZTSPf',
- '_ZTSPh',
- '_ZTSPi',
- '_ZTSPj',
- '_ZTSPl',
- '_ZTSPm',
- '_ZTSPs',
- '_ZTSPt',
- '_ZTSPv',
- '_ZTSPw',
- '_ZTSPx',
- '_ZTSPy',
- '_ZTSa',
- '_ZTSb',
- '_ZTSc',
- '_ZTSd',
- '_ZTSe',
- '_ZTSf',
- '_ZTSh',
- '_ZTSi',
- '_ZTSj',
- '_ZTSl',
- '_ZTSm',
- '_ZTSs',
- '_ZTSt',
- '_ZTSv',
- '_ZTSw',
- '_ZTSx',
- '_ZTSy'
-]
-
-def is_stdlib_symbol_name(name):
- name = adjust_mangled_name(name)
- if re.search("@GLIBC|@GCC", name):
- return False
- if re.search('(St[0-9])|(__cxa)|(__cxxabi)', name):
- return True
- if name in new_delete_std_symbols:
- return True
- if name in cxxabi_symbols:
- return True
- if name.startswith('_Z'):
- return True
- return False
-
-def filter_stdlib_symbols(syms):
- stdlib_symbols = []
- other_symbols = []
- for s in syms:
- canon_name = adjust_mangled_name(s['name'])
- if not is_stdlib_symbol_name(canon_name):
- assert not s['is_defined'] and "found defined non-std symbol"
- other_symbols += [s]
- else:
- stdlib_symbols += [s]
- return stdlib_symbols, other_symbols
Removed: libcxx/trunk/utils/sym_check/sym_diff.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/sym_check/sym_diff.py?rev=294643&view=auto
==============================================================================
--- libcxx/trunk/utils/sym_check/sym_diff.py (original)
+++ libcxx/trunk/utils/sym_check/sym_diff.py (removed)
@@ -1,73 +0,0 @@
-#!/usr/bin/env python
-#===----------------------------------------------------------------------===##
-#
-# The LLVM Compiler Infrastructure
-#
-# This file is dual licensed under the MIT and the University of Illinois Open
-# Source Licenses. See LICENSE.TXT for details.
-#
-#===----------------------------------------------------------------------===##
-"""
-sym_diff - Compare two symbol lists and output the differences.
-"""
-
-from argparse import ArgumentParser
-import sys
-from sym_check import diff, util
-
-
-def main():
- parser = ArgumentParser(
- description='Extract a list of symbols from a shared library.')
- parser.add_argument(
- '--names-only', dest='names_only',
- help='Only print symbol names',
- action='store_true', default=False)
- parser.add_argument(
- '--removed-only', dest='removed_only',
- help='Only print removed symbols',
- 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('--strict', dest='strict',
- help="Exit with a non-zero status if any symbols "
- "differ",
- action='store_true', default=False)
- 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(
- '--demangle', dest='demangle', action='store_true', default=False)
- parser.add_argument(
- 'old_syms', metavar='old-syms', type=str,
- help='The file containing the old symbol list or a library')
- parser.add_argument(
- 'new_syms', metavar='new-syms', type=str,
- help='The file containing the new symbol list or a library')
- args = parser.parse_args()
-
- old_syms_list = util.extract_or_load(args.old_syms)
- new_syms_list = util.extract_or_load(args.new_syms)
-
- if args.only_stdlib:
- old_syms_list, _ = util.filter_stdlib_symbols(old_syms_list)
- new_syms_list, _ = util.filter_stdlib_symbols(new_syms_list)
-
- added, removed, changed = diff.diff(old_syms_list, new_syms_list)
- if args.removed_only:
- added = {}
- report, is_break, is_different = diff.report_diff(
- added, removed, changed, names_only=args.names_only,
- demangle=args.demangle)
- if args.output is None:
- print(report)
- else:
- with open(args.output, 'w') as f:
- f.write(report + '\n')
- exit_code = 1 if is_break or (args.strict and is_different) else 0
- sys.exit(exit_code)
-
-if __name__ == '__main__':
- main()
Removed: libcxx/trunk/utils/sym_check/sym_extract.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/sym_check/sym_extract.py?rev=294643&view=auto
==============================================================================
--- libcxx/trunk/utils/sym_check/sym_extract.py (original)
+++ libcxx/trunk/utils/sym_check/sym_extract.py (removed)
@@ -1,42 +0,0 @@
-#!/usr/bin/env python
-#===----------------------------------------------------------------------===##
-#
-# The LLVM Compiler Infrastructure
-#
-# This file is dual licensed under the MIT and the University of Illinois Open
-# Source Licenses. See LICENSE.TXT for details.
-#
-#===----------------------------------------------------------------------===##
-"""
-sym_extract - Extract and output a list of symbols from a shared library.
-"""
-from argparse import ArgumentParser
-from 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)
- args = parser.parse_args()
- 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)
- util.write_syms(syms, out=args.output, names_only=args.names_only)
-
-
-if __name__ == '__main__':
- main()
Removed: libcxx/trunk/utils/sym_check/sym_match.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/sym_check/sym_match.py?rev=294643&view=auto
==============================================================================
--- libcxx/trunk/utils/sym_check/sym_match.py (original)
+++ libcxx/trunk/utils/sym_check/sym_match.py (removed)
@@ -1,51 +0,0 @@
-#!/usr/bin/env python
-#===----------------------------------------------------------------------===##
-#
-# The LLVM Compiler Infrastructure
-#
-# This file is dual licensed under the MIT and the University of Illinois Open
-# Source Licenses. See LICENSE.TXT for details.
-#
-#===----------------------------------------------------------------------===##
-
-"""
-sym_match - Match all symbols in a list against a list of regexes.
-"""
-from argparse import ArgumentParser
-import sys
-from sym_check import util, match, extract
-
-
-def main():
- parser = ArgumentParser(
- description='Extract a list of symbols from a shared library.')
- parser.add_argument(
- '--blacklist', dest='blacklist',
- type=str, action='store', default=None)
- parser.add_argument(
- 'symbol_list', metavar='symbol_list', type=str,
- help='The file containing the old symbol list')
- parser.add_argument(
- 'regexes', metavar='regexes', default=[], nargs='*',
- help='The file containing the new symbol list or a library')
- args = parser.parse_args()
-
- if not args.regexes and args.blacklist is None:
- sys.stderr.write('Either a regex or a blacklist must be specified.\n')
- sys.exit(1)
- if args.blacklist:
- search_list = util.read_blacklist(args.blacklist)
- else:
- search_list = args.regexes
-
- symbol_list = util.extract_or_load(args.symbol_list)
-
- matching_count, report = match.find_and_report_matching(
- symbol_list, search_list)
- sys.stdout.write(report)
- if matching_count != 0:
- print('%d matching symbols found...' % matching_count)
-
-
-if __name__ == '__main__':
- main()
Copied: libcxx/trunk/utils/sym_diff.py (from r294612, libcxx/trunk/utils/sym_check/sym_diff.py)
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/sym_diff.py?p2=libcxx/trunk/utils/sym_diff.py&p1=libcxx/trunk/utils/sym_check/sym_diff.py&r1=294612&r2=294644&rev=294644&view=diff
==============================================================================
--- libcxx/trunk/utils/sym_check/sym_diff.py (original)
+++ libcxx/trunk/utils/sym_diff.py Thu Feb 9 16:53:14 2017
@@ -13,7 +13,7 @@ sym_diff - Compare two symbol lists and
from argparse import ArgumentParser
import sys
-from sym_check import diff, util
+from libcxx.sym_check import diff, util
def main():
Copied: libcxx/trunk/utils/sym_extract.py (from r294612, libcxx/trunk/utils/sym_check/sym_extract.py)
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/sym_extract.py?p2=libcxx/trunk/utils/sym_extract.py&p1=libcxx/trunk/utils/sym_check/sym_extract.py&r1=294612&r2=294644&rev=294644&view=diff
==============================================================================
--- libcxx/trunk/utils/sym_check/sym_extract.py (original)
+++ libcxx/trunk/utils/sym_extract.py Thu Feb 9 16:53:14 2017
@@ -11,7 +11,7 @@
sym_extract - Extract and output a list of symbols from a shared library.
"""
from argparse import ArgumentParser
-from sym_check import extract, util
+from libcxx.sym_check import extract, util
def main():
Copied: libcxx/trunk/utils/sym_match.py (from r294612, libcxx/trunk/utils/sym_check/sym_match.py)
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/sym_match.py?p2=libcxx/trunk/utils/sym_match.py&p1=libcxx/trunk/utils/sym_check/sym_match.py&r1=294612&r2=294644&rev=294644&view=diff
==============================================================================
--- libcxx/trunk/utils/sym_check/sym_match.py (original)
+++ libcxx/trunk/utils/sym_match.py Thu Feb 9 16:53:14 2017
@@ -13,7 +13,7 @@ sym_match - Match all symbols in a list
"""
from argparse import ArgumentParser
import sys
-from sym_check import util, match, extract
+from libcxx.sym_check import util, match, extract
def main():
Copied: libcxx/trunk/utils/symcheck-blacklists/linux_blacklist.txt (from r294612, libcxx/trunk/utils/sym_check/linux_blacklist.txt)
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/symcheck-blacklists/linux_blacklist.txt?p2=libcxx/trunk/utils/symcheck-blacklists/linux_blacklist.txt&p1=libcxx/trunk/utils/sym_check/linux_blacklist.txt&r1=294612&r2=294644&rev=294644&view=diff
==============================================================================
(empty)
Copied: libcxx/trunk/utils/symcheck-blacklists/osx_blacklist.txt (from r294612, libcxx/trunk/utils/sym_check/osx_blacklist.txt)
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/utils/symcheck-blacklists/osx_blacklist.txt?p2=libcxx/trunk/utils/symcheck-blacklists/osx_blacklist.txt&p1=libcxx/trunk/utils/sym_check/osx_blacklist.txt&r1=294612&r2=294644&rev=294644&view=diff
==============================================================================
(empty)
More information about the cfe-commits
mailing list