Allow running back-deployment testing against libc++abi

Summary:
Before this patch, we could only link against the back-deployment libc++abi
dylib. This patch allows linking against the just-built libc++abi, but
running against the back-deployment one -- just like we do for libc++.

Also, add XFAIL markup to flag expected errors.

GitOrigin-RevId: 4d79ef814aedb63e85903bb145dfe7ec143c6909
diff --git a/test/catch_function_01.pass.cpp b/test/catch_function_01.pass.cpp
index bbc94ad..2978853 100644
--- a/test/catch_function_01.pass.cpp
+++ b/test/catch_function_01.pass.cpp
@@ -13,6 +13,10 @@
 // XFAIL: gcc
 // UNSUPPORTED: no-exceptions
 
+// 65ace9daa360 made it in the dylib in macOS 10.11
+// XFAIL: with_system_cxx_lib=macosx10.10
+// XFAIL: with_system_cxx_lib=macosx10.9
+
 #include <cassert>
 
 template <class Tp>
diff --git a/test/catch_member_data_pointer_01.pass.cpp b/test/catch_member_data_pointer_01.pass.cpp
index 5fe9d59..4819969 100644
--- a/test/catch_member_data_pointer_01.pass.cpp
+++ b/test/catch_member_data_pointer_01.pass.cpp
@@ -8,6 +8,10 @@
 
 // UNSUPPORTED: no-exceptions
 
+// 1b00fc5d8133 made it in the dylib in macOS 10.11
+// XFAIL: with_system_cxx_lib=macosx10.10
+// XFAIL: with_system_cxx_lib=macosx10.9
+
 #include <cassert>
 
 struct A
diff --git a/test/catch_member_pointer_nullptr.pass.cpp b/test/catch_member_pointer_nullptr.pass.cpp
index bbf1ecf..6ffb9ab 100644
--- a/test/catch_member_pointer_nullptr.pass.cpp
+++ b/test/catch_member_pointer_nullptr.pass.cpp
@@ -6,6 +6,13 @@
 //
 //===----------------------------------------------------------------------===//
 
+// Catching an exception thrown as nullptr was not properly handled before
+// 2f984cab4fa7, which landed in macOS 10.13
+// XFAIL: with_system_cxx_lib=macosx10.12
+// XFAIL: with_system_cxx_lib=macosx10.11
+// XFAIL: with_system_cxx_lib=macosx10.10
+// XFAIL: with_system_cxx_lib=macosx10.9
+
 // UNSUPPORTED: no-exceptions
 
 #include <cassert>
diff --git a/test/catch_multi_level_pointer.pass.cpp b/test/catch_multi_level_pointer.pass.cpp
index 895e611..76a734d 100644
--- a/test/catch_multi_level_pointer.pass.cpp
+++ b/test/catch_multi_level_pointer.pass.cpp
@@ -8,6 +8,10 @@
 
 // UNSUPPORTED: no-exceptions
 
+// 1b00fc5d8133 made it in the dylib in macOS 10.11
+// XFAIL: with_system_cxx_lib=macosx10.10
+// XFAIL: with_system_cxx_lib=macosx10.9
+
 #include <cassert>
 #include <cstdio>
 #include <cstdlib>
diff --git a/test/catch_pointer_nullptr.pass.cpp b/test/catch_pointer_nullptr.pass.cpp
index 6a8ed37..78b3454 100644
--- a/test/catch_pointer_nullptr.pass.cpp
+++ b/test/catch_pointer_nullptr.pass.cpp
@@ -6,6 +6,13 @@
 //
 //===----------------------------------------------------------------------===//
 
+// Catching an exception thrown as nullptr was not properly handled before
+// 2f984cab4fa7, which landed in macOS 10.13
+// XFAIL: with_system_cxx_lib=macosx10.12
+// XFAIL: with_system_cxx_lib=macosx10.11
+// XFAIL: with_system_cxx_lib=macosx10.10
+// XFAIL: with_system_cxx_lib=macosx10.9
+
 // UNSUPPORTED: c++03
 // UNSUPPORTED: no-exceptions
 
diff --git a/test/catch_ptr_02.pass.cpp b/test/catch_ptr_02.pass.cpp
index a9914cc..ce4918e 100644
--- a/test/catch_ptr_02.pass.cpp
+++ b/test/catch_ptr_02.pass.cpp
@@ -14,6 +14,9 @@
 //        See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97675.
 // ADDITIONAL_COMPILE_FLAGS: -Wno-error
 
+// The fix for PR17222 made it in the dylib for macOS 10.10
+// XFAIL: with_system_cxx_lib=macosx10.9
+
 #include <cassert>
 
 // Clang emits  warnings about exceptions of type 'Child' being caught by
diff --git a/test/cxa_vec_new_overflow_PR41395.pass.cpp b/test/cxa_vec_new_overflow_PR41395.pass.cpp
index 84ba978..17cf7c0 100644
--- a/test/cxa_vec_new_overflow_PR41395.pass.cpp
+++ b/test/cxa_vec_new_overflow_PR41395.pass.cpp
@@ -8,6 +8,14 @@
 
 // UNSUPPORTED: no-exceptions
 
+// PR41395 isn't fixed until the dylib shipped with macOS 10.15
+// XFAIL: with_system_cxx_lib=macosx10.14
+// XFAIL: with_system_cxx_lib=macosx10.13
+// XFAIL: with_system_cxx_lib=macosx10.12
+// XFAIL: with_system_cxx_lib=macosx10.11
+// XFAIL: with_system_cxx_lib=macosx10.10
+// XFAIL: with_system_cxx_lib=macosx10.9
+
 #include "cxxabi.h"
 #include <new>
 #include <cassert>
diff --git a/test/dynamic_cast.pass.cpp b/test/dynamic_cast.pass.cpp
index 49ecddb..45701ca 100644
--- a/test/dynamic_cast.pass.cpp
+++ b/test/dynamic_cast.pass.cpp
@@ -6,6 +6,16 @@
 //
 //===----------------------------------------------------------------------===//
 
+// PR33425 and PR33487 are not fixed until the dylib shipped with macOS 10.15
+// XFAIL: with_system_cxx_lib=macosx10.14
+
+// PR33439 isn't fixed until the dylib shipped with macOS 10.14
+// XFAIL: with_system_cxx_lib=macosx10.13
+// XFAIL: with_system_cxx_lib=macosx10.12
+// XFAIL: with_system_cxx_lib=macosx10.11
+// XFAIL: with_system_cxx_lib=macosx10.10
+// XFAIL: with_system_cxx_lib=macosx10.9
+
 #include <cassert>
 
 // This test explicitly tests dynamic cast with types that have inaccessible
diff --git a/test/exception_object_alignment.pass.cpp b/test/exception_object_alignment.pass.cpp
index 011ba52..2ff7448 100644
--- a/test/exception_object_alignment.pass.cpp
+++ b/test/exception_object_alignment.pass.cpp
@@ -8,6 +8,16 @@
 
 // UNSUPPORTED: no-exceptions
 
+// The situation for the alignment of exception objects is badly messed up
+// before macOS 10.14. The test fails on macOS 10.9 to 10.12, passes on macOS
+// 10.13 (no investigation done), and passes afterwards. Just mark all the OSes
+// before 10.14 as unsupported.
+// UNSUPPORTED: with_system_cxx_lib=macosx10.13
+// UNSUPPORTED: with_system_cxx_lib=macosx10.12
+// UNSUPPORTED: with_system_cxx_lib=macosx10.11
+// UNSUPPORTED: with_system_cxx_lib=macosx10.10
+// UNSUPPORTED: with_system_cxx_lib=macosx10.9
+
 // Check that the pointer __cxa_allocate_exception returns is aligned to the
 // default alignment for the target architecture.
 
diff --git a/test/incomplete_type.sh.cpp b/test/incomplete_type.sh.cpp
index cbcf753..33ef0e0 100644
--- a/test/incomplete_type.sh.cpp
+++ b/test/incomplete_type.sh.cpp
@@ -16,13 +16,15 @@
 // UNSUPPORTED: no-exceptions
 // UNSUPPORTED: no-rtti
 
-// NOTE: Link libc++abi explicitly and before libc++ so that libc++ doesn't drag
-// in the system libc++abi installation on OS X. (DYLD_LIBRARY_PATH is ignored
-// for shell tests because of Apple security features).
+// The fix for PR25898 landed in the system dylibs in macOS 10.13
+// XFAIL: with_system_cxx_lib=macosx10.12
+// XFAIL: with_system_cxx_lib=macosx10.11
+// XFAIL: with_system_cxx_lib=macosx10.10
+// XFAIL: with_system_cxx_lib=macosx10.9
 
 // RUN: %{cxx} %{flags} %{compile_flags} -Wno-unreachable-code -c %s -o %t.one.o
 // RUN: %{cxx} %{flags} %{compile_flags} -Wno-unreachable-code -c %s -o %t.two.o -DTU_ONE
-// RUN: %{cxx} %{flags} %t.one.o %t.two.o %{link_libcxxabi} %{link_flags} -o %t.exe
+// RUN: %{cxx} %{flags} %{link_flags} %t.one.o %t.two.o -o %t.exe
 // RUN: %{exec} %t.exe
 
 #include <stdio.h>
diff --git a/test/libcxxabi/test/config.py b/test/libcxxabi/test/config.py
index 45fb0f5..280a60a 100644
--- a/test/libcxxabi/test/config.py
+++ b/test/libcxxabi/test/config.py
@@ -18,7 +18,7 @@
         super(Configuration, self).__init__(lit_config, config)
         self.libcxxabi_src_root = None
         self.libcxxabi_obj_root = None
-        self.abi_library_path = None
+        self.abi_library_root = None
         self.libcxx_src_root = None
 
     def configure_src_root(self):
diff --git a/test/lit.site.cfg.in b/test/lit.site.cfg.in
index 87f955e..1b7713e 100644
--- a/test/lit.site.cfg.in
+++ b/test/lit.site.cfg.in
@@ -7,7 +7,7 @@
 config.project_obj_root         = "@CMAKE_BINARY_DIR@"
 config.libcxxabi_src_root       = "@LIBCXXABI_SOURCE_DIR@"
 config.libcxxabi_obj_root       = "@LIBCXXABI_BINARY_DIR@"
-config.abi_library_path         = "@LIBCXXABI_LIBRARY_DIR@"
+config.abi_library_root         = "@LIBCXXABI_LIBRARY_DIR@"
 config.libcxx_src_root          = "@LIBCXXABI_LIBCXX_PATH@"
 config.cxx_headers              = "@LIBCXXABI_LIBCXX_INCLUDES@"
 config.libunwind_headers        = "@LIBCXXABI_LIBUNWIND_INCLUDES_INTERNAL@"
diff --git a/test/test_aux_runtime_op_array_new.pass.cpp b/test/test_aux_runtime_op_array_new.pass.cpp
index 943ebe8..52ccce8 100644
--- a/test/test_aux_runtime_op_array_new.pass.cpp
+++ b/test/test_aux_runtime_op_array_new.pass.cpp
@@ -8,6 +8,15 @@
 
 // UNSUPPORTED: no-exceptions
 
+// ___cxa_throw_bad_array_new_length is re-exported from libc++ only starting
+// in macosx 10.15
+// XFAIL: with_system_cxx_lib=macosx10.14
+// XFAIL: with_system_cxx_lib=macosx10.13
+// XFAIL: with_system_cxx_lib=macosx10.12
+// XFAIL: with_system_cxx_lib=macosx10.11
+// XFAIL: with_system_cxx_lib=macosx10.10
+// XFAIL: with_system_cxx_lib=macosx10.9
+
 #include <cxxabi.h>
 #include <new>
 
diff --git a/test/test_demangle.pass.cpp b/test/test_demangle.pass.cpp
index cbbccb1..7ce0896 100644
--- a/test/test_demangle.pass.cpp
+++ b/test/test_demangle.pass.cpp
@@ -6,6 +6,15 @@
 //
 //===----------------------------------------------------------------------===//
 
+// The demangler does not pass all these tests with the system dylibs on macOS.
+// XFAIL: with_system_cxx_lib=macosx10.15
+// XFAIL: with_system_cxx_lib=macosx10.14
+// XFAIL: with_system_cxx_lib=macosx10.13
+// XFAIL: with_system_cxx_lib=macosx10.12
+// XFAIL: with_system_cxx_lib=macosx10.11
+// XFAIL: with_system_cxx_lib=macosx10.10
+// XFAIL: with_system_cxx_lib=macosx10.9
+
 #include "support/timer.h"
 #include <cassert>
 #include <cstdio>
diff --git a/test/test_exception_address_alignment.pass.cpp b/test/test_exception_address_alignment.pass.cpp
index 1b7316b..c72a5a2 100644
--- a/test/test_exception_address_alignment.pass.cpp
+++ b/test/test_exception_address_alignment.pass.cpp
@@ -11,10 +11,11 @@
 
 // The <unwind.h> header provided in the SDK of older Xcodes used to provide
 // an incorrectly aligned _Unwind_Exception type. That causes these tests to
-// fail with those SDKs.
-// FIXME: We mark the test as unsupported on Apple until we have a Lit feature
-//        representing the SDK version.
-// UNSUPPORTED: darwin
+// fail when linking against a libc++abi that was built with those SDKs.
+// XFAIL: with_system_cxx_lib=macosx10.12
+// XFAIL: with_system_cxx_lib=macosx10.11
+// XFAIL: with_system_cxx_lib=macosx10.10
+// XFAIL: with_system_cxx_lib=macosx10.9
 
 // Test that the address of the exception object is properly aligned as required
 // by the relevant ABI
diff --git a/test/thread_local_destruction_order.pass.cpp b/test/thread_local_destruction_order.pass.cpp
index eeb90b8..7097f29 100644
--- a/test/thread_local_destruction_order.pass.cpp
+++ b/test/thread_local_destruction_order.pass.cpp
@@ -6,19 +6,6 @@
 //
 //===----------------------------------------------------------------------===//
 
-// Darwin TLV finalization routines used to fail when creating a thread-local
-// variable in the destructor for another thread-local variable:
-//  - http://lists.llvm.org/pipermail/cfe-dev/2016-November/051376.html
-//  - rdar://29523281
-// This was fixed in dyld in macos 10.15.
-//
-// XFAIL: macosx10.14
-// XFAIL: macosx10.13
-// XFAIL: macosx10.12
-// XFAIL: macosx10.11
-// XFAIL: macosx10.10
-// XFAIL: macosx10.9
-
 // UNSUPPORTED: c++03
 // UNSUPPORTED: libcxxabi-no-threads
 
diff --git a/test/uncaught_exceptions.pass.cpp b/test/uncaught_exceptions.pass.cpp
index 3474e0c..c3c1aac 100644
--- a/test/uncaught_exceptions.pass.cpp
+++ b/test/uncaught_exceptions.pass.cpp
@@ -8,6 +8,14 @@
 
 // UNSUPPORTED: no-exceptions
 
+// __cxa_uncaught_exceptions is not re-exported from libc++ until macOS 10.15.
+// XFAIL: with_system_cxx_lib=macosx10.14
+// XFAIL: with_system_cxx_lib=macosx10.13
+// XFAIL: with_system_cxx_lib=macosx10.12
+// XFAIL: with_system_cxx_lib=macosx10.11
+// XFAIL: with_system_cxx_lib=macosx10.10
+// XFAIL: with_system_cxx_lib=macosx10.9
+
 #include <cxxabi.h>
 #include <cassert>