master
c 41 lines 955 Bytes
Raw
1 /*
2 * Test attaching GDB to a running process.
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 #include <assert.h>
7 #include <signal.h>
8 #include <stdio.h>
9 #include <stdlib.h>
10
11 static const char *phase = "start";
12
13 int main(void)
14 {
15 sigset_t set;
16 int sig;
17
18 assert(sigfillset(&set) == 0);
19 assert(sigprocmask(SIG_BLOCK, &set, NULL) == 0);
20
21 /* Let GDB know it can send SIGUSR1. */
22 phase = "sigwait";
23 if (getenv("LATE_ATTACH_PY")) {
24 assert(sigwait(&set, &sig) == 0);
25 if (sig != SIGUSR1) {
26 fprintf(stderr, "Unexpected signal %d\n", sig);
27 return EXIT_FAILURE;
28 }
29 }
30
31 /* Check that the guest does not see host_interrupt_signal. */
32 assert(sigpending(&set) == 0);
33 for (sig = 1; sig < NSIG; sig++) {
34 if (sigismember(&set, sig)) {
35 fprintf(stderr, "Unexpected signal %d\n", sig);
36 return EXIT_FAILURE;
37 }
38 }
39
40 return EXIT_SUCCESS;
41 }