From c5eb15526dac23e231ae54c2461f0eb15b28303e Mon Sep 17 00:00:00 2001 From: Asherah Connor Date: Wed, 10 Mar 2021 16:26:41 +1100 Subject: [PATCH 1/2] expose machine field in ELF header --- lib/std/elf.zig | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/std/elf.zig b/lib/std/elf.zig index 26674288a4..4ad859d877 100644 --- a/lib/std/elf.zig +++ b/lib/std/elf.zig @@ -337,6 +337,7 @@ pub const ET = extern enum(u16) { /// All integers are native endian. pub const Header = struct { endian: builtin.Endian, + machine: EM, is_64: bool, entry: u64, phoff: u64, @@ -387,8 +388,14 @@ pub const Header = struct { else => return error.InvalidElfClass, }; + const machine = if (need_bswap) blk: { + const value = @enumToInt(hdr32.e_machine); + break :blk @intToEnum(EM, @byteSwap(@TypeOf(value), value)); + } else hdr32.e_machine; + return @as(Header, .{ .endian = endian, + .machine = machine, .is_64 = is_64, .entry = int(is_64, need_bswap, hdr32.e_entry, hdr64.e_entry), .phoff = int(is_64, need_bswap, hdr32.e_phoff, hdr64.e_phoff), From 24e5959840c790ec74665d22a21d82b68418bc57 Mon Sep 17 00:00:00 2001 From: Asherah Connor Date: Thu, 11 Mar 2021 10:09:51 +1100 Subject: [PATCH 2/2] elf: make EM non-exhaustive --- lib/std/elf.zig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/std/elf.zig b/lib/std/elf.zig index 4ad859d877..36382ecc42 100644 --- a/lib/std/elf.zig +++ b/lib/std/elf.zig @@ -1525,6 +1525,8 @@ pub const EM = extern enum(u16) { /// Linux kernel bpf virtual machine _BPF = 247, + + _, }; /// Section data should be writable during execution.