libc_core/arch/
x86_64.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
use crate::types::SigSetExtended;

use super::UStack;

/// 信号处理上下文的结构体
///
/// MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/arch/x86_64/bits/signal.h#L97>
#[repr(C)]
#[derive(Debug, Clone)]
pub struct UContext {
    /// 标志位,用于表示上下文的状态或其他标记
    pub flags: usize,
    /// 链接寄存器,保存返回地址或跳转地址
    pub link: usize,
    /// 栈,保存上下文的栈信息
    pub stack: UStack,
    /// 通用寄存器的上下文信息
    pub gregs: MContext,
    /// 信号掩码,用于记录哪些信号被屏蔽
    pub sig_mask: SigSetExtended,
    /// 浮点寄存器的内存表示
    pub __fpregs_mem: [u64; 64],
}

/// 存放信号处理上下文的机器寄存器的结构体
///
/// MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/arch/x86_64/bits/signal.h#L72>
#[allow(missing_docs)]
#[repr(C)]
#[derive(Debug, Clone)]
pub struct MContext {
    pub r8: usize,
    pub r9: usize,
    pub r10: usize,
    pub r11: usize,
    pub r12: usize,
    pub r13: usize,
    pub r14: usize,
    pub r15: usize,
    pub rdi: usize,
    pub rsi: usize,
    pub rbp: usize,
    pub rbx: usize,
    pub rdx: usize,
    pub rax: usize,
    pub rcx: usize,
    pub rsp: usize,
    pub rip: usize,
    pub eflags: usize,
    pub cs: u8,
    pub gs: u8,
    pub fs: u8,
    __pad0: u8,
    pub err: usize,
    pub trapno: usize,
    pub oldmask: usize,
    pub cr2: usize,
    pub fp_ptr: usize,
    __reserved1: [usize; 8],
}