diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2022-12-05 17:48:54 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2022-12-05 22:35:07 +0100 |
| commit | 12e34e70377882363dbedf2a7afdc8737a7435c5 (patch) | |
| tree | c3e01b1a26a83062425af5fabaef8c0fc92092cf /src/link/Dwarf.zig | |
| parent | 97827d6d38ecd078fbbcff3d71a7e104341695cd (diff) | |
| download | zig-12e34e70377882363dbedf2a7afdc8737a7435c5.tar.gz zig-12e34e70377882363dbedf2a7afdc8737a7435c5.zip | |
dwarf: pull out debug line program internals into DeclState helpers
Diffstat (limited to 'src/link/Dwarf.zig')
| -rw-r--r-- | src/link/Dwarf.zig | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/link/Dwarf.zig b/src/link/Dwarf.zig index c0a61d057f..730a2562c6 100644 --- a/src/link/Dwarf.zig +++ b/src/link/Dwarf.zig @@ -778,6 +778,33 @@ pub const DeclState = struct { try self.addTypeRelocGlobal(atom, child_ty, @intCast(u32, index)); dbg_info.appendSliceAssumeCapacity(name_with_null); // DW.AT.name, DW.FORM.string } + + pub fn advancePCAndLine( + self: *DeclState, + delta_line: i32, + delta_pc: usize, + ) error{OutOfMemory}!void { + // TODO Look into using the DWARF special opcodes to compress this data. + // It lets you emit single-byte opcodes that add different numbers to + // both the PC and the line number at the same time. + const dbg_line = &self.dbg_line; + try dbg_line.ensureUnusedCapacity(11); + dbg_line.appendAssumeCapacity(DW.LNS.advance_pc); + leb128.writeULEB128(dbg_line.writer(), delta_pc) catch unreachable; + if (delta_line != 0) { + dbg_line.appendAssumeCapacity(DW.LNS.advance_line); + leb128.writeILEB128(dbg_line.writer(), delta_line) catch unreachable; + } + dbg_line.appendAssumeCapacity(DW.LNS.copy); + } + + pub fn setPrologueEnd(self: *DeclState) error{OutOfMemory}!void { + try self.dbg_line.append(DW.LNS.set_prologue_end); + } + + pub fn setEpilogueBegin(self: *DeclState) error{OutOfMemory}!void { + try self.dbg_line.append(DW.LNS.set_epilogue_begin); + } }; pub const AbbrevEntry = struct { |
