1use cpu_local::{CpuAreaRef, CpuIndex, CpuLocalError};
2
3#[derive(Clone, Copy, Debug, Eq, PartialEq, thiserror::Error)]
5pub enum PerCpuError {
6 #[error("per-CPU template size {actual:#x} is smaller than {minimum:#x}")]
8 AreaTooSmall {
9 actual: usize,
11 minimum: usize,
13 },
14 #[error("per-CPU stride {stride:#x} is smaller than area size {area_size:#x}")]
16 StrideTooSmall {
17 stride: usize,
19 area_size: usize,
21 },
22 #[error("per-CPU runtime base {base:#x} is not aligned to {alignment:#x}")]
24 MisalignedRuntimeBase {
25 base: usize,
27 alignment: usize,
29 },
30 #[error("per-CPU stride {stride:#x} is not aligned to {alignment:#x}")]
32 MisalignedStride {
33 stride: usize,
35 alignment: usize,
37 },
38 #[error("per-CPU template base {base:#x} is not aligned to {alignment:#x}")]
40 MisalignedTemplateBase {
41 base: usize,
43 alignment: usize,
45 },
46 #[error("per-CPU alignment metadata range {start:#x}..{end:#x} is malformed")]
48 MalformedAlignmentMetadata {
49 start: usize,
51 end: usize,
53 },
54 #[error("per-CPU symbol alignment descriptor {0:#x} is invalid")]
56 InvalidSymbolAlignment(usize),
57 #[error(
59 "per-CPU alignment descriptors require {descriptors:#x}, but linker reports {linker:#x}"
60 )]
61 AlignmentMetadataMismatch {
62 descriptors: usize,
64 linker: usize,
66 },
67 #[error("per-CPU layout address calculation overflowed")]
69 AddressOverflow,
70 #[error("per-CPU initializer table range {start:#x}..{end:#x} is malformed")]
72 MalformedInitTable {
73 start: usize,
75 end: usize,
77 },
78 #[error(
80 "per-CPU initializer {index} has invalid offset {offset:#x}, size {size:#x}, or alignment \
81 {alignment:#x}"
82 )]
83 MalformedInitRecord {
84 index: usize,
86 offset: usize,
88 size: usize,
90 alignment: usize,
92 },
93 #[error("per-CPU initializer destinations overlap at {first_offset:#x} and {second_offset:#x}")]
95 OverlappingInitRecords {
96 first_offset: usize,
98 second_offset: usize,
100 },
101 #[error("per-CPU layout initialization is already in progress")]
103 LayoutInitializationInProgress,
104 #[error("per-CPU layout has already been initialized")]
106 LayoutAlreadyInitialized,
107 #[error("per-CPU typed initializer table is unavailable on this target")]
109 InitializerTableUnavailable,
110 #[error(
112 "per-CPU template base {template_base:#x} differs from prefix address {prefix_address:#x}"
113 )]
114 PrefixPlacement {
115 template_base: usize,
117 prefix_address: usize,
119 },
120 #[error("per-CPU runtime layout is not installed")]
122 LayoutNotInstalled,
123 #[error("CPU {cpu_index:?} is outside layout area count {area_count}")]
125 CpuOutOfRange {
126 cpu_index: CpuIndex,
128 area_count: u32,
130 },
131 #[error("current CPU area {actual:?} differs from expected {expected:?}")]
133 CurrentAreaMismatch {
134 expected: CpuAreaRef,
136 actual: CpuAreaRef,
138 },
139 #[error(transparent)]
141 CpuLocal(#[from] CpuLocalError),
142}