libc_core/arch/
aarch64.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
//! This module provides the `libc` types for aarch64.
//!
//!

use crate::types::SigSetExtended;

use super::UStack;
/// 存放信号处理上下文的机器寄存器的结构体
///
/// MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/arch/aarch64/bits/signal.h#L18>
#[allow(missing_docs)]
#[repr(C)]
#[cfg_attr(
    feature = "zerocopy",
    derive(
        zerocopy::FromBytes,
        zerocopy::Immutable,
        zerocopy::IntoBytes,
        zerocopy::KnownLayout
    )
)]
#[derive(Debug, Clone)]
pub struct MContext {
    pub fault_address: usize,
    pub gregs: [usize; 31],
    pub sp: usize,
    pub pc: usize,
    pub pstate: usize,
    pub __reserved: [usize; 512],
}

/// 信号处理上下文的结构体
///
/// MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/arch/aarch64/bits/signal.h#L99>
#[repr(C)]
#[cfg_attr(
    feature = "zerocopy",
    derive(
        zerocopy::FromBytes,
        zerocopy::Immutable,
        // zerocopy::IntoBytes,
        zerocopy::KnownLayout
    )
)]
#[derive(Debug, Clone)]
pub struct UContext {
    /// 标志位,用于表示上下文的状态或其他标记
    pub flags: usize,
    /// 链接寄存器,保存返回地址或跳转地址
    pub link: usize,
    /// 栈,保存上下文的栈信息
    pub stack: UStack,
    /// 信号掩码,用于记录哪些信号被屏蔽
    pub sig_mask: SigSetExtended,
    /// NOTE: 位置填充,MContext 要求 u128 对齐
    _pad0: usize,
    /// 机器寄存器的上下文信息,**u128 对齐**
    pub regs: MContext,
}