Returns error.InvalidDebugInfo if the encoding is EH.PE.omit.
fn readEhPointerAbs(r: *Reader, enc_ty: EH.PE.Type, addr_size_bytes: u8, endian: Endian) !union(enum)
fn readEhPointerAbs(r: *Reader, enc_ty: EH.PE.Type, addr_size_bytes: u8, endian: Endian) !union(enum) {
signed: i64,
unsigned: u64,
} {
return switch (enc_ty) {
.absptr => .{
.unsigned = switch (addr_size_bytes) {
2 => try r.takeInt(u16, endian),
4 => try r.takeInt(u32, endian),
8 => try r.takeInt(u64, endian),
else => return error.UnsupportedAddrSize,
},
},
.uleb128 => .{ .unsigned = try r.takeLeb128(u64) },
.udata2 => .{ .unsigned = try r.takeInt(u16, endian) },
.udata4 => .{ .unsigned = try r.takeInt(u32, endian) },
.udata8 => .{ .unsigned = try r.takeInt(u64, endian) },
.sleb128 => .{ .signed = try r.takeLeb128(i64) },
.sdata2 => .{ .signed = try r.takeInt(i16, endian) },
.sdata4 => .{ .signed = try r.takeInt(i32, endian) },
.sdata8 => .{ .signed = try r.takeInt(i64, endian) },
else => return bad(),
};
}