arch.rs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #[cfg(target_arch = "x86_64")]
  2. mod x86_64 {
  3. use gimli::{Register, X86_64};
  4. pub struct Arch;
  5. #[allow(unused)]
  6. impl Arch {
  7. pub const SP: Register = X86_64::RSP;
  8. pub const RA: Register = X86_64::RA;
  9. pub const UNWIND_DATA_REG: (Register, Register) = (X86_64::RAX, X86_64::RDX);
  10. pub const UNWIND_PRIVATE_DATA_SIZE: usize = 6;
  11. }
  12. }
  13. #[cfg(target_arch = "x86_64")]
  14. pub use x86_64::*;
  15. #[cfg(target_arch = "x86")]
  16. mod x86 {
  17. use gimli::{Register, X86};
  18. pub struct Arch;
  19. #[allow(unused)]
  20. impl Arch {
  21. pub const SP: Register = X86::ESP;
  22. pub const RA: Register = X86::RA;
  23. pub const UNWIND_DATA_REG: (Register, Register) = (X86::EAX, X86::EDX);
  24. pub const UNWIND_PRIVATE_DATA_SIZE: usize = 5;
  25. }
  26. }
  27. #[cfg(target_arch = "x86")]
  28. pub use x86::*;
  29. #[cfg(any(target_arch = "riscv64", target_arch = "riscv32"))]
  30. mod riscv {
  31. use gimli::{Register, RiscV};
  32. pub struct Arch;
  33. #[allow(unused)]
  34. impl Arch {
  35. pub const SP: Register = RiscV::SP;
  36. pub const RA: Register = RiscV::RA;
  37. pub const UNWIND_DATA_REG: (Register, Register) = (RiscV::A0, RiscV::A1);
  38. pub const UNWIND_PRIVATE_DATA_SIZE: usize = 2;
  39. }
  40. }
  41. #[cfg(any(target_arch = "riscv64", target_arch = "riscv32"))]
  42. pub use riscv::*;
  43. #[cfg(target_arch = "aarch64")]
  44. mod aarch64 {
  45. use gimli::{AArch64, Register};
  46. pub struct Arch;
  47. #[allow(unused)]
  48. impl Arch {
  49. pub const SP: Register = AArch64::SP;
  50. pub const RA: Register = AArch64::X30;
  51. pub const UNWIND_DATA_REG: (Register, Register) = (AArch64::X0, AArch64::X1);
  52. pub const UNWIND_PRIVATE_DATA_SIZE: usize = 2;
  53. }
  54. }
  55. #[cfg(target_arch = "aarch64")]
  56. pub use aarch64::*;
  57. #[cfg(not(any(
  58. target_arch = "x86_64",
  59. target_arch = "x86",
  60. target_arch = "riscv64",
  61. target_arch = "riscv32",
  62. target_arch = "aarch64"
  63. )))]
  64. compile_error!("Current architecture is not supported");