aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYabin Cui <yabinc@google.com>2016-03-07 17:44:58 -0800
committerThe Android Automerger <android-build@google.com>2016-03-25 10:43:47 -0700
commitd323e435b180d96efae369447351de485936e7f8 (patch)
tree8138f134a443a766e4c24696d69e65a24a864f3a
parentdd06fe16b1072df07466c4534dc8f0035fbb2fe5 (diff)
downloadandroid_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-xtests/pthread_test.cpp14
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));