From ec9b56ee2e3ddd5b475e9804f42f65e8b71486bd Mon Sep 17 00:00:00 2001 From: Yabin Cui Date: Mon, 7 Mar 2016 17:44:58 -0800 Subject: [PATCH] Adjust test to let it pass on libhoudini. When using libhoudini to run arm code on x86 platforms, we can't assume the main thread allocates local variables at the stack declared by kernel. (cherry picked from commit 61e4d461e5c1c5108fdfe2a9f1edec6717e7461e) Bug: http://b/27815309 Change-Id: Ic714a8e633a0bb6e85b38ee0e01e3439d0a0cea5 --- tests/pthread_test.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tests/pthread_test.cpp b/tests/pthread_test.cpp index d11ea3f7b..aab78adb7 100755 --- a/tests/pthread_test.cpp +++ b/tests/pthread_test.cpp @@ -1347,6 +1347,9 @@ static void getstack_signal_handler(int sig) { // the wrong map with [stack]. This test verifies that when the above situation happens, the main // thread's stack is found correctly. TEST(pthread, pthread_attr_getstack_in_signal_handler) { + // This test is only meaningful for the main thread, so make sure we're running on it! + ASSERT_EQ(getpid(), syscall(__NR_gettid)); + const size_t sig_stack_size = 16 * 1024; void* sig_stack = mmap(NULL, sig_stack_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); @@ -1358,6 +1361,12 @@ TEST(pthread, pthread_attr_getstack_in_signal_handler) { stack_t oss; ASSERT_EQ(0, sigaltstack(&ss, &oss)); + pthread_attr_t attr; + ASSERT_EQ(0, pthread_getattr_np(pthread_self(), &attr)); + void* main_stack_base; + size_t main_stack_size; + ASSERT_EQ(0, pthread_attr_getstack(&attr, &main_stack_base, &main_stack_size)); + ScopedSignalHandler handler(SIGUSR1, getstack_signal_handler, SA_ONSTACK); getstack_signal_handler_arg.done = false; kill(getpid(), SIGUSR1); @@ -1369,9 +1378,8 @@ TEST(pthread, pthread_attr_getstack_in_signal_handler) { getstack_signal_handler_arg.signal_handler_sp); // Verify if the main thread's stack got in the signal handler is correct. - ASSERT_LE(getstack_signal_handler_arg.main_stack_base, &ss); - ASSERT_GE(reinterpret_cast(getstack_signal_handler_arg.main_stack_base) + - getstack_signal_handler_arg.main_stack_size, reinterpret_cast(&ss)); + ASSERT_EQ(main_stack_base, getstack_signal_handler_arg.main_stack_base); + ASSERT_LE(main_stack_size, getstack_signal_handler_arg.main_stack_size); ASSERT_EQ(0, sigaltstack(&oss, nullptr)); ASSERT_EQ(0, munmap(sig_stack, sig_stack_size)); -- 2.11.0