authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-11-08 17:39:46+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-11-08 17:45:28+01:00
log9db63d4f1d394f54225b87b53665f76a2b99d312
tree3dc7450ed322d08f80560c768516924f174340fe
parent7145064efde75aaf4711671d1f5461ea56040815

macho: fix handling of DW_FORM_block* forms


1 files changed, 20 insertions(+), 4 deletions(-)

src/link/MachO/DwarfInfo.zig+20-4
......@@ -402,6 +402,26 @@ fn findFormSize(self: DwarfInfo, form: u64, di_off: usize, cuh: CompileUnit.Head
402402 => return if (cuh.is_64bit) @sizeOf(u64) else @sizeOf(u32),
403403
404404 dwarf.FORM.addr => return cuh.address_size,
405
406 dwarf.FORM.block1,
407 dwarf.FORM.block2,
408 dwarf.FORM.block4,
409 dwarf.FORM.block,
410 => {
411 const len: u64 = switch (form) {
412 dwarf.FORM.block1 => try reader.readIntLittle(u8),
413 dwarf.FORM.block2 => try reader.readIntLittle(u16),
414 dwarf.FORM.block4 => try reader.readIntLittle(u32),
415 dwarf.FORM.block => try leb.readULEB128(u64, reader),
416 else => unreachable,
417 };
418 var i: u64 = 0;
419 while (i < len) : (i += 1) {
420 _ = try reader.readByte();
421 }
422 return creader.bytes_read;
423 },
424
405425 dwarf.FORM.exprloc => {
406426 const expr_len = try leb.readULEB128(u64, reader);
407427 var i: u64 = 0;
......@@ -414,18 +434,15 @@ fn findFormSize(self: DwarfInfo, form: u64, di_off: usize, cuh: CompileUnit.Head
414434
415435 dwarf.FORM.data1,
416436 dwarf.FORM.ref1,
417 dwarf.FORM.block1,
418437 dwarf.FORM.flag,
419438 => return @sizeOf(u8),
420439
421440 dwarf.FORM.data2,
422441 dwarf.FORM.ref2,
423 dwarf.FORM.block2,
424442 => return @sizeOf(u16),
425443
426444 dwarf.FORM.data4,
427445 dwarf.FORM.ref4,
428 dwarf.FORM.block4,
429446 => return @sizeOf(u32),
430447
431448 dwarf.FORM.data8,
......@@ -435,7 +452,6 @@ fn findFormSize(self: DwarfInfo, form: u64, di_off: usize, cuh: CompileUnit.Head
435452
436453 dwarf.FORM.udata,
437454 dwarf.FORM.ref_udata,
438 dwarf.FORM.block,
439455 => {
440456 _ = try leb.readULEB128(u64, reader);
441457 return math.cast(usize, creader.bytes_read) orelse error.Overflow;