Fix sigaction(3) for 64-bit.
Also clean up <signal.h> and revert the hacks that were necessary for 64-bit in linker/debugger.cpp until now. Change-Id: I3b0554ca8a49ee1c97cda086ce2c1954ebc11892
This commit is contained in:
@@ -210,3 +210,44 @@ TEST(signal, sigsuspend_sigpending) {
|
||||
// Restore the original set.
|
||||
assert(0 == sigprocmask(SIG_SETMASK, &original_set, NULL));
|
||||
}
|
||||
|
||||
static void EmptySignalHandler(int) {}
|
||||
static void EmptySignalAction(int, siginfo_t*, void*) {}
|
||||
|
||||
TEST(signal, sigaction) {
|
||||
// See what's currently set for SIGALRM.
|
||||
struct sigaction sa;
|
||||
memset(&sa, 0, sizeof(sa));
|
||||
ASSERT_EQ(0, sigaction(SIGALRM, NULL, &sa));
|
||||
ASSERT_TRUE(sa.sa_handler == NULL);
|
||||
ASSERT_TRUE(sa.sa_sigaction == NULL);
|
||||
ASSERT_TRUE(sa.sa_flags == 0);
|
||||
|
||||
// Set a traditional sa_handler signal handler.
|
||||
memset(&sa, 0, sizeof(sa));
|
||||
sigaddset(&sa.sa_mask, SIGALRM);
|
||||
sa.sa_flags = SA_ONSTACK;
|
||||
sa.sa_handler = EmptySignalHandler;
|
||||
ASSERT_EQ(0, sigaction(SIGALRM, &sa, NULL));
|
||||
|
||||
// Check that we can read it back.
|
||||
memset(&sa, 0, sizeof(sa));
|
||||
ASSERT_EQ(0, sigaction(SIGALRM, NULL, &sa));
|
||||
ASSERT_TRUE(sa.sa_handler == EmptySignalHandler);
|
||||
ASSERT_TRUE((void*) sa.sa_sigaction == (void*) sa.sa_handler);
|
||||
ASSERT_TRUE(sa.sa_flags == SA_ONSTACK);
|
||||
|
||||
// Set a new-style sa_sigaction signal handler.
|
||||
memset(&sa, 0, sizeof(sa));
|
||||
sigaddset(&sa.sa_mask, SIGALRM);
|
||||
sa.sa_flags = SA_ONSTACK | SA_SIGINFO;
|
||||
sa.sa_sigaction = EmptySignalAction;
|
||||
ASSERT_EQ(0, sigaction(SIGALRM, &sa, NULL));
|
||||
|
||||
// Check that we can read it back.
|
||||
memset(&sa, 0, sizeof(sa));
|
||||
ASSERT_EQ(0, sigaction(SIGALRM, NULL, &sa));
|
||||
ASSERT_TRUE(sa.sa_sigaction == EmptySignalAction);
|
||||
ASSERT_TRUE((void*) sa.sa_sigaction == (void*) sa.sa_handler);
|
||||
ASSERT_TRUE(sa.sa_flags == (SA_ONSTACK | SA_SIGINFO));
|
||||
}
|
||||
|
Reference in New Issue
Block a user