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:
Elliott Hughes
2013-10-16 22:27:54 -07:00
parent f89f1eaa60
commit c7e9b23317
20 changed files with 358 additions and 126 deletions

View File

@@ -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));
}