-
Notifications
You must be signed in to change notification settings - Fork 188
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Add a basic testcase for emulated signals. * Add a testcase for raise(SIGABRT). * Fix style. * Actually use all of the C-standard-required signals. * Update expected stderr. * Use the right version of this test file. Co-authored-by: Pat Hickey <[email protected]>
- Loading branch information
1 parent
de17ec5
commit ceabbfe
Showing
9 changed files
with
112 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
#include <signal.h> | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
|
||
int main(void) { | ||
fprintf(stderr, "raising SIGABRT...\n"); | ||
raise(SIGABRT); | ||
fprintf(stderr, "oops!\n"); | ||
return EXIT_FAILURE; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
134 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
-D_WASI_EMULATED_SIGNAL -lwasi-emulated-signal |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
raising SIGABRT... | ||
Program recieved fatal signal: Aborted | ||
Error: failed to run main module `sigabrt.c.---.wasm` | ||
|
||
Caused by: | ||
0: failed to invoke `_start` | ||
1: wasm trap: unreachable, source location: @---- | ||
wasm backtrace: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
#!/bin/bash | ||
set -euo pipefail | ||
|
||
cat \ | ||
| sed -e 's/main module `sigabrt\.c\.[^`]*\.wasm`/main module `sigabrt.c.---.wasm`/' \ | ||
| sed -e 's/source location: @[[:xdigit:]]*$/source location: @----/' \ | ||
| head -n 6 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
#include <signal.h> | ||
#include <string.h> | ||
#include <assert.h> | ||
#include <stdlib.h> | ||
#include <stdio.h> | ||
#include <errno.h> | ||
|
||
// Make sure this exists. | ||
#include <sys/signal.h> | ||
|
||
volatile sig_atomic_t flag = 0; | ||
|
||
static void handler(int n) { | ||
// This is undefined behavior by the spec, but this is just a testcase. | ||
fflush(stdout); | ||
printf("handler for signal %s\n", strsignal(n)); | ||
fflush(stdout); | ||
flag = 1; | ||
} | ||
|
||
int main(void) { | ||
// Test various raise cases that don't abort. | ||
assert(raise(SIGCHLD) == 0); | ||
#ifdef SIGCLD | ||
assert(raise(SIGCLD) == 0); | ||
#endif | ||
assert(raise(SIGURG) == 0); | ||
assert(raise(SIGWINCH) == 0); | ||
|
||
errno = 0; | ||
assert(raise(_NSIG) == -1 && errno == EINVAL); | ||
|
||
// Test psignal. | ||
psignal(SIGINT, "psignal message for SIGINT"); | ||
|
||
// Test strsignal. | ||
printf("strsignal for SIGHUP: '%s'\n", strsignal(SIGHUP)); | ||
|
||
// Some signals can't be ignored. | ||
errno = 0; | ||
assert(signal(SIGKILL, SIG_IGN) == SIG_ERR && errno == EINVAL); | ||
errno = 0; | ||
assert(signal(SIGSTOP, SIG_IGN) == SIG_ERR && errno == EINVAL); | ||
|
||
// Test that all the C-standard-required signals can be | ||
// ignored with `SIG_IGN`. | ||
int some_fatal_sigs[] = { | ||
SIGINT, SIGABRT, SIGFPE, SIGILL, SIGSEGV, SIGTERM | ||
}; | ||
for (size_t i = 0; | ||
i < sizeof(some_fatal_sigs) / sizeof(some_fatal_sigs[0]); | ||
++i) | ||
{ | ||
int sig = some_fatal_sigs[i]; | ||
assert(signal(sig, SIG_IGN) == SIG_DFL); | ||
raise(sig); | ||
assert(signal(sig, SIG_DFL) == SIG_IGN); | ||
assert(signal(sig, SIG_DFL) == SIG_DFL); | ||
} | ||
|
||
// Install a handler and invoke it. | ||
printf("beginning handler test:\n"); | ||
assert(signal(SIGWINCH, handler) == SIG_DFL); | ||
fflush(stdout); | ||
assert(raise(SIGWINCH) == 0); | ||
fflush(stdout); | ||
assert(flag == 1); | ||
printf("finished handler test\n"); | ||
|
||
// Check various API invariants. | ||
assert(signal(SIGWINCH, SIG_IGN) == handler); | ||
assert(raise(SIGWINCH) == 0); | ||
assert(signal(SIGWINCH, SIG_DFL) == SIG_IGN); | ||
assert(raise(SIGWINCH) == 0); | ||
assert(signal(SIGWINCH, SIG_DFL) == SIG_DFL); | ||
assert(raise(SIGWINCH) == 0); | ||
|
||
return EXIT_SUCCESS; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
-D_WASI_EMULATED_SIGNAL -lwasi-emulated-signal |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
psignal message for SIGINT: Interrupt |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
strsignal for SIGHUP: 'Hangup' | ||
beginning handler test: | ||
handler for signal Window changed | ||
finished handler test |