master
c 33 lines 627 Bytes
Raw
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /* See https://gitlab.com/qemu-project/qemu/-/issues/1648 */
3
4 #include <signal.h>
5
6 __attribute__((noinline))
7 void bar(void)
8 {
9 /* Success! Continue through sigreturn. */
10 }
11
12 /*
13 * Because of the change of ABI between foo and bar, the compiler is
14 * required to save XMM6-XMM15. The compiler will use MOVAPS or MOVDQA,
15 * which will trap if the stack frame is not 16 byte aligned.
16 */
17 __attribute__((noinline, ms_abi))
18 void foo(void)
19 {
20 bar();
21 }
22
23 void sighandler(int num)
24 {
25 foo();
26 }
27
28 int main(void)
29 {
30 signal(SIGUSR1, sighandler);
31 raise(SIGUSR1);
32 return 0;
33 }