xref: /qemu/tests/tcg/multiarch/catch-syscalls.c (revision 7653b1ea)
1 /*
2  * Test GDB syscall catchpoints.
3  *
4  * SPDX-License-Identifier: GPL-2.0-or-later
5  */
6 #define _GNU_SOURCE
7 #include <stdlib.h>
8 #include <unistd.h>
9 
10 const char *catch_syscalls_state = "start";
11 
12 void end_of_main(void)
13 {
14 }
15 
16 int main(void)
17 {
18     int ret = EXIT_FAILURE;
19     char c0 = 'A', c1;
20     int fd[2];
21 
22     catch_syscalls_state = "pipe2";
23     if (pipe2(fd, 0)) {
24         goto out;
25     }
26 
27     catch_syscalls_state = "write";
28     if (write(fd[1], &c0, sizeof(c0)) != sizeof(c0)) {
29         goto out_close;
30     }
31 
32     catch_syscalls_state = "read";
33     if (read(fd[0], &c1, sizeof(c1)) != sizeof(c1)) {
34         goto out_close;
35     }
36 
37     catch_syscalls_state = "check";
38     if (c0 == c1) {
39         ret = EXIT_SUCCESS;
40     }
41 
42 out_close:
43     catch_syscalls_state = "close";
44     close(fd[0]);
45     close(fd[1]);
46 
47 out:
48     catch_syscalls_state = "end";
49     end_of_main();
50     return ret;
51 }
52