Merge "Increase iteration count for ordering test"
diff --git a/libc/malloc_debug/tests/malloc_debug_system_tests.cpp b/libc/malloc_debug/tests/malloc_debug_system_tests.cpp
index 9e612f0..dd569fd 100644
--- a/libc/malloc_debug/tests/malloc_debug_system_tests.cpp
+++ b/libc/malloc_debug/tests/malloc_debug_system_tests.cpp
@@ -150,7 +150,7 @@
log_str->clear();
logger_list* list;
- list = android_logger_list_open(log, ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, 1000, pid);
+ list = android_logger_list_open(log, ANDROID_LOG_NONBLOCK, 1000, pid);
ASSERT_TRUE(list != nullptr);
while (true) {
diff --git a/libc/platform/bionic/macros.h b/libc/platform/bionic/macros.h
index 28a69e6..076cff1 100644
--- a/libc/platform/bionic/macros.h
+++ b/libc/platform/bionic/macros.h
@@ -83,11 +83,15 @@
#define __BIONIC_FALLTHROUGH
#endif
-template <typename T>
-static inline T* untag_address(T* p) {
+static inline uintptr_t untag_address(uintptr_t p) {
#if defined(__aarch64__)
- return reinterpret_cast<T*>(reinterpret_cast<uintptr_t>(p) & ((1ULL << 56) - 1));
+ return p & ((1ULL << 56) - 1);
#else
return p;
#endif
}
+
+template <typename T>
+static inline T* untag_address(T* p) {
+ return reinterpret_cast<T*>(untag_address(reinterpret_cast<uintptr_t>(p)));
+}
diff --git a/tests/signal_test.cpp b/tests/signal_test.cpp
index 3c66034..f465458 100644
--- a/tests/signal_test.cpp
+++ b/tests/signal_test.cpp
@@ -154,44 +154,6 @@
raise(SIGALRM);
}
-TEST(signal, sigwait_SIGALRM) {
- ScopedSignalHandler ssh(SIGALRM, [](int sig) { ASSERT_EQ(SIGALRM, sig); });
-
- sigset_t wait_set;
- sigemptyset(&wait_set);
- sigaddset(&wait_set, SIGALRM);
-
- alarm(1);
-
- int received_signal;
- errno = 0;
- ASSERT_EQ(0, sigwait(&wait_set, &received_signal));
- ASSERT_EQ(0, errno);
- ASSERT_EQ(SIGALRM, received_signal);
-}
-
-TEST(signal, sigwait64_SIGRTMIN) {
- ScopedSignalHandler ssh(SIGRTMIN, [](int sig) { ASSERT_EQ(SIGRTMIN, sig); });
-
- sigset64_t wait_set;
- sigemptyset64(&wait_set);
- sigaddset64(&wait_set, SIGRTMIN);
-
- pid_t tid = gettid();
- std::thread thread([&tid]() {
- sleep(1);
- tgkill(getpid(), tid, SIGRTMIN);
- });
-
- int received_signal;
- errno = 0;
- ASSERT_EQ(0, sigwait64(&wait_set, &received_signal));
- ASSERT_EQ(0, errno);
- ASSERT_EQ(SIGRTMIN, received_signal);
-
- thread.join();
-}
-
static int g_sigsuspend_signal_handler_call_count = 0;
TEST(signal, sigsuspend_sigpending) {
@@ -620,8 +582,7 @@
TEST(signal, sigqueue) {
ScopedSignalHandler ssh(SIGALRM, SigqueueSignalHandler, SA_SIGINFO);
- sigval_t sigval;
- sigval.sival_int = 1;
+ sigval_t sigval = {.sival_int = 1};
errno = 0;
ASSERT_EQ(0, sigqueue(getpid(), SIGALRM, sigval));
ASSERT_EQ(0, errno);
@@ -630,8 +591,7 @@
TEST(signal, pthread_sigqueue_self) {
ScopedSignalHandler ssh(SIGALRM, SigqueueSignalHandler, SA_SIGINFO);
- sigval_t sigval;
- sigval.sival_int = 1;
+ sigval_t sigval = {.sival_int = 1};
errno = 0;
ASSERT_EQ(0, pthread_sigqueue(pthread_self(), SIGALRM, sigval));
ASSERT_EQ(0, errno);
@@ -640,8 +600,7 @@
TEST(signal, pthread_sigqueue_other) {
ScopedSignalHandler ssh(SIGALRM, SigqueueSignalHandler, SA_SIGINFO);
- sigval_t sigval;
- sigval.sival_int = 1;
+ sigval_t sigval = {.sival_int = 1};
sigset_t mask;
sigfillset(&mask);
@@ -664,6 +623,44 @@
ASSERT_EQ(1, g_sigqueue_signal_handler_call_count);
}
+TEST(signal, sigwait_SIGALRM) {
+ SignalMaskRestorer smr;
+
+ // Block SIGALRM.
+ sigset_t just_SIGALRM;
+ sigemptyset(&just_SIGALRM);
+ sigaddset(&just_SIGALRM, SIGALRM);
+ ASSERT_EQ(0, sigprocmask(SIG_BLOCK, &just_SIGALRM, nullptr));
+
+ // Raise SIGALRM.
+ sigval_t sigval = {.sival_int = 1};
+ ASSERT_EQ(0, sigqueue(getpid(), SIGALRM, sigval));
+
+ // Get pending SIGALRM.
+ int sig;
+ ASSERT_EQ(0, sigwait(&just_SIGALRM, &sig));
+ ASSERT_EQ(SIGALRM, sig);
+}
+
+TEST(signal, sigwait64_SIGRTMIN) {
+ SignalMaskRestorer smr;
+
+ // Block SIGRTMIN.
+ sigset64_t just_SIGRTMIN;
+ sigemptyset64(&just_SIGRTMIN);
+ sigaddset64(&just_SIGRTMIN, SIGRTMIN);
+ ASSERT_EQ(0, sigprocmask64(SIG_BLOCK, &just_SIGRTMIN, nullptr));
+
+ // Raise SIGRTMIN.
+ sigval_t sigval = {.sival_int = 1};
+ ASSERT_EQ(0, sigqueue(getpid(), SIGRTMIN, sigval));
+
+ // Get pending SIGRTMIN.
+ int sig;
+ ASSERT_EQ(0, sigwait64(&just_SIGRTMIN, &sig));
+ ASSERT_EQ(SIGRTMIN, sig);
+}
+
TEST(signal, sigwaitinfo) {
SignalMaskRestorer smr;
@@ -674,8 +671,7 @@
ASSERT_EQ(0, sigprocmask(SIG_BLOCK, &just_SIGALRM, nullptr));
// Raise SIGALRM.
- sigval_t sigval;
- sigval.sival_int = 1;
+ sigval_t sigval = {.sival_int = 1};
ASSERT_EQ(0, sigqueue(getpid(), SIGALRM, sigval));
// Get pending SIGALRM.
@@ -697,8 +693,7 @@
ASSERT_EQ(0, sigprocmask64(SIG_BLOCK, &just_SIGRTMIN, nullptr));
// Raise SIGRTMIN.
- sigval_t sigval;
- sigval.sival_int = 1;
+ sigval_t sigval = {.sival_int = 1};
ASSERT_EQ(0, sigqueue(getpid(), SIGRTMIN, sigval));
// Get pending SIGRTMIN.
diff --git a/tests/utils.h b/tests/utils.h
index 5014ef7..5085a7a 100644
--- a/tests/utils.h
+++ b/tests/utils.h
@@ -25,6 +25,8 @@
#include <sys/wait.h>
#include <unistd.h>
+#include <bionic/macros.h>
+
#include <atomic>
#include <string>
#include <regex>
@@ -66,14 +68,6 @@
#define SKIP_WITH_HWASAN if (running_with_hwasan()) GTEST_SKIP()
-static inline void* untag_address(void* addr) {
-#if defined(__LP64__)
- constexpr uintptr_t mask = (static_cast<uintptr_t>(1) << 56) - 1;
- addr = reinterpret_cast<void*>(reinterpret_cast<uintptr_t>(addr) & mask);
-#endif
- return addr;
-}
-
#if defined(__linux__)
#include <sys/sysmacros.h>