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 Leoshkevichint 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