[compiler-rt] XFAIL test on iOS
authorJulian Lettner <julian.lettner@apple.com>
Mon, 10 Aug 2020 18:45:51 +0000 (11:45 -0700)
committerJulian Lettner <julian.lettner@apple.com>
Tue, 11 Aug 2020 18:58:40 +0000 (11:58 -0700)
On iOS, when we `longjmp()` out of the signal handler, a subsequent call
to `sigaltstack()` still reports that we are executing on the signal
handler stack.
Tracking rdar://66789814

Differential Revision: https://reviews.llvm.org/D85677

compiler-rt/test/asan/TestCases/Posix/unpoison-alternate-stack.cpp

index 60a5612..d684810 100644 (file)
@@ -6,6 +6,8 @@
 // RUN: %clangxx_asan -std=c++20 -fexceptions -O0 %s -o %t -pthread
 // RUN: %run %t
 
+// XFAIL: ios && !iossim
+
 #include <cassert>
 #include <cerrno>
 #include <csetjmp>
@@ -62,12 +64,14 @@ void testOnCurrentStack() {
                                         c.RightRedzone - c.LeftRedzone));
 }
 
+bool isOnSignalStack() {
+  stack_t Stack;
+  sigaltstack(nullptr, &Stack);
+  return Stack.ss_flags == SS_ONSTACK;
+}
+
 void signalHandler(int, siginfo_t *, void *) {
-  {
-    stack_t Stack;
-    sigaltstack(nullptr, &Stack);
-    assert(Stack.ss_flags == SS_ONSTACK);
-  }
+  assert(isOnSignalStack());
 
   // test on signal alternate stack
   testOnCurrentStack();
@@ -110,6 +114,8 @@ void *threadFun(void *AltStack) {
     // Test on signal alternate stack, via signalHandler
     poisonStackAndJump(defaultStack, [] { raise(SIGUSR1); });
 
+  assert(!isOnSignalStack());
+
   assert(0 == __asan_region_is_poisoned(
                   defaultStack.LeftRedzone,
                   defaultStack.RightRedzone - defaultStack.LeftRedzone));