Tests for unwinding and sigaltstack on thread stack

Test: atest android_unsafe_frame_pointer_chase
Bug: 318869521
Change-Id: I0f9646edb60b3328882383ad142b8135343e86bc
diff --git a/tests/android_unsafe_frame_pointer_chase_test.cpp b/tests/android_unsafe_frame_pointer_chase_test.cpp
index 7fa50e1..409cfab 100644
--- a/tests/android_unsafe_frame_pointer_chase_test.cpp
+++ b/tests/android_unsafe_frame_pointer_chase_test.cpp
@@ -124,6 +124,7 @@
   sigaction(SIGRTMIN, &s, nullptr);
 
   raise(SIGRTMIN);
+  sigaltstack(nullptr, nullptr);
   return nullptr;
 }
 
@@ -155,4 +156,25 @@
   munmap(stacks, kStackSize * 2);
 }
 
+static void* SigaltstackOnCallerStack(void*) {
+  char altstack[kStackSize];
+  SignalBacktraceThread(altstack);
+  EXPECT_TRUE(g_handler_called);
+  EXPECT_EQ(nullptr, g_handler_tester_result);
+  g_handler_called = false;
+  return nullptr;
+}
+
+TEST(android_unsafe_frame_pointer_chase, sigaltstack_on_main_thread) {
+  SigaltstackOnCallerStack(nullptr);
+}
+
+TEST(android_unsafe_frame_pointer_chase, sigaltstack_on_pthread) {
+  pthread_t t;
+  ASSERT_EQ(0, pthread_create(&t, nullptr, SigaltstackOnCallerStack, nullptr));
+  void* retval;
+  ASSERT_EQ(0, pthread_join(t, &retval));
+  EXPECT_EQ(nullptr, retval);
+}
+
 #endif // __BIONIC__