mirror of
https://github.com/ziglang/zig.git
synced 2025-12-27 16:43:07 +00:00
std.{coff,elf}: Remove the {MachineType,EM}.toTargetCpuArch() functions.
These are fundamentally incapable of producing accurate information for reasons I've laid out in #20771. Since our only use of these functions is to check that object files have the correct machine type, and since #21020 made `std.Target.to{Coff,Elf}Machine()` more accurate, just switch these checks over to that and compare the machine type tags instead. Closes #20771.
This commit is contained in:
parent
3fb6e46f6e
commit
a69f55a7cc
@ -1060,23 +1060,6 @@ pub const MachineType = enum(u16) {
|
||||
WCEMIPSV2 = 0x169,
|
||||
|
||||
_,
|
||||
|
||||
pub fn toTargetCpuArch(machine_type: MachineType) ?std.Target.Cpu.Arch {
|
||||
return switch (machine_type) {
|
||||
.ARM => .arm,
|
||||
.POWERPC => .powerpc,
|
||||
.RISCV32 => .riscv32,
|
||||
.THUMB => .thumb,
|
||||
.I386 => .x86,
|
||||
.ARM64 => .aarch64,
|
||||
.RISCV64 => .riscv64,
|
||||
.X64 => .x86_64,
|
||||
.LOONGARCH32 => .loongarch32,
|
||||
.LOONGARCH64 => .loongarch64,
|
||||
// there's cases we don't (yet) handle
|
||||
else => null,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
pub const CoffError = error{
|
||||
|
||||
@ -1646,44 +1646,6 @@ pub const EM = enum(u16) {
|
||||
FRV = 0x5441,
|
||||
|
||||
_,
|
||||
|
||||
pub fn toTargetCpuArch(em: EM) ?std.Target.Cpu.Arch {
|
||||
return switch (em) {
|
||||
.AVR => .avr,
|
||||
.MSP430 => .msp430,
|
||||
.ARC => .arc,
|
||||
.ARM => .arm,
|
||||
.HEXAGON => .hexagon,
|
||||
.@"68K" => .m68k,
|
||||
.MIPS => .mips,
|
||||
.MIPS_RS3_LE => .mipsel,
|
||||
.PPC => .powerpc,
|
||||
.SPARC => .sparc,
|
||||
.@"386" => .x86,
|
||||
.XCORE => .xcore,
|
||||
.CSR_KALIMBA => .kalimba,
|
||||
.LANAI => .lanai,
|
||||
.AARCH64 => .aarch64,
|
||||
.PPC64 => .powerpc64,
|
||||
.RISCV => .riscv64,
|
||||
.X86_64 => .x86_64,
|
||||
.BPF => .bpfel,
|
||||
.SPARCV9 => .sparc64,
|
||||
.S390 => .s390x,
|
||||
.SPU_2 => .spu_2,
|
||||
// FIXME:
|
||||
// No support for .loongarch32 yet so it is safe to assume we are on .loongarch64.
|
||||
//
|
||||
// However, when e_machine is .LOONGARCH, we should check
|
||||
// ei_class's value to decide the CPU architecture.
|
||||
// - ELFCLASS32 => .loongarch32
|
||||
// - ELFCLASS64 => .loongarch64
|
||||
.LOONGARCH => .loongarch64,
|
||||
// there's many cases we don't (yet) handle, or will never have a
|
||||
// zig target cpu arch equivalent (such as null).
|
||||
else => null,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
pub const GRP_COMDAT = 1;
|
||||
|
||||
@ -105,12 +105,12 @@ fn parseCommon(self: *Object, allocator: Allocator, handle: std.fs.File, elf_fil
|
||||
defer allocator.free(header_buffer);
|
||||
self.header = @as(*align(1) const elf.Elf64_Ehdr, @ptrCast(header_buffer)).*;
|
||||
|
||||
const target = elf_file.base.comp.root_mod.resolved_target.result;
|
||||
if (target.cpu.arch != self.header.?.e_machine.toTargetCpuArch().?) {
|
||||
const em = elf_file.base.comp.root_mod.resolved_target.result.toElfMachine();
|
||||
if (em != self.header.?.e_machine) {
|
||||
try elf_file.reportParseError2(
|
||||
self.index,
|
||||
"invalid cpu architecture: {s}",
|
||||
.{@tagName(self.header.?.e_machine.toTargetCpuArch().?)},
|
||||
"invalid ELF machine type: {s}",
|
||||
.{@tagName(self.header.?.e_machine)},
|
||||
);
|
||||
return error.InvalidCpuArch;
|
||||
}
|
||||
|
||||
@ -56,12 +56,12 @@ pub fn parse(self: *SharedObject, elf_file: *Elf, handle: std.fs.File) !void {
|
||||
defer gpa.free(header_buffer);
|
||||
self.header = @as(*align(1) const elf.Elf64_Ehdr, @ptrCast(header_buffer)).*;
|
||||
|
||||
const target = elf_file.base.comp.root_mod.resolved_target.result;
|
||||
if (target.cpu.arch != self.header.?.e_machine.toTargetCpuArch().?) {
|
||||
const em = elf_file.base.comp.root_mod.resolved_target.result.toElfMachine();
|
||||
if (em != self.header.?.e_machine) {
|
||||
try elf_file.reportParseError2(
|
||||
self.index,
|
||||
"invalid cpu architecture: {s}",
|
||||
.{@tagName(self.header.?.e_machine.toTargetCpuArch().?)},
|
||||
"invalid ELF machine type: {s}",
|
||||
.{@tagName(self.header.?.e_machine)},
|
||||
);
|
||||
return error.InvalidCpuArch;
|
||||
}
|
||||
|
||||
@ -2257,7 +2257,7 @@ fn testMismatchedCpuArchitectureError(b: *Build, opts: Options) *Step {
|
||||
exe.linkLibC();
|
||||
|
||||
expectLinkErrors(exe, test_step, .{ .exact = &.{
|
||||
"invalid cpu architecture: aarch64",
|
||||
"invalid ELF machine type: AARCH64",
|
||||
"note: while parsing /?/a.o",
|
||||
} });
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user