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