diff options
author | Yabin Cui <yabinc@google.com> | 2016-03-07 17:44:58 -0800 |
---|---|---|
committer | The Android Automerger <android-build@google.com> | 2016-03-25 10:43:47 -0700 |
commit | d323e435b180d96efae369447351de485936e7f8 (patch) | |
tree | 8138f134a443a766e4c24696d69e65a24a864f3a | |
parent | dd06fe16b1072df07466c4534dc8f0035fbb2fe5 (diff) | |
download | android_bionic-d323e435b180d96efae369447351de485936e7f8.tar.gz android_bionic-d323e435b180d96efae369447351de485936e7f8.tar.bz2 android_bionic-d323e435b180d96efae369447351de485936e7f8.zip |
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
-rwxr-xr-x | tests/pthread_test.cpp | 14 |
1 files 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<char*>(getstack_signal_handler_arg.main_stack_base) + - getstack_signal_handler_arg.main_stack_size, reinterpret_cast<void*>(&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)); |