This change makes each unwind step inspect the instruction at the return address and, if needed, read r2 from its saved location and modify the context appropriately. The unwind logic is able to handle both ELFv1 and ELFv2 stacks. Reported by Bug 41050 Patch by Leandro Lupori! Differential Revision: https://reviews.llvm.org/D59694 llvm-svn: 360861
71 lines
2.5 KiB
Python
71 lines
2.5 KiB
Python
# -*- Python -*- vim: set ft=python ts=4 sw=4 expandtab tw=79:
|
|
|
|
# Configuration file for the 'lit' test runner.
|
|
|
|
|
|
import os
|
|
import site
|
|
|
|
site.addsitedir(os.path.dirname(__file__))
|
|
|
|
|
|
# Tell pylint that we know config and lit_config exist somewhere.
|
|
if 'PYLINT_IMPORT' in os.environ:
|
|
config = object()
|
|
lit_config = object()
|
|
|
|
# name: The name of this test suite.
|
|
config.name = 'libunwind'
|
|
|
|
# suffixes: A list of file extensions to treat as test files.
|
|
config.suffixes = ['.cpp', '.s']
|
|
|
|
# test_source_root: The root path where tests are located.
|
|
config.test_source_root = os.path.dirname(__file__)
|
|
|
|
# needed to test libunwind with code that throws exceptions
|
|
config.enable_exceptions = True
|
|
|
|
# Infer the libcxx_test_source_root for configuration import.
|
|
# If libcxx_source_root isn't specified in the config, assume that the libcxx
|
|
# and libunwind source directories are sibling directories.
|
|
libcxx_src_root = getattr(config, 'libcxx_src_root', None)
|
|
if not libcxx_src_root:
|
|
libcxx_src_root = os.path.join(config.test_source_root, '../../libcxx')
|
|
libcxx_test_src_root = os.path.join(libcxx_src_root, 'utils')
|
|
if os.path.isfile(os.path.join(libcxx_test_src_root, 'libcxx', '__init__.py')):
|
|
site.addsitedir(libcxx_test_src_root)
|
|
else:
|
|
lit_config.fatal('Could not find libcxx test directory for test imports'
|
|
' in: %s' % libcxx_test_src_root)
|
|
|
|
# Infer the test_exec_root from the libcxx_object root.
|
|
obj_root = getattr(config, 'libunwind_obj_root', None)
|
|
|
|
# Check that the test exec root is known.
|
|
if obj_root is None:
|
|
import libcxx.test.config
|
|
libcxx.test.config.loadSiteConfig(
|
|
lit_config, config, 'libunwind_site_config', 'LIBUNWIND_SITE_CONFIG')
|
|
obj_root = getattr(config, 'libunwind_obj_root', None)
|
|
if obj_root is None:
|
|
import tempfile
|
|
obj_root = tempfile.mkdtemp(prefix='libunwind-testsuite-')
|
|
lit_config.warning('Creating temporary directory for object root: %s' %
|
|
obj_root)
|
|
|
|
config.test_exec_root = os.path.join(obj_root, 'test')
|
|
|
|
cfg_variant = getattr(config, 'configuration_variant', 'libunwind')
|
|
if cfg_variant:
|
|
lit_config.note('Using configuration variant: %s' % cfg_variant)
|
|
|
|
# Load the Configuration class from the module name <cfg_variant>.test.config.
|
|
config_module_name = '.'.join([cfg_variant, 'test', 'config'])
|
|
config_module = __import__(config_module_name, fromlist=['Configuration'])
|
|
|
|
configuration = config_module.Configuration(lit_config, config)
|
|
configuration.configure()
|
|
configuration.print_config_info()
|
|
config.test_format = configuration.get_test_format()
|