libc_core/arch/
x86_64.rs

1use crate::types::SigSetExtended;
2
3use super::UStack;
4
5/// 信号处理上下文的结构体
6///
7/// MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/arch/x86_64/bits/signal.h#L97>
8#[repr(C)]
9#[derive(Debug, Clone)]
10pub struct UContext {
11    /// 标志位,用于表示上下文的状态或其他标记
12    pub flags: usize,
13    /// 链接寄存器,保存返回地址或跳转地址
14    pub link: usize,
15    /// 栈,保存上下文的栈信息
16    pub stack: UStack,
17    /// 通用寄存器的上下文信息
18    pub gregs: MContext,
19    /// 信号掩码,用于记录哪些信号被屏蔽
20    pub sig_mask: SigSetExtended,
21    /// 浮点寄存器的内存表示
22    pub __fpregs_mem: [u64; 64],
23}
24
25/// 存放信号处理上下文的机器寄存器的结构体
26///
27/// MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/arch/x86_64/bits/signal.h#L72>
28#[allow(missing_docs)]
29#[repr(C)]
30#[derive(Debug, Clone)]
31pub struct MContext {
32    pub r8: usize,
33    pub r9: usize,
34    pub r10: usize,
35    pub r11: usize,
36    pub r12: usize,
37    pub r13: usize,
38    pub r14: usize,
39    pub r15: usize,
40    pub rdi: usize,
41    pub rsi: usize,
42    pub rbp: usize,
43    pub rbx: usize,
44    pub rdx: usize,
45    pub rax: usize,
46    pub rcx: usize,
47    pub rsp: usize,
48    pub rip: usize,
49    pub eflags: usize,
50    pub cs: u8,
51    pub gs: u8,
52    pub fs: u8,
53    __pad0: u8,
54    pub err: usize,
55    pub trapno: usize,
56    pub oldmask: usize,
57    pub cr2: usize,
58    pub fp_ptr: usize,
59    __reserved1: [usize; 8],
60}