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