Add initial support for HPPA (PA-RISC) (#793)

This commit is contained in:
John Paul Adrian Glaubitz
2025-07-24 20:21:45 +10:00
committed by GitHub
parent f9d64bd3e7
commit 5c25da2843
5 changed files with 16 additions and 0 deletions
+2
View File
@@ -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),
+1
View File
@@ -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,
+5
View File
@@ -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,
+7
View File
@@ -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,
+1
View File
@@ -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),