Support big-endian PowerPC COFF

Also adds PPC COFF magic to File::parse
This commit is contained in:
Luke Street
2025-06-29 17:57:22 -06:00
parent e32d8830c5
commit 806469a22f
4 changed files with 19 additions and 7 deletions
+6 -6
View File
@@ -654,9 +654,9 @@ fn print_relocations<'data, Coff: CoffHeader>(
| IMAGE_FILE_MACHINE_MIPSFPU
| IMAGE_FILE_MACHINE_MIPSFPU16 => FLAGS_IMAGE_REL_MIPS,
IMAGE_FILE_MACHINE_ALPHA | IMAGE_FILE_MACHINE_ALPHA64 => FLAGS_IMAGE_REL_ALPHA,
IMAGE_FILE_MACHINE_POWERPC | IMAGE_FILE_MACHINE_POWERPCFP => {
FLAGS_IMAGE_REL_PPC
}
IMAGE_FILE_MACHINE_POWERPC
| IMAGE_FILE_MACHINE_POWERPCFP
| IMAGE_FILE_MACHINE_POWERPCBE => FLAGS_IMAGE_REL_PPC,
IMAGE_FILE_MACHINE_SH3
| IMAGE_FILE_MACHINE_SH3DSP
| IMAGE_FILE_MACHINE_SH3E
@@ -676,9 +676,9 @@ fn print_relocations<'data, Coff: CoffHeader>(
let typ = relocation.typ.get(LE);
p.field_enum("Type", typ, proc);
match machine {
IMAGE_FILE_MACHINE_POWERPC | IMAGE_FILE_MACHINE_POWERPCFP => {
p.flags(typ, 0, FLAGS_IMAGE_REL_PPC_BITS)
}
IMAGE_FILE_MACHINE_POWERPC
| IMAGE_FILE_MACHINE_POWERPCFP
| IMAGE_FILE_MACHINE_POWERPCBE => p.flags(typ, 0, FLAGS_IMAGE_REL_PPC_BITS),
IMAGE_FILE_MACHINE_SH3
| IMAGE_FILE_MACHINE_SH3DSP
| IMAGE_FILE_MACHINE_SH3E
+2
View File
@@ -337,6 +337,8 @@ pub const IMAGE_FILE_MACHINE_AM33: u16 = 0x01d3;
/// IBM PowerPC Little-Endian
pub const IMAGE_FILE_MACHINE_POWERPC: u16 = 0x01F0;
pub const IMAGE_FILE_MACHINE_POWERPCFP: u16 = 0x01f1;
/// IBM PowerPC Big-Endian
pub const IMAGE_FILE_MACHINE_POWERPCBE: u16 = 0x01f2;
/// Intel 64
pub const IMAGE_FILE_MACHINE_IA64: u16 = 0x0200;
/// MIPS
+7 -1
View File
@@ -147,6 +147,9 @@ where
pe::IMAGE_FILE_MACHINE_ARM64 | pe::IMAGE_FILE_MACHINE_ARM64EC => Architecture::Aarch64,
pe::IMAGE_FILE_MACHINE_I386 => Architecture::I386,
pe::IMAGE_FILE_MACHINE_AMD64 => Architecture::X86_64,
pe::IMAGE_FILE_MACHINE_POWERPC
| pe::IMAGE_FILE_MACHINE_POWERPCFP
| pe::IMAGE_FILE_MACHINE_POWERPCBE => Architecture::PowerPc,
_ => Architecture::Unknown,
}
}
@@ -160,7 +163,10 @@ where
#[inline]
fn is_little_endian(&self) -> bool {
true
match self.header.machine() {
pe::IMAGE_FILE_MACHINE_POWERPCBE => false,
_ => true,
}
}
#[inline]
+4
View File
@@ -338,6 +338,10 @@ impl FileKind {
| [0x64, 0xaa, ..]
// COFF arm64ec
| [0x41, 0xa6, ..]
// COFF ppc
| [0xf0, 0x01, ..]
| [0xf1, 0x01, ..]
| [0xf2, 0x01, ..]
// COFF x86
| [0x4c, 0x01, ..]
// COFF x86-64