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__