| ... | ... | @@ -402,6 +402,26 @@ fn findFormSize(self: DwarfInfo, form: u64, di_off: usize, cuh: CompileUnit.Head |
| 402 | 402 | => return if (cuh.is_64bit) @sizeOf(u64) else @sizeOf(u32), |
| 403 | 403 | |
| 404 | 404 | 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 | |
| 405 | 425 | dwarf.FORM.exprloc => { |
| 406 | 426 | const expr_len = try leb.readULEB128(u64, reader); |
| 407 | 427 | var i: u64 = 0; |
| ... | ... | @@ -414,18 +434,15 @@ fn findFormSize(self: DwarfInfo, form: u64, di_off: usize, cuh: CompileUnit.Head |
| 414 | 434 | |
| 415 | 435 | dwarf.FORM.data1, |
| 416 | 436 | dwarf.FORM.ref1, |
| 417 | | dwarf.FORM.block1, |
| 418 | 437 | dwarf.FORM.flag, |
| 419 | 438 | => return @sizeOf(u8), |
| 420 | 439 | |
| 421 | 440 | dwarf.FORM.data2, |
| 422 | 441 | dwarf.FORM.ref2, |
| 423 | | dwarf.FORM.block2, |
| 424 | 442 | => return @sizeOf(u16), |
| 425 | 443 | |
| 426 | 444 | dwarf.FORM.data4, |
| 427 | 445 | dwarf.FORM.ref4, |
| 428 | | dwarf.FORM.block4, |
| 429 | 446 | => return @sizeOf(u32), |
| 430 | 447 | |
| 431 | 448 | dwarf.FORM.data8, |
| ... | ... | @@ -435,7 +452,6 @@ fn findFormSize(self: DwarfInfo, form: u64, di_off: usize, cuh: CompileUnit.Head |
| 435 | 452 | |
| 436 | 453 | dwarf.FORM.udata, |
| 437 | 454 | dwarf.FORM.ref_udata, |
| 438 | | dwarf.FORM.block, |
| 439 | 455 | => { |
| 440 | 456 | _ = try leb.readULEB128(u64, reader); |
| 441 | 457 | return math.cast(usize, creader.bytes_read) orelse error.Overflow; |