125da6a860b5f72c96b4359f2228b6423eeebf30
[akaros.git] / kern / arch / x86 / ros / trapframe64.h
1 #ifndef ROS_INC_ARCH_TRAPFRAME64_H
2 #define ROS_INC_ARCH_TRAPFRAME64_H
3
4 #ifndef ROS_INC_ARCH_TRAPFRAME_H
5 #error "Do not include include ros/arch/trapframe64.h directly"
6 #endif
7
8 struct hw_trapframe {
9         uint64_t tf_rax;
10         uint64_t tf_rbx;
11         uint64_t tf_rcx;
12         uint64_t tf_rdx;
13         uint64_t tf_rbp;
14         uint64_t tf_rsi;
15         uint64_t tf_rdi;
16         uint64_t tf_r8;
17         uint64_t tf_r9;
18         uint64_t tf_r10;
19         uint64_t tf_r11;
20         uint64_t tf_r12;
21         uint64_t tf_r13;
22         uint64_t tf_r14;
23         uint64_t tf_r15;
24         uint32_t tf_trapno;
25         uint16_t tf_gs;
26         uint16_t tf_fs;
27         /* below here defined by x86 hardware (error code optional) */
28         uint32_t tf_err;
29         uint32_t tf_padding4;
30         uint64_t tf_rip;
31         uint16_t tf_cs;
32         uint16_t tf_padding3;
33         uint32_t tf_padding2;
34         uint64_t tf_rflags;
35         /* unlike 32 bit, SS:RSP is always pushed, even when not changing rings */
36         uint64_t tf_rsp;
37         uint16_t tf_ss;
38         uint16_t tf_padding1;
39         uint32_t tf_padding0;
40 };
41
42 struct sw_trapframe {
43         uint32_t tf_ebp;
44         uint32_t tf_ebx;
45         uint32_t tf_esi;
46         uint32_t tf_edi;
47         uint32_t tf_esp;
48         uint32_t tf_eip;
49         uint32_t tf_mxcsr;
50         uint16_t tf_fpucw;
51         uint16_t tf_gs;         /* something to track TLS is callee-saved (sort of) */
52 };
53
54 #endif /* ROS_INC_ARCH_TRAPFRAME64_H */