authorgravatar for koachan@protonmail.comKoakuma <koachan@protonmail.com> 2022-04-21 21:08:50+07:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-05-05 19:34:06+02:00
loge963d5be0b3dbe87f68014920cd1b93109318c32
tree3592a25ad491189a9f7d199d1b200f22079a412c
parentc73eb00727e70e6d5224b371b5d0dc4ac6af4dd3

stage2: sparcv9: Simplify debug info emission, remove unused formats


1 files changed, 15 insertions(+), 41 deletions(-)

src/arch/sparcv9/Emit.zig+15-41
...@@ -101,22 +101,22 @@ fn mirDbgLine(emit: *Emit, inst: Mir.Inst.Index) !void {...@@ -101,22 +101,22 @@ fn mirDbgLine(emit: *Emit, inst: Mir.Inst.Index) !void {
101 }101 }
102}102}
103103
104fn mirDebugPrologueEnd(self: *Emit) !void {104fn mirDebugPrologueEnd(emit: *Emit) !void {
105 switch (self.debug_output) {105 switch (emit.debug_output) {
106 .dwarf => |dbg_out| {106 .dwarf => |dbg_out| {
107 try dbg_out.dbg_line.append(DW.LNS.set_prologue_end);107 try dbg_out.dbg_line.append(DW.LNS.set_prologue_end);
108 try self.dbgAdvancePCAndLine(self.prev_di_line, self.prev_di_column);108 try emit.dbgAdvancePCAndLine(emit.prev_di_line, emit.prev_di_column);
109 },109 },
110 .plan9 => {},110 .plan9 => {},
111 .none => {},111 .none => {},
112 }112 }
113}113}
114114
115fn mirDebugEpilogueBegin(self: *Emit) !void {115fn mirDebugEpilogueBegin(emit: *Emit) !void {
116 switch (self.debug_output) {116 switch (emit.debug_output) {
117 .dwarf => |dbg_out| {117 .dwarf => |dbg_out| {
118 try dbg_out.dbg_line.append(DW.LNS.set_epilogue_begin);118 try dbg_out.dbg_line.append(DW.LNS.set_epilogue_begin);
119 try self.dbgAdvancePCAndLine(self.prev_di_line, self.prev_di_column);119 try emit.dbgAdvancePCAndLine(emit.prev_di_line, emit.prev_di_column);
120 },120 },
121 .plan9 => {},121 .plan9 => {},
122 .none => {},122 .none => {},
...@@ -232,10 +232,10 @@ fn mirTrap(emit: *Emit, inst: Mir.Inst.Index) !void {...@@ -232,10 +232,10 @@ fn mirTrap(emit: *Emit, inst: Mir.Inst.Index) !void {
232232
233// Common helper functions233// Common helper functions
234234
235fn dbgAdvancePCAndLine(self: *Emit, line: u32, column: u32) !void {235fn dbgAdvancePCAndLine(emit: *Emit, line: u32, column: u32) !void {
236 const delta_line = @intCast(i32, line) - @intCast(i32, self.prev_di_line);236 const delta_line = @intCast(i32, line) - @intCast(i32, emit.prev_di_line);
237 const delta_pc: usize = self.code.items.len - self.prev_di_pc;237 const delta_pc: usize = emit.code.items.len - emit.prev_di_pc;
238 switch (self.debug_output) {238 switch (emit.debug_output) {
239 .dwarf => |dbg_out| {239 .dwarf => |dbg_out| {
240 // TODO Look into using the DWARF special opcodes to compress this data.240 // TODO Look into using the DWARF special opcodes to compress this data.
241 // It lets you emit single-byte opcodes that add different numbers to241 // It lets you emit single-byte opcodes that add different numbers to
...@@ -248,38 +248,12 @@ fn dbgAdvancePCAndLine(self: *Emit, line: u32, column: u32) !void {...@@ -248,38 +248,12 @@ fn dbgAdvancePCAndLine(self: *Emit, line: u32, column: u32) !void {
248 leb128.writeILEB128(dbg_out.dbg_line.writer(), delta_line) catch unreachable;248 leb128.writeILEB128(dbg_out.dbg_line.writer(), delta_line) catch unreachable;
249 }249 }
250 dbg_out.dbg_line.appendAssumeCapacity(DW.LNS.copy);250 dbg_out.dbg_line.appendAssumeCapacity(DW.LNS.copy);
251 self.prev_di_pc = self.code.items.len;251 emit.prev_di_pc = emit.code.items.len;
252 self.prev_di_line = line;252 emit.prev_di_line = line;
253 self.prev_di_column = column;253 emit.prev_di_column = column;
254 self.prev_di_pc = self.code.items.len;254 emit.prev_di_pc = emit.code.items.len;
255 },255 },
256 .plan9 => |dbg_out| {256 else => {},
257 if (delta_pc <= 0) return; // only do this when the pc changes
258 // we have already checked the target in the linker to make sure it is compatable
259 const quant = @import("../../link/Plan9/aout.zig").getPCQuant(self.target.cpu.arch) catch unreachable;
260
261 // increasing the line number
262 try @import("../../link/Plan9.zig").changeLine(dbg_out.dbg_line, delta_line);
263 // increasing the pc
264 const d_pc_p9 = @intCast(i64, delta_pc) - quant;
265 if (d_pc_p9 > 0) {
266 // minus one because if its the last one, we want to leave space to change the line which is one quanta
267 try dbg_out.dbg_line.append(@intCast(u8, @divExact(d_pc_p9, quant) + 128) - quant);
268 if (dbg_out.pcop_change_index.*) |pci|
269 dbg_out.dbg_line.items[pci] += 1;
270 dbg_out.pcop_change_index.* = @intCast(u32, dbg_out.dbg_line.items.len - 1);
271 } else if (d_pc_p9 == 0) {
272 // we don't need to do anything, because adding the quant does it for us
273 } else unreachable;
274 if (dbg_out.start_line.* == null)
275 dbg_out.start_line.* = self.prev_di_line;
276 dbg_out.end_line.* = line;
277 // only do this if the pc changed
278 self.prev_di_line = line;
279 self.prev_di_column = column;
280 self.prev_di_pc = self.code.items.len;
281 },
282 .none => {},
283 }257 }
284}258}
285259