diff --git a/libcxx/test/configs/apple-libc++-backdeployment.cfg.in b/libcxx/test/configs/apple-libc++-backdeployment.cfg.in --- a/libcxx/test/configs/apple-libc++-backdeployment.cfg.in +++ b/libcxx/test/configs/apple-libc++-backdeployment.cfg.in @@ -30,6 +30,15 @@ The dylib in that hierarchy is the one that will be used at runtime when running the tests. """), + libcxx.test.dsl.Parameter(name='unwind_runtime_root', type=str, + actions=lambda root: [libcxx.test.dsl.AddSubstitution('%{unwind-runtime-root}', root)], + help=""" + The simulated root of the system (for libunwind) when running tests. + + This should be a directory hierarchy under which the libunwind dylib can be found. + The dylib in that hierarchy is the one that will be used at runtime when running + the tests. + """), ] config.substitutions.append(('%{flags}', @@ -42,7 +51,7 @@ '-nostdlib++ -L %{install}/lib -lc++' )) config.substitutions.append(('%{exec}', - '%{executor} --execdir %T --env DYLD_LIBRARY_PATH="%{cxx-runtime-root}:%{abi-runtime-root}" -- ' + '%{executor} --execdir %T --env DYLD_LIBRARY_PATH="%{cxx-runtime-root}:%{abi-runtime-root}:%{unwind-runtime-root}" -- ' )) libcxx.test.newconfig.configure( diff --git a/libcxx/utils/ci/run-buildbot b/libcxx/utils/ci/run-buildbot --- a/libcxx/utils/ci/run-buildbot +++ b/libcxx/utils/ci/run-buildbot @@ -444,10 +444,13 @@ PARAMS="target_triple=${arch}-apple-macosx${DEPLOYMENT_TARGET}" PARAMS+=";cxx_runtime_root=${OSX_ROOTS}/macOS/libc++/${DEPLOYMENT_TARGET}" PARAMS+=";abi_runtime_root=${OSX_ROOTS}/macOS/libc++abi/${DEPLOYMENT_TARGET}" + PARAMS+=";unwind_runtime_root=${OSX_ROOTS}/macOS/libunwind/${DEPLOYMENT_TARGET}" PARAMS+=";use_system_cxx_lib=True" + # TODO: We should run the libunwind tests using the back-deployment dylibs too. generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Apple.cmake" \ -DLIBCXX_TEST_CONFIG="apple-libc++-backdeployment.cfg.in" \ + -DLIBCXXABI_TEST_CONFIG="apple-libc++abi-backdeployment.cfg.in" \ -DLIBCXX_TEST_PARAMS="${PARAMS}" \ -DLIBCXXABI_TEST_PARAMS="${PARAMS}" diff --git a/libcxx/test/configs/apple-libc++-backdeployment.cfg.in b/libcxxabi/test/configs/apple-libc++abi-backdeployment.cfg.in copy from libcxx/test/configs/apple-libc++-backdeployment.cfg.in copy to libcxxabi/test/configs/apple-libc++abi-backdeployment.cfg.in --- a/libcxx/test/configs/apple-libc++-backdeployment.cfg.in +++ b/libcxxabi/test/configs/apple-libc++abi-backdeployment.cfg.in @@ -1,12 +1,12 @@ -# Testing configuration for back-deployment against older Apple system libc++. +# Testing configuration for back-deployment against older Apple system libc++abi. # -# Under this configuration, we compile and link all the test suite against the latest libc++, -# however we run against the libc++ on a different platform. This emulates the workflow of +# Under this configuration, we compile and link all the test suite against the latest libc++abi, +# however we run against the libc++abi on a different platform. This emulates the workflow of # a developer building their application using recent tools but with the goal of deploying # on existing devices running an older OS (and hence an older dylib). import os, site -site.addsitedir(os.path.join('@LIBCXX_SOURCE_DIR@', 'utils')) +site.addsitedir(os.path.join('@LIBCXXABI_LIBCXX_PATH@', 'utils')) import libcxx.test.params, libcxx.test.newconfig, libcxx.test.dsl lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg') @@ -30,19 +30,29 @@ The dylib in that hierarchy is the one that will be used at runtime when running the tests. """), + libcxx.test.dsl.Parameter(name='unwind_runtime_root', type=str, + actions=lambda root: [libcxx.test.dsl.AddSubstitution('%{unwind-runtime-root}', root)], + help=""" + The simulated root of the system (for libunwind) when running tests. + + This should be a directory hierarchy under which the libunwind dylib can be found. + The dylib in that hierarchy is the one that will be used at runtime when running + the tests. + """), ] config.substitutions.append(('%{flags}', '-isysroot {}'.format('@CMAKE_OSX_SYSROOT@') if '@CMAKE_OSX_SYSROOT@' else '' )) config.substitutions.append(('%{compile_flags}', - '-nostdinc++ -isystem %{install}/include/c++/v1 -I %{libcxx}/test/support' + '-nostdinc++ -isystem %{install}/include/c++/v1 -DLIBCXXABI_NO_TIMER -D_LIBCPP_ENABLE_CXX17_REMOVED_UNEXPECTED_FUNCTIONS ' + + '-I %{libcxx}/test/support -I %{libcxx}/src' )) config.substitutions.append(('%{link_flags}', - '-nostdlib++ -L %{install}/lib -lc++' + '-nostdlib++ -L %{install}/lib -lc++ -lc++abi' )) config.substitutions.append(('%{exec}', - '%{executor} --execdir %T --env DYLD_LIBRARY_PATH="%{cxx-runtime-root}:%{abi-runtime-root}" -- ' + '%{executor} --execdir %T --env DYLD_LIBRARY_PATH="%{cxx-runtime-root}:%{abi-runtime-root}:%{unwind-runtime-root}" -- ' )) libcxx.test.newconfig.configure( diff --git a/libcxxabi/test/test_exception_address_alignment.pass.cpp b/libcxxabi/test/test_exception_address_alignment.pass.cpp --- a/libcxxabi/test/test_exception_address_alignment.pass.cpp +++ b/libcxxabi/test/test_exception_address_alignment.pass.cpp @@ -11,9 +11,8 @@ // The header provided in the SDK of older Xcodes used to provide // an incorrectly aligned _Unwind_Exception type on non-ARM. That causes these -// tests to fail when compiling against such a SDK, or when running against a -// system libc++abi that was compiled with an incorrect definition of _Unwind_Exception. -// XFAIL: apple-clang-12.0.0 && !target={{arm.*}} +// tests to fail when running against a system libc++abi and libunwind that was +// compiled with an incorrect definition of _Unwind_Exception. // XFAIL: use_system_cxx_lib && target={{.+}}-apple-macosx10.{{9|10|11|12}} // Test that the address of the exception object is properly aligned as required