| #[cfg(target_arch = "x86_64")] |
| mod x86_64 { |
| use gimli::{Register, X86_64}; |
| |
| pub struct Arch; |
| |
| #[allow(unused)] |
| impl Arch { |
| pub const SP: Register = X86_64::RSP; |
| pub const RA: Register = X86_64::RA; |
| |
| pub const UNWIND_DATA_REG: (Register, Register) = (X86_64::RAX, X86_64::RDX); |
| pub const UNWIND_PRIVATE_DATA_SIZE: usize = 6; |
| } |
| } |
| #[cfg(target_arch = "x86_64")] |
| pub use x86_64::*; |
| |
| #[cfg(target_arch = "x86")] |
| mod x86 { |
| use gimli::{Register, X86}; |
| |
| pub struct Arch; |
| |
| #[allow(unused)] |
| impl Arch { |
| pub const SP: Register = X86::ESP; |
| pub const RA: Register = X86::RA; |
| |
| pub const UNWIND_DATA_REG: (Register, Register) = (X86::EAX, X86::EDX); |
| pub const UNWIND_PRIVATE_DATA_SIZE: usize = 5; |
| } |
| } |
| #[cfg(target_arch = "x86")] |
| pub use x86::*; |
| |
| #[cfg(any(target_arch = "riscv64", target_arch = "riscv32"))] |
| mod riscv { |
| use gimli::{Register, RiscV}; |
| |
| pub struct Arch; |
| |
| #[allow(unused)] |
| impl Arch { |
| pub const SP: Register = RiscV::SP; |
| pub const RA: Register = RiscV::RA; |
| |
| pub const UNWIND_DATA_REG: (Register, Register) = (RiscV::A0, RiscV::A1); |
| pub const UNWIND_PRIVATE_DATA_SIZE: usize = 2; |
| } |
| } |
| #[cfg(any(target_arch = "riscv64", target_arch = "riscv32"))] |
| pub use riscv::*; |
| |
| #[cfg(target_arch = "aarch64")] |
| mod aarch64 { |
| use gimli::{AArch64, Register}; |
| |
| pub struct Arch; |
| |
| #[allow(unused)] |
| impl Arch { |
| pub const SP: Register = AArch64::SP; |
| pub const RA: Register = AArch64::X30; |
| |
| pub const UNWIND_DATA_REG: (Register, Register) = (AArch64::X0, AArch64::X1); |
| pub const UNWIND_PRIVATE_DATA_SIZE: usize = 2; |
| } |
| } |
| #[cfg(target_arch = "aarch64")] |
| pub use aarch64::*; |
| |
| #[cfg(not(any( |
| target_arch = "x86_64", |
| target_arch = "x86", |
| target_arch = "riscv64", |
| target_arch = "riscv32", |
| target_arch = "aarch64" |
| )))] |
| compile_error!("Current architecture is not supported"); |