1 /* { dg-do run { target i?86-*-* x86_64-*-* } } */
2 /* { dg-options "-g -mgeneral-regs-only" } */
4 extern void exit (int);
6 typedef unsigned int uword_t
__attribute__ ((mode (__word__
)));
8 #define ERROR 0x12345670
11 #define FLAGS 0x12345673
15 #define STRING(x) XSTRING(x)
17 #define ASMNAME(cname) ASMNAME2 (__USER_LABEL_PREFIX__, cname)
18 #define ASMNAME2(prefix, cname) XSTRING (prefix) cname
20 struct interrupt_frame
29 __attribute__((naked
, used
))
33 register uword_t
*sp
__asm__("sp");
35 struct interrupt_frame
*frame
= (struct interrupt_frame
*) (sp
+ 1);
36 if (ERROR
!= error
) /* BREAK */
42 if (FLAGS
!= frame
->flags
)
55 asm ("push $" STRING (SS
) "; \
56 push $" STRING (SP
) "; \
57 push $" STRING (FLAGS
) "; \
58 push $" STRING (CS
) "; \
59 push $" STRING (IP
) "; \
60 push $" STRING (ERROR
) "; \
61 jmp " ASMNAME ("fn"));
65 /* { dg-final { gdb-test 36 "error" "0x12345670" } } */
66 /* { dg-final { gdb-test 36 "frame->ip" "0x12345671" } } */
67 /* { dg-final { gdb-test 36 "frame->cs" "0x12345672" } } */
68 /* { dg-final { gdb-test 36 "frame->flags" "0x12345673" } } */
69 /* { dg-final { gdb-test 36 "frame->sp" "0x12345674" } } */
70 /* { dg-final { gdb-test 36 "frame->ss" "0x12345675" } } */