xref: /qemu/tests/tcg/multiarch/late-attach.c (revision 6ff5da16000f908140723e164d33a0b51a6c4162)
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 }
42