mirror of
https://github.com/encounter/object.git
synced 2026-07-10 12:18:39 -07:00
Add initial support for HPPA (PA-RISC) (#793)
This commit is contained in:
@@ -19,6 +19,7 @@ pub enum Architecture {
|
||||
#[allow(non_camel_case_types)]
|
||||
X86_64_X32,
|
||||
Hexagon,
|
||||
Hppa,
|
||||
LoongArch32,
|
||||
LoongArch64,
|
||||
M68k,
|
||||
@@ -72,6 +73,7 @@ impl Architecture {
|
||||
Architecture::X86_64 => Some(AddressSize::U64),
|
||||
Architecture::X86_64_X32 => Some(AddressSize::U32),
|
||||
Architecture::Hexagon => Some(AddressSize::U32),
|
||||
Architecture::Hppa => Some(AddressSize::U32),
|
||||
Architecture::LoongArch32 => Some(AddressSize::U32),
|
||||
Architecture::LoongArch64 => Some(AddressSize::U64),
|
||||
Architecture::M68k => Some(AddressSize::U32),
|
||||
|
||||
@@ -268,6 +268,7 @@ where
|
||||
}
|
||||
(elf::EM_MIPS, true) => Architecture::Mips64,
|
||||
(elf::EM_MSP430, _) => Architecture::Msp430,
|
||||
(elf::EM_PARISC, _) => Architecture::Hppa,
|
||||
(elf::EM_PPC, _) => Architecture::PowerPc,
|
||||
(elf::EM_PPC64, _) => Architecture::PowerPc64,
|
||||
(elf::EM_RISCV, false) => Architecture::Riscv32,
|
||||
|
||||
@@ -415,6 +415,11 @@ fn parse_relocation<Elf: FileHeader>(
|
||||
elf::R_MSP430_16_BYTE => (K::Absolute, g, 16),
|
||||
_ => unknown,
|
||||
},
|
||||
elf::EM_PARISC => match r_type {
|
||||
elf::R_PARISC_DIR32 => (K::Absolute, g, 32),
|
||||
elf::R_PARISC_PCREL32 => (K::Relative, g, 32),
|
||||
_ => unknown,
|
||||
},
|
||||
elf::EM_PPC => match r_type {
|
||||
elf::R_PPC_ADDR32 => (K::Absolute, g, 32),
|
||||
_ => unknown,
|
||||
|
||||
@@ -208,6 +208,7 @@ impl<'a> Object<'a> {
|
||||
Architecture::I386 => false,
|
||||
Architecture::X86_64 => true,
|
||||
Architecture::X86_64_X32 => true,
|
||||
Architecture::Hppa => false,
|
||||
Architecture::Hexagon => true,
|
||||
Architecture::LoongArch32 => true,
|
||||
Architecture::LoongArch64 => true,
|
||||
@@ -334,6 +335,11 @@ impl<'a> Object<'a> {
|
||||
(K::Relative, _, 8) => elf::R_X86_64_PC8,
|
||||
_ => return unsupported_reloc(),
|
||||
},
|
||||
Architecture::Hppa => match (kind, encoding, size) {
|
||||
(K::Absolute, _, 32) => elf::R_PARISC_DIR32,
|
||||
(K::Relative, _, 32) => elf::R_PARISC_PCREL32,
|
||||
_ => return unsupported_reloc(),
|
||||
},
|
||||
Architecture::Hexagon => match (kind, encoding, size) {
|
||||
(K::Absolute, _, 32) => elf::R_HEX_32,
|
||||
_ => return unsupported_reloc(),
|
||||
@@ -658,6 +664,7 @@ impl<'a> Object<'a> {
|
||||
(Architecture::I386, None) => elf::EM_386,
|
||||
(Architecture::X86_64, None) => elf::EM_X86_64,
|
||||
(Architecture::X86_64_X32, None) => elf::EM_X86_64,
|
||||
(Architecture::Hppa, None) => elf::EM_PARISC,
|
||||
(Architecture::Hexagon, None) => elf::EM_HEXAGON,
|
||||
(Architecture::LoongArch32, None) => elf::EM_LOONGARCH,
|
||||
(Architecture::LoongArch64, None) => elf::EM_LOONGARCH,
|
||||
|
||||
@@ -271,6 +271,7 @@ fn elf_any() {
|
||||
(Architecture::I386, Endianness::Little),
|
||||
(Architecture::X86_64, Endianness::Little),
|
||||
(Architecture::X86_64_X32, Endianness::Little),
|
||||
(Architecture::Hppa, Endianness::Big),
|
||||
(Architecture::Hexagon, Endianness::Little),
|
||||
(Architecture::LoongArch32, Endianness::Little),
|
||||
(Architecture::LoongArch64, Endianness::Little),
|
||||
|
||||
Reference in New Issue
Block a user