diff options
| -rw-r--r-- | lib/std/coff.zig | 17 | ||||
| -rw-r--r-- | lib/std/elf.zig | 38 | ||||
| -rw-r--r-- | src/link/Elf.zig | 10 | ||||
| -rw-r--r-- | src/link/Elf/Object.zig | 10 | ||||
| -rw-r--r-- | src/link/Elf/SharedObject.zig | 10 | ||||
| -rw-r--r-- | src/link/Elf/relocatable.zig | 4 | ||||
| -rw-r--r-- | src/link/MachO.zig | 2 | ||||
| -rw-r--r-- | src/link/MachO/Dylib.zig | 4 | ||||
| -rw-r--r-- | src/link/MachO/Object.zig | 8 | ||||
| -rw-r--r-- | src/link/MachO/relocatable.zig | 2 | ||||
| -rw-r--r-- | test/link/elf.zig | 2 |
11 files changed, 26 insertions, 81 deletions
diff --git a/lib/std/coff.zig b/lib/std/coff.zig index ca05ce3cf9..da7dc0bcda 100644 --- a/lib/std/coff.zig +++ b/lib/std/coff.zig @@ -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{ diff --git a/lib/std/elf.zig b/lib/std/elf.zig index af3f1813e2..aefaca4bef 100644 --- a/lib/std/elf.zig +++ b/lib/std/elf.zig @@ -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; diff --git a/src/link/Elf.zig b/src/link/Elf.zig index 333e490d17..088485a78d 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -1100,7 +1100,7 @@ pub fn flushModule(self: *Elf, arena: Allocator, tid: Zcu.PerThread.Id, prog_nod error.MalformedObject, error.MalformedArchive, error.MismatchedEflags, - error.InvalidCpuArch, + error.InvalidMachineType, => continue, // already reported else => |e| try self.reportParseError( obj.path, @@ -1187,7 +1187,7 @@ pub fn flushModule(self: *Elf, arena: Allocator, tid: Zcu.PerThread.Id, prog_nod for (system_libs.items) |lib| { self.parseLibrary(lib, false) catch |err| switch (err) { - error.MalformedObject, error.MalformedArchive, error.InvalidCpuArch => continue, // already reported + error.MalformedObject, error.MalformedArchive, error.InvalidMachineType => continue, // already reported else => |e| try self.reportParseError( lib.path, "unexpected error: parsing library failed with error {s}", @@ -1213,7 +1213,7 @@ pub fn flushModule(self: *Elf, arena: Allocator, tid: Zcu.PerThread.Id, prog_nod error.MalformedObject, error.MalformedArchive, error.MismatchedEflags, - error.InvalidCpuArch, + error.InvalidMachineType, => continue, // already reported else => |e| try self.reportParseError( obj.path, @@ -1642,7 +1642,7 @@ fn dumpArgv(self: *Elf, comp: *Compilation) !void { pub const ParseError = error{ MalformedObject, MalformedArchive, - InvalidCpuArch, + InvalidMachineType, MismatchedEflags, OutOfMemory, Overflow, @@ -1813,7 +1813,7 @@ fn parseLdScript(self: *Elf, lib: SystemLib) ParseError!void { .needed = scr_obj.needed, .path = full_path, }, false) catch |err| switch (err) { - error.MalformedObject, error.MalformedArchive, error.InvalidCpuArch => continue, // already reported + error.MalformedObject, error.MalformedArchive, error.InvalidMachineType => continue, // already reported else => |e| try self.reportParseError( full_path, "unexpected error: parsing library failed with error {s}", diff --git a/src/link/Elf/Object.zig b/src/link/Elf/Object.zig index a6f9c4ac18..584e5ad6d3 100644 --- a/src/link/Elf/Object.zig +++ b/src/link/Elf/Object.zig @@ -105,14 +105,14 @@ 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; + return error.InvalidMachineType; } try elf_file.validateEFlags(self.index, self.header.?.e_flags); diff --git a/src/link/Elf/SharedObject.zig b/src/link/Elf/SharedObject.zig index b33853d23c..9463cad75a 100644 --- a/src/link/Elf/SharedObject.zig +++ b/src/link/Elf/SharedObject.zig @@ -56,14 +56,14 @@ 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; + return error.InvalidMachineType; } const shoff = std.math.cast(usize, self.header.?.e_shoff) orelse return error.Overflow; diff --git a/src/link/Elf/relocatable.zig b/src/link/Elf/relocatable.zig index 50b9b562d1..06850f87ac 100644 --- a/src/link/Elf/relocatable.zig +++ b/src/link/Elf/relocatable.zig @@ -21,7 +21,7 @@ pub fn flushStaticLib(elf_file: *Elf, comp: *Compilation, module_obj_path: ?[]co parsePositional(elf_file, obj.path) catch |err| switch (err) { error.MalformedObject, error.MalformedArchive, - error.InvalidCpuArch, + error.InvalidMachineType, error.MismatchedEflags, => continue, // already reported error.UnknownFileType => try elf_file.reportParseError(obj.path, "unknown file type for an object file", .{}), @@ -178,7 +178,7 @@ pub fn flushObject(elf_file: *Elf, comp: *Compilation, module_obj_path: ?[]const elf_file.parsePositional(obj.path, obj.must_link) catch |err| switch (err) { error.MalformedObject, error.MalformedArchive, - error.InvalidCpuArch, + error.InvalidMachineType, error.MismatchedEflags, => continue, // already reported else => |e| try elf_file.reportParseError( diff --git a/src/link/MachO.zig b/src/link/MachO.zig index d99fc2185e..cfcf6b7965 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -921,7 +921,7 @@ fn parseInputFileWorker(self: *MachO, file: File) void { error.MalformedObject, error.MalformedDylib, error.MalformedTbd, - error.InvalidCpuArch, + error.InvalidMachineType, error.InvalidTarget, => {}, // already reported else => |e| self.reportParseError2(file.getIndex(), "unexpected error: parsing input file failed with error {s}", .{@errorName(e)}) catch {}, diff --git a/src/link/MachO/Dylib.zig b/src/link/MachO/Dylib.zig index ce12397be4..7c52f69376 100644 --- a/src/link/MachO/Dylib.zig +++ b/src/link/MachO/Dylib.zig @@ -75,12 +75,12 @@ fn parseBinary(self: *Dylib, macho_file: *MachO) !void { macho.CPU_TYPE_X86_64 => .x86_64, else => |x| { try macho_file.reportParseError2(self.index, "unknown cpu architecture: {d}", .{x}); - return error.InvalidCpuArch; + return error.InvalidMachineType; }, }; if (macho_file.getTarget().cpu.arch != this_cpu_arch) { try macho_file.reportParseError2(self.index, "invalid cpu architecture: {s}", .{@tagName(this_cpu_arch)}); - return error.InvalidCpuArch; + return error.InvalidMachineType; } const lc_buffer = try gpa.alloc(u8, header.sizeofcmds); diff --git a/src/link/MachO/Object.zig b/src/link/MachO/Object.zig index 38cb82e858..ad83777906 100644 --- a/src/link/MachO/Object.zig +++ b/src/link/MachO/Object.zig @@ -91,12 +91,12 @@ pub fn parse(self: *Object, macho_file: *MachO) !void { macho.CPU_TYPE_X86_64 => .x86_64, else => |x| { try macho_file.reportParseError2(self.index, "unknown cpu architecture: {d}", .{x}); - return error.InvalidCpuArch; + return error.InvalidMachineType; }, }; if (cpu_arch != this_cpu_arch) { try macho_file.reportParseError2(self.index, "invalid cpu architecture: {s}", .{@tagName(this_cpu_arch)}); - return error.InvalidCpuArch; + return error.InvalidMachineType; } const lc_buffer = try gpa.alloc(u8, self.header.?.sizeofcmds); @@ -1648,12 +1648,12 @@ pub fn parseAr(self: *Object, macho_file: *MachO) !void { macho.CPU_TYPE_X86_64 => .x86_64, else => |x| { try macho_file.reportParseError2(self.index, "unknown cpu architecture: {d}", .{x}); - return error.InvalidCpuArch; + return error.InvalidMachineType; }, }; if (macho_file.getTarget().cpu.arch != this_cpu_arch) { try macho_file.reportParseError2(self.index, "invalid cpu architecture: {s}", .{@tagName(this_cpu_arch)}); - return error.InvalidCpuArch; + return error.InvalidMachineType; } const lc_buffer = try gpa.alloc(u8, self.header.?.sizeofcmds); diff --git a/src/link/MachO/relocatable.zig b/src/link/MachO/relocatable.zig index e18442b6c2..e231360928 100644 --- a/src/link/MachO/relocatable.zig +++ b/src/link/MachO/relocatable.zig @@ -232,7 +232,7 @@ fn parseInputFilesAr(macho_file: *MachO) !void { for (macho_file.objects.items) |index| { macho_file.getFile(index).?.parseAr(macho_file) catch |err| switch (err) { - error.InvalidCpuArch => {}, // already reported + error.InvalidMachineType => {}, // already reported else => |e| try macho_file.reportParseError2(index, "unexpected error: parsing input file failed with error {s}", .{@errorName(e)}), }; } diff --git a/test/link/elf.zig b/test/link/elf.zig index 98253811b2..6abf596ab7 100644 --- a/test/link/elf.zig +++ b/test/link/elf.zig @@ -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", } }); |
