| author | |
| committer | |
| log | 10cb578e4e16bac44055f277cd06baaf99b159b6 |
| tree | 108509bfba5587a5e930f48d9f5d6fa5483dda44 |
| parent | ce5a5c361b5b098c3b7d68f88136a9c91e7bec19 |
| parent | d748cfc2b778f87f97b86001634cff66120f21a5 |
| signature |
Dwarf: progress10 files changed, 508 insertions(+), 281 deletions(-)
ci/x86_64-linux-debug.sh+1-1| ... | ... | @@ -64,7 +64,7 @@ stage3-debug/bin/zig build \ |
| 64 | 64 | |
| 65 | 65 | stage3-debug/bin/zig build test docs \ |
| 66 | 66 | --maxrss 21000000000 \ |
| 67 | -Dlldb=$HOME/deps/lldb-zig/Debug-4a44163df/bin/lldb \ | |
| 67 | -Dlldb=$HOME/deps/lldb-zig/Debug-6ece8bda1/bin/lldb \ | |
| 68 | 68 | -fqemu \ |
| 69 | 69 | -fwasmtime \ |
| 70 | 70 | -Dstatic-llvm \ |
ci/x86_64-linux-release.sh+1-1| ... | ... | @@ -64,7 +64,7 @@ stage3-release/bin/zig build \ |
| 64 | 64 | |
| 65 | 65 | stage3-release/bin/zig build test docs \ |
| 66 | 66 | --maxrss 21000000000 \ |
| 67 | -Dlldb=$HOME/deps/lldb-zig/Release-4a44163df/bin/lldb \ | |
| 67 | -Dlldb=$HOME/deps/lldb-zig/Release-6ece8bda1/bin/lldb \ | |
| 68 | 68 | -fqemu \ |
| 69 | 69 | -fwasmtime \ |
| 70 | 70 | -Dstatic-llvm \ |
src/arch/x86_64/CodeGen.zig+83-7| ... | ... | @@ -36,6 +36,7 @@ const abi = @import("abi.zig"); |
| 36 | 36 | const bits = @import("bits.zig"); |
| 37 | 37 | const errUnionErrorOffset = codegen.errUnionErrorOffset; |
| 38 | 38 | const errUnionPayloadOffset = codegen.errUnionPayloadOffset; |
| 39 | const encoder = @import("encoder.zig"); | |
| 39 | 40 | |
| 40 | 41 | const Condition = bits.Condition; |
| 41 | 42 | const Immediate = bits.Immediate; |
| ... | ... | @@ -1188,6 +1189,74 @@ fn formatWipMir( |
| 1188 | 1189 | try writer.print(" | {}", .{lowered_inst}); |
| 1189 | 1190 | first = false; |
| 1190 | 1191 | } |
| 1192 | if (first) { | |
| 1193 | const ip = &data.self.pt.zcu.intern_pool; | |
| 1194 | const mir_inst = lower.mir.instructions.get(data.inst); | |
| 1195 | try writer.print(" | .{s}", .{@tagName(mir_inst.ops)}); | |
| 1196 | switch (mir_inst.ops) { | |
| 1197 | else => unreachable, | |
| 1198 | .pseudo_dbg_prologue_end_none, | |
| 1199 | .pseudo_dbg_line_line_column, | |
| 1200 | .pseudo_dbg_epilogue_begin_none, | |
| 1201 | .pseudo_dbg_enter_block_none, | |
| 1202 | .pseudo_dbg_leave_block_none, | |
| 1203 | .pseudo_dbg_var_args_none, | |
| 1204 | .pseudo_dead_none, | |
| 1205 | => {}, | |
| 1206 | .pseudo_dbg_enter_inline_func, .pseudo_dbg_leave_inline_func => try writer.print(" {}", .{ | |
| 1207 | ip.getNav(ip.indexToKey(mir_inst.data.func).func.owner_nav).name.fmt(ip), | |
| 1208 | }), | |
| 1209 | .pseudo_dbg_local_a => try writer.print(" {}", .{mir_inst.data.a.air_inst}), | |
| 1210 | .pseudo_dbg_local_ai_s => try writer.print(" {}, {d}", .{ | |
| 1211 | mir_inst.data.ai.air_inst, | |
| 1212 | @as(i32, @bitCast(mir_inst.data.ai.i)), | |
| 1213 | }), | |
| 1214 | .pseudo_dbg_local_ai_u => try writer.print(" {}, {d}", .{ | |
| 1215 | mir_inst.data.ai.air_inst, | |
| 1216 | mir_inst.data.ai.i, | |
| 1217 | }), | |
| 1218 | .pseudo_dbg_local_ai_64 => try writer.print(" {}, {d}", .{ | |
| 1219 | mir_inst.data.ai.air_inst, | |
| 1220 | lower.mir.extraData(Mir.Imm64, mir_inst.data.ai.i).data.decode(), | |
| 1221 | }), | |
| 1222 | .pseudo_dbg_local_as => { | |
| 1223 | const mem_op: Instruction.Operand = .{ .mem = .initSib(.qword, .{ | |
| 1224 | .base = .{ .reloc = mir_inst.data.as.sym_index }, | |
| 1225 | }) }; | |
| 1226 | try writer.print(" {}, {}", .{ mir_inst.data.as.air_inst, mem_op.fmt(.m) }); | |
| 1227 | }, | |
| 1228 | .pseudo_dbg_local_aso => { | |
| 1229 | const sym_off = lower.mir.extraData(bits.SymbolOffset, mir_inst.data.ax.payload).data; | |
| 1230 | const mem_op: Instruction.Operand = .{ .mem = .initSib(.qword, .{ | |
| 1231 | .base = .{ .reloc = sym_off.sym_index }, | |
| 1232 | .disp = sym_off.off, | |
| 1233 | }) }; | |
| 1234 | try writer.print(" {}, {}", .{ mir_inst.data.ax.air_inst, mem_op.fmt(.m) }); | |
| 1235 | }, | |
| 1236 | .pseudo_dbg_local_aro => { | |
| 1237 | const air_off = lower.mir.extraData(Mir.AirOffset, mir_inst.data.rx.payload).data; | |
| 1238 | const mem_op: Instruction.Operand = .{ .mem = .initSib(.qword, .{ | |
| 1239 | .base = .{ .reg = mir_inst.data.rx.r1 }, | |
| 1240 | .disp = air_off.off, | |
| 1241 | }) }; | |
| 1242 | try writer.print(" {}, {}", .{ air_off.air_inst, mem_op.fmt(.m) }); | |
| 1243 | }, | |
| 1244 | .pseudo_dbg_local_af => { | |
| 1245 | const frame_addr = lower.mir.extraData(bits.FrameAddr, mir_inst.data.ax.payload).data; | |
| 1246 | const mem_op: Instruction.Operand = .{ .mem = .initSib(.qword, .{ | |
| 1247 | .base = .{ .frame = frame_addr.index }, | |
| 1248 | .disp = frame_addr.off, | |
| 1249 | }) }; | |
| 1250 | try writer.print(" {}, {d}", .{ mir_inst.data.ax.air_inst, mem_op.fmt(.m) }); | |
| 1251 | }, | |
| 1252 | .pseudo_dbg_local_am => { | |
| 1253 | const mem_op: Instruction.Operand = .{ | |
| 1254 | .mem = lower.mir.extraData(Mir.Memory, mir_inst.data.ax.payload).data.decode(), | |
| 1255 | }; | |
| 1256 | try writer.print(" {}, {}", .{ mir_inst.data.ax.air_inst, mem_op.fmt(.m) }); | |
| 1257 | }, | |
| 1258 | } | |
| 1259 | } | |
| 1191 | 1260 | } |
| 1192 | 1261 | fn fmtWipMir(self: *Self, inst: Mir.Inst.Index) std.fmt.Formatter(formatWipMir) { |
| 1193 | 1262 | return .{ .data = .{ .self = self, .inst = inst } }; |
| ... | ... | @@ -2180,6 +2249,12 @@ fn checkInvariantsAfterAirInst(self: *Self, inst: Air.Inst.Index, old_air_bookke |
| 2180 | 2249 | } |
| 2181 | 2250 | } |
| 2182 | 2251 | |
| 2252 | fn genBodyBlock(self: *Self, body: []const Air.Inst.Index) InnerError!void { | |
| 2253 | try self.asmPseudo(.pseudo_dbg_enter_block_none); | |
| 2254 | try self.genBody(body); | |
| 2255 | try self.asmPseudo(.pseudo_dbg_leave_block_none); | |
| 2256 | } | |
| 2257 | ||
| 2183 | 2258 | fn genBody(self: *Self, body: []const Air.Inst.Index) InnerError!void { |
| 2184 | 2259 | const pt = self.pt; |
| 2185 | 2260 | const zcu = pt.zcu; |
| ... | ... | @@ -13184,7 +13259,7 @@ fn genTry( |
| 13184 | 13259 | const state = try self.saveState(); |
| 13185 | 13260 | |
| 13186 | 13261 | for (liveness_cond_br.else_deaths) |death| try self.processDeath(death); |
| 13187 | try self.genBody(body); | |
| 13262 | try self.genBodyBlock(body); | |
| 13188 | 13263 | try self.restoreState(state, &.{}, .{ |
| 13189 | 13264 | .emit_instructions = false, |
| 13190 | 13265 | .update_tracking = true, |
| ... | ... | @@ -13293,7 +13368,7 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void { |
| 13293 | 13368 | const reloc = try self.genCondBrMir(cond_ty, cond); |
| 13294 | 13369 | |
| 13295 | 13370 | for (liveness_cond_br.then_deaths) |death| try self.processDeath(death); |
| 13296 | try self.genBody(then_body); | |
| 13371 | try self.genBodyBlock(then_body); | |
| 13297 | 13372 | try self.restoreState(state, &.{}, .{ |
| 13298 | 13373 | .emit_instructions = false, |
| 13299 | 13374 | .update_tracking = true, |
| ... | ... | @@ -13304,7 +13379,7 @@ fn airCondBr(self: *Self, inst: Air.Inst.Index) !void { |
| 13304 | 13379 | self.performReloc(reloc); |
| 13305 | 13380 | |
| 13306 | 13381 | for (liveness_cond_br.else_deaths) |death| try self.processDeath(death); |
| 13307 | try self.genBody(else_body); | |
| 13382 | try self.genBodyBlock(else_body); | |
| 13308 | 13383 | try self.restoreState(state, &.{}, .{ |
| 13309 | 13384 | .emit_instructions = false, |
| 13310 | 13385 | .update_tracking = true, |
| ... | ... | @@ -13665,14 +13740,16 @@ fn airLoop(self: *Self, inst: Air.Inst.Index) !void { |
| 13665 | 13740 | }); |
| 13666 | 13741 | defer assert(self.loops.remove(inst)); |
| 13667 | 13742 | |
| 13668 | try self.genBody(body); | |
| 13743 | try self.genBodyBlock(body); | |
| 13669 | 13744 | self.finishAirBookkeeping(); |
| 13670 | 13745 | } |
| 13671 | 13746 | |
| 13672 | 13747 | fn airBlock(self: *Self, inst: Air.Inst.Index) !void { |
| 13673 | 13748 | const ty_pl = self.air.instructions.items(.data)[@intFromEnum(inst)].ty_pl; |
| 13674 | 13749 | const extra = self.air.extraData(Air.Block, ty_pl.payload); |
| 13750 | try self.asmPseudo(.pseudo_dbg_enter_block_none); | |
| 13675 | 13751 | try self.lowerBlock(inst, @ptrCast(self.air.extra[extra.end..][0..extra.data.body_len])); |
| 13752 | try self.asmPseudo(.pseudo_dbg_leave_block_none); | |
| 13676 | 13753 | } |
| 13677 | 13754 | |
| 13678 | 13755 | fn lowerBlock(self: *Self, inst: Air.Inst.Index, body: []const Air.Inst.Index) !void { |
| ... | ... | @@ -13684,7 +13761,6 @@ fn lowerBlock(self: *Self, inst: Air.Inst.Index, body: []const Air.Inst.Index) ! |
| 13684 | 13761 | try self.blocks.putNoClobber(self.gpa, inst, .{ .state = self.initRetroactiveState() }); |
| 13685 | 13762 | const liveness = self.liveness.getBlock(inst); |
| 13686 | 13763 | |
| 13687 | // TODO emit debug info lexical block | |
| 13688 | 13764 | try self.genBody(body); |
| 13689 | 13765 | |
| 13690 | 13766 | var block_data = self.blocks.fetchRemove(inst).?; |
| ... | ... | @@ -13796,7 +13872,7 @@ fn lowerSwitchBr(self: *Self, inst: Air.Inst.Index, switch_br: Air.UnwrappedSwit |
| 13796 | 13872 | |
| 13797 | 13873 | // Relocate all success cases to the body we're about to generate. |
| 13798 | 13874 | for (relocs) |reloc| self.performReloc(reloc); |
| 13799 | try self.genBody(case.body); | |
| 13875 | try self.genBodyBlock(case.body); | |
| 13800 | 13876 | try self.restoreState(state, &.{}, .{ |
| 13801 | 13877 | .emit_instructions = false, |
| 13802 | 13878 | .update_tracking = true, |
| ... | ... | @@ -13814,7 +13890,7 @@ fn lowerSwitchBr(self: *Self, inst: Air.Inst.Index, switch_br: Air.UnwrappedSwit |
| 13814 | 13890 | const else_deaths = liveness.deaths.len - 1; |
| 13815 | 13891 | for (liveness.deaths[else_deaths]) |operand| try self.processDeath(operand); |
| 13816 | 13892 | |
| 13817 | try self.genBody(else_body); | |
| 13893 | try self.genBodyBlock(else_body); | |
| 13818 | 13894 | try self.restoreState(state, &.{}, .{ |
| 13819 | 13895 | .emit_instructions = false, |
| 13820 | 13896 | .update_tracking = true, |
src/arch/x86_64/Emit.zig+24| ... | ... | @@ -287,6 +287,30 @@ pub fn emitMir(emit: *Emit) Error!void { |
| 287 | 287 | .none => {}, |
| 288 | 288 | } |
| 289 | 289 | }, |
| 290 | .pseudo_dbg_enter_block_none => { | |
| 291 | switch (emit.debug_output) { | |
| 292 | .dwarf => |dw| { | |
| 293 | log.debug("mirDbgEnterBlock (line={d}, col={d})", .{ | |
| 294 | emit.prev_di_line, emit.prev_di_column, | |
| 295 | }); | |
| 296 | try dw.enterBlock(emit.code.items.len); | |
| 297 | }, | |
| 298 | .plan9 => {}, | |
| 299 | .none => {}, | |
| 300 | } | |
| 301 | }, | |
| 302 | .pseudo_dbg_leave_block_none => { | |
| 303 | switch (emit.debug_output) { | |
| 304 | .dwarf => |dw| { | |
| 305 | log.debug("mirDbgLeaveBlock (line={d}, col={d})", .{ | |
| 306 | emit.prev_di_line, emit.prev_di_column, | |
| 307 | }); | |
| 308 | try dw.leaveBlock(emit.code.items.len); | |
| 309 | }, | |
| 310 | .plan9 => {}, | |
| 311 | .none => {}, | |
| 312 | } | |
| 313 | }, | |
| 290 | 314 | .pseudo_dbg_enter_inline_func => { |
| 291 | 315 | switch (emit.debug_output) { |
| 292 | 316 | .dwarf => |dw| { |
src/arch/x86_64/Lower.zig+2| ... | ... | @@ -312,6 +312,8 @@ pub fn lowerMir(lower: *Lower, index: Mir.Inst.Index) Error!struct { |
| 312 | 312 | .pseudo_dbg_prologue_end_none, |
| 313 | 313 | .pseudo_dbg_line_line_column, |
| 314 | 314 | .pseudo_dbg_epilogue_begin_none, |
| 315 | .pseudo_dbg_enter_block_none, | |
| 316 | .pseudo_dbg_leave_block_none, | |
| 315 | 317 | .pseudo_dbg_enter_inline_func, |
| 316 | 318 | .pseudo_dbg_leave_inline_func, |
| 317 | 319 | .pseudo_dbg_local_a, |
src/arch/x86_64/Mir.zig+4| ... | ... | @@ -935,6 +935,10 @@ pub const Inst = struct { |
| 935 | 935 | pseudo_dbg_line_line_column, |
| 936 | 936 | /// Start of epilogue |
| 937 | 937 | pseudo_dbg_epilogue_begin_none, |
| 938 | /// Start of lexical block | |
| 939 | pseudo_dbg_enter_block_none, | |
| 940 | /// End of lexical block | |
| 941 | pseudo_dbg_leave_block_none, | |
| 938 | 942 | /// Start of inline function |
| 939 | 943 | pseudo_dbg_enter_inline_func, |
| 940 | 944 | /// End of inline function |
src/arch/x86_64/encoder.zig+4-4| ... | ... | @@ -233,7 +233,7 @@ pub const Instruction = struct { |
| 233 | 233 | _ = unused_format_string; |
| 234 | 234 | _ = options; |
| 235 | 235 | _ = writer; |
| 236 | @compileError("do not format Operand directly; use fmtPrint() instead"); | |
| 236 | @compileError("do not format Operand directly; use fmt() instead"); | |
| 237 | 237 | } |
| 238 | 238 | |
| 239 | 239 | const FormatContext = struct { |
| ... | ... | @@ -241,7 +241,7 @@ pub const Instruction = struct { |
| 241 | 241 | enc_op: Encoding.Op, |
| 242 | 242 | }; |
| 243 | 243 | |
| 244 | fn fmt( | |
| 244 | fn fmtContext( | |
| 245 | 245 | ctx: FormatContext, |
| 246 | 246 | comptime unused_format_string: []const u8, |
| 247 | 247 | options: std.fmt.FormatOptions, |
| ... | ... | @@ -309,7 +309,7 @@ pub const Instruction = struct { |
| 309 | 309 | } |
| 310 | 310 | } |
| 311 | 311 | |
| 312 | pub fn fmtPrint(op: Operand, enc_op: Encoding.Op) std.fmt.Formatter(fmt) { | |
| 312 | pub fn fmt(op: Operand, enc_op: Encoding.Op) std.fmt.Formatter(fmtContext) { | |
| 313 | 313 | return .{ .data = .{ .op = op, .enc_op = enc_op } }; |
| 314 | 314 | } |
| 315 | 315 | }; |
| ... | ... | @@ -373,7 +373,7 @@ pub const Instruction = struct { |
| 373 | 373 | if (op == .none) break; |
| 374 | 374 | if (i > 0) try writer.writeByte(','); |
| 375 | 375 | try writer.writeByte(' '); |
| 376 | try writer.print("{}", .{op.fmtPrint(enc)}); | |
| 376 | try writer.print("{}", .{op.fmt(enc)}); | |
| 377 | 377 | } |
| 378 | 378 | } |
| 379 | 379 |
src/link/Dwarf.zig+95-64| ... | ... | @@ -1374,10 +1374,11 @@ pub const WipNav = struct { |
| 1374 | 1374 | any_children: bool, |
| 1375 | 1375 | func: InternPool.Index, |
| 1376 | 1376 | func_sym_index: u32, |
| 1377 | func_high_reloc: u32, | |
| 1378 | inlined_funcs: std.ArrayListUnmanaged(struct { | |
| 1377 | func_high_pc: u32, | |
| 1378 | blocks: std.ArrayListUnmanaged(struct { | |
| 1379 | 1379 | abbrev_code: u32, |
| 1380 | high_reloc: u32, | |
| 1380 | low_pc_off: u64, | |
| 1381 | high_pc: u32, | |
| 1381 | 1382 | }), |
| 1382 | 1383 | cfi: struct { |
| 1383 | 1384 | loc: u32, |
| ... | ... | @@ -1391,7 +1392,7 @@ pub const WipNav = struct { |
| 1391 | 1392 | |
| 1392 | 1393 | pub fn deinit(wip_nav: *WipNav) void { |
| 1393 | 1394 | const gpa = wip_nav.dwarf.gpa; |
| 1394 | if (wip_nav.func != .none) wip_nav.inlined_funcs.deinit(gpa); | |
| 1395 | if (wip_nav.func != .none) wip_nav.blocks.deinit(gpa); | |
| 1395 | 1396 | wip_nav.debug_frame.deinit(gpa); |
| 1396 | 1397 | wip_nav.debug_info.deinit(gpa); |
| 1397 | 1398 | wip_nav.debug_line.deinit(gpa); |
| ... | ... | @@ -1486,49 +1487,72 @@ pub const WipNav = struct { |
| 1486 | 1487 | try dlw.writeByte(DW.LNS.set_epilogue_begin); |
| 1487 | 1488 | } |
| 1488 | 1489 | |
| 1489 | pub fn enterInlineFunc(wip_nav: *WipNav, func: InternPool.Index, code_off: u64, line: u32, column: u32) UpdateError!void { | |
| 1490 | pub fn enterBlock(wip_nav: *WipNav, code_off: u64) UpdateError!void { | |
| 1491 | const dwarf = wip_nav.dwarf; | |
| 1492 | const diw = wip_nav.debug_info.writer(dwarf.gpa); | |
| 1493 | const block = try wip_nav.blocks.addOne(dwarf.gpa); | |
| 1494 | ||
| 1495 | block.abbrev_code = @intCast(wip_nav.debug_info.items.len); | |
| 1496 | try wip_nav.abbrevCode(.block); | |
| 1497 | block.low_pc_off = code_off; | |
| 1498 | try wip_nav.infoAddrSym(wip_nav.func_sym_index, code_off); | |
| 1499 | block.high_pc = @intCast(wip_nav.debug_info.items.len); | |
| 1500 | try diw.writeInt(u32, 0, dwarf.endian); | |
| 1501 | wip_nav.any_children = false; | |
| 1502 | } | |
| 1503 | ||
| 1504 | pub fn leaveBlock(wip_nav: *WipNav, code_off: u64) UpdateError!void { | |
| 1505 | const block_bytes = comptime uleb128Bytes(@intFromEnum(AbbrevCode.block)); | |
| 1506 | const block = wip_nav.blocks.pop(); | |
| 1507 | if (wip_nav.any_children) | |
| 1508 | try uleb128(wip_nav.debug_info.writer(wip_nav.dwarf.gpa), @intFromEnum(AbbrevCode.null)) | |
| 1509 | else | |
| 1510 | std.leb.writeUnsignedFixed( | |
| 1511 | block_bytes, | |
| 1512 | wip_nav.debug_info.items[block.abbrev_code..][0..block_bytes], | |
| 1513 | try wip_nav.dwarf.refAbbrevCode(.empty_block), | |
| 1514 | ); | |
| 1515 | std.mem.writeInt(u32, wip_nav.debug_info.items[block.high_pc..][0..4], @intCast(code_off - block.low_pc_off), wip_nav.dwarf.endian); | |
| 1516 | wip_nav.any_children = true; | |
| 1517 | } | |
| 1518 | ||
| 1519 | pub fn enterInlineFunc( | |
| 1520 | wip_nav: *WipNav, | |
| 1521 | func: InternPool.Index, | |
| 1522 | code_off: u64, | |
| 1523 | line: u32, | |
| 1524 | column: u32, | |
| 1525 | ) UpdateError!void { | |
| 1490 | 1526 | const dwarf = wip_nav.dwarf; |
| 1491 | 1527 | const zcu = wip_nav.pt.zcu; |
| 1492 | 1528 | const diw = wip_nav.debug_info.writer(dwarf.gpa); |
| 1493 | const inlined_func = try wip_nav.inlined_funcs.addOne(dwarf.gpa); | |
| 1529 | const block = try wip_nav.blocks.addOne(dwarf.gpa); | |
| 1494 | 1530 | |
| 1495 | inlined_func.abbrev_code = @intCast(wip_nav.debug_info.items.len); | |
| 1531 | block.abbrev_code = @intCast(wip_nav.debug_info.items.len); | |
| 1496 | 1532 | try wip_nav.abbrevCode(.inlined_func); |
| 1497 | 1533 | try wip_nav.refNav(zcu.funcInfo(func).owner_nav); |
| 1498 | 1534 | try uleb128(diw, zcu.navSrcLine(zcu.funcInfo(wip_nav.func).owner_nav) + line + 1); |
| 1499 | 1535 | try uleb128(diw, column + 1); |
| 1500 | const external_relocs = &dwarf.debug_info.section.getUnit(wip_nav.unit).getEntry(wip_nav.entry).external_relocs; | |
| 1501 | try external_relocs.ensureUnusedCapacity(dwarf.gpa, 2); | |
| 1502 | external_relocs.appendAssumeCapacity(.{ | |
| 1503 | .source_off = @intCast(wip_nav.debug_info.items.len), | |
| 1504 | .target_sym = wip_nav.func_sym_index, | |
| 1505 | .target_off = code_off, | |
| 1506 | }); | |
| 1507 | try diw.writeByteNTimes(0, @intFromEnum(dwarf.address_size)); | |
| 1508 | inlined_func.high_reloc = @intCast(external_relocs.items.len); | |
| 1509 | external_relocs.appendAssumeCapacity(.{ | |
| 1510 | .source_off = @intCast(wip_nav.debug_info.items.len), | |
| 1511 | .target_sym = wip_nav.func_sym_index, | |
| 1512 | .target_off = undefined, | |
| 1513 | }); | |
| 1514 | try diw.writeByteNTimes(0, @intFromEnum(dwarf.address_size)); | |
| 1536 | block.low_pc_off = code_off; | |
| 1537 | try wip_nav.infoAddrSym(wip_nav.func_sym_index, code_off); | |
| 1538 | block.high_pc = @intCast(wip_nav.debug_info.items.len); | |
| 1539 | try diw.writeInt(u32, 0, dwarf.endian); | |
| 1515 | 1540 | try wip_nav.setInlineFunc(func); |
| 1516 | 1541 | wip_nav.any_children = false; |
| 1517 | 1542 | } |
| 1518 | 1543 | |
| 1519 | 1544 | pub fn leaveInlineFunc(wip_nav: *WipNav, func: InternPool.Index, code_off: u64) UpdateError!void { |
| 1520 | 1545 | const inlined_func_bytes = comptime uleb128Bytes(@intFromEnum(AbbrevCode.inlined_func)); |
| 1521 | const inlined_func = wip_nav.inlined_funcs.pop(); | |
| 1522 | const external_relocs = &wip_nav.dwarf.debug_info.section.getUnit(wip_nav.unit).getEntry(wip_nav.entry).external_relocs; | |
| 1523 | external_relocs.items[inlined_func.high_reloc].target_off = code_off; | |
| 1546 | const block = wip_nav.blocks.pop(); | |
| 1524 | 1547 | if (wip_nav.any_children) |
| 1525 | 1548 | try uleb128(wip_nav.debug_info.writer(wip_nav.dwarf.gpa), @intFromEnum(AbbrevCode.null)) |
| 1526 | 1549 | else |
| 1527 | 1550 | std.leb.writeUnsignedFixed( |
| 1528 | 1551 | inlined_func_bytes, |
| 1529 | wip_nav.debug_info.items[inlined_func.abbrev_code..][0..inlined_func_bytes], | |
| 1552 | wip_nav.debug_info.items[block.abbrev_code..][0..inlined_func_bytes], | |
| 1530 | 1553 | try wip_nav.dwarf.refAbbrevCode(.empty_inlined_func), |
| 1531 | 1554 | ); |
| 1555 | std.mem.writeInt(u32, wip_nav.debug_info.items[block.high_pc..][0..4], @intCast(code_off - block.low_pc_off), wip_nav.dwarf.endian); | |
| 1532 | 1556 | try wip_nav.setInlineFunc(func); |
| 1533 | 1557 | wip_nav.any_children = true; |
| 1534 | 1558 | } |
| ... | ... | @@ -1664,17 +1688,18 @@ pub const WipNav = struct { |
| 1664 | 1688 | return ctx.wip_nav.dwarf.endian; |
| 1665 | 1689 | } |
| 1666 | 1690 | fn addrSym(ctx: @This(), sym_index: u32) UpdateError!void { |
| 1667 | try ctx.wip_nav.infoAddrSym(sym_index); | |
| 1691 | try ctx.wip_nav.infoAddrSym(sym_index, 0); | |
| 1668 | 1692 | } |
| 1669 | 1693 | } = .{ .wip_nav = wip_nav }; |
| 1670 | 1694 | try uleb128(adapter.writer(), counter.stream.bytes_written); |
| 1671 | 1695 | try loc.write(adapter); |
| 1672 | 1696 | } |
| 1673 | 1697 | |
| 1674 | fn infoAddrSym(wip_nav: *WipNav, sym_index: u32) UpdateError!void { | |
| 1698 | fn infoAddrSym(wip_nav: *WipNav, sym_index: u32, sym_off: u64) UpdateError!void { | |
| 1675 | 1699 | try wip_nav.infoExternalReloc(.{ |
| 1676 | 1700 | .source_off = @intCast(wip_nav.debug_info.items.len), |
| 1677 | 1701 | .target_sym = sym_index, |
| 1702 | .target_off = sym_off, | |
| 1678 | 1703 | }); |
| 1679 | 1704 | try wip_nav.debug_info.appendNTimes(wip_nav.dwarf.gpa, 0, @intFromEnum(wip_nav.dwarf.address_size)); |
| 1680 | 1705 | } |
| ... | ... | @@ -1695,17 +1720,18 @@ pub const WipNav = struct { |
| 1695 | 1720 | return ctx.wip_nav.dwarf.endian; |
| 1696 | 1721 | } |
| 1697 | 1722 | fn addrSym(ctx: @This(), sym_index: u32) UpdateError!void { |
| 1698 | try ctx.wip_nav.frameAddrSym(sym_index); | |
| 1723 | try ctx.wip_nav.frameAddrSym(sym_index, 0); | |
| 1699 | 1724 | } |
| 1700 | 1725 | } = .{ .wip_nav = wip_nav }; |
| 1701 | 1726 | try uleb128(adapter.writer(), counter.stream.bytes_written); |
| 1702 | 1727 | try loc.write(adapter); |
| 1703 | 1728 | } |
| 1704 | 1729 | |
| 1705 | fn frameAddrSym(wip_nav: *WipNav, sym_index: u32) UpdateError!void { | |
| 1730 | fn frameAddrSym(wip_nav: *WipNav, sym_index: u32, sym_off: u64) UpdateError!void { | |
| 1706 | 1731 | try wip_nav.frameExternalReloc(.{ |
| 1707 | 1732 | .source_off = @intCast(wip_nav.debug_frame.items.len), |
| 1708 | 1733 | .target_sym = sym_index, |
| 1734 | .target_off = sym_off, | |
| 1709 | 1735 | }); |
| 1710 | 1736 | try wip_nav.debug_frame.appendNTimes(wip_nav.dwarf.gpa, 0, @intFromEnum(wip_nav.dwarf.address_size)); |
| 1711 | 1737 | } |
| ... | ... | @@ -2150,8 +2176,8 @@ pub fn initWipNav(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPool.Nav.In |
| 2150 | 2176 | .any_children = false, |
| 2151 | 2177 | .func = .none, |
| 2152 | 2178 | .func_sym_index = undefined, |
| 2153 | .func_high_reloc = undefined, | |
| 2154 | .inlined_funcs = undefined, | |
| 2179 | .func_high_pc = undefined, | |
| 2180 | .blocks = undefined, | |
| 2155 | 2181 | .cfi = undefined, |
| 2156 | 2182 | .debug_frame = .{}, |
| 2157 | 2183 | .debug_info = .{}, |
| ... | ... | @@ -2294,7 +2320,7 @@ pub fn initWipNav(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPool.Nav.In |
| 2294 | 2320 | const func_type = ip.indexToKey(func.ty).func_type; |
| 2295 | 2321 | wip_nav.func = nav_val.toIntern(); |
| 2296 | 2322 | wip_nav.func_sym_index = sym_index; |
| 2297 | wip_nav.inlined_funcs = .{}; | |
| 2323 | wip_nav.blocks = .{}; | |
| 2298 | 2324 | if (dwarf.debug_frame.header.format != .none) wip_nav.cfi = .{ |
| 2299 | 2325 | .loc = 0, |
| 2300 | 2326 | .cfa = dwarf.debug_frame.header.initial_instructions[0].def_cfa, |
| ... | ... | @@ -2319,7 +2345,7 @@ pub fn initWipNav(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPool.Nav.In |
| 2319 | 2345 | .source_off = @intCast(wip_nav.debug_frame.items.len), |
| 2320 | 2346 | }); |
| 2321 | 2347 | try dfw.writeByteNTimes(0, dwarf.sectionOffsetBytes()); |
| 2322 | try wip_nav.frameAddrSym(sym_index); | |
| 2348 | try wip_nav.frameAddrSym(sym_index, 0); | |
| 2323 | 2349 | try dfw.writeByteNTimes(undefined, @intFromEnum(dwarf.address_size)); |
| 2324 | 2350 | }, |
| 2325 | 2351 | .eh_frame => { |
| ... | ... | @@ -2346,20 +2372,9 @@ pub fn initWipNav(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPool.Nav.In |
| 2346 | 2372 | try wip_nav.strp(nav.name.toSlice(ip)); |
| 2347 | 2373 | try wip_nav.strp(nav.fqn.toSlice(ip)); |
| 2348 | 2374 | try wip_nav.refType(Type.fromInterned(func_type.return_type)); |
| 2349 | const external_relocs = &dwarf.debug_info.section.getUnit(wip_nav.unit).getEntry(wip_nav.entry).external_relocs; | |
| 2350 | try external_relocs.ensureUnusedCapacity(dwarf.gpa, 2); | |
| 2351 | external_relocs.appendAssumeCapacity(.{ | |
| 2352 | .source_off = @intCast(wip_nav.debug_info.items.len), | |
| 2353 | .target_sym = sym_index, | |
| 2354 | }); | |
| 2355 | try diw.writeByteNTimes(0, @intFromEnum(dwarf.address_size)); | |
| 2356 | wip_nav.func_high_reloc = @intCast(external_relocs.items.len); | |
| 2357 | external_relocs.appendAssumeCapacity(.{ | |
| 2358 | .source_off = @intCast(wip_nav.debug_info.items.len), | |
| 2359 | .target_sym = sym_index, | |
| 2360 | .target_off = undefined, | |
| 2361 | }); | |
| 2362 | try diw.writeByteNTimes(0, @intFromEnum(dwarf.address_size)); | |
| 2375 | try wip_nav.infoAddrSym(sym_index, 0); | |
| 2376 | wip_nav.func_high_pc = @intCast(wip_nav.debug_info.items.len); | |
| 2377 | try diw.writeInt(u32, 0, dwarf.endian); | |
| 2363 | 2378 | try uleb128(diw, nav.status.resolved.alignment.toByteUnits() orelse |
| 2364 | 2379 | target_info.defaultFunctionAlignment(file.mod.resolved_target.result).toByteUnits().?); |
| 2365 | 2380 | try diw.writeByte(@intFromBool(false)); |
| ... | ... | @@ -2466,8 +2481,7 @@ pub fn finishWipNav( |
| 2466 | 2481 | }, |
| 2467 | 2482 | } |
| 2468 | 2483 | { |
| 2469 | const external_relocs = &dwarf.debug_info.section.getUnit(wip_nav.unit).getEntry(wip_nav.entry).external_relocs; | |
| 2470 | external_relocs.items[wip_nav.func_high_reloc].target_off = sym.size; | |
| 2484 | std.mem.writeInt(u32, wip_nav.debug_info.items[wip_nav.func_high_pc..][0..4], @intCast(sym.size), dwarf.endian); | |
| 2471 | 2485 | if (wip_nav.any_children) { |
| 2472 | 2486 | const diw = wip_nav.debug_info.writer(dwarf.gpa); |
| 2473 | 2487 | try uleb128(diw, @intFromEnum(AbbrevCode.null)); |
| ... | ... | @@ -2562,8 +2576,8 @@ pub fn updateComptimeNav(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPool |
| 2562 | 2576 | .any_children = false, |
| 2563 | 2577 | .func = .none, |
| 2564 | 2578 | .func_sym_index = undefined, |
| 2565 | .func_high_reloc = undefined, | |
| 2566 | .inlined_funcs = undefined, | |
| 2579 | .func_high_pc = undefined, | |
| 2580 | .blocks = undefined, | |
| 2567 | 2581 | .cfi = undefined, |
| 2568 | 2582 | .debug_frame = .{}, |
| 2569 | 2583 | .debug_info = .{}, |
| ... | ... | @@ -3036,8 +3050,8 @@ fn updateType( |
| 3036 | 3050 | .any_children = false, |
| 3037 | 3051 | .func = .none, |
| 3038 | 3052 | .func_sym_index = undefined, |
| 3039 | .func_high_reloc = undefined, | |
| 3040 | .inlined_funcs = undefined, | |
| 3053 | .func_high_pc = undefined, | |
| 3054 | .blocks = undefined, | |
| 3041 | 3055 | .cfi = undefined, |
| 3042 | 3056 | .debug_frame = .{}, |
| 3043 | 3057 | .debug_info = .{}, |
| ... | ... | @@ -3480,8 +3494,8 @@ pub fn updateContainerType(dwarf: *Dwarf, pt: Zcu.PerThread, type_index: InternP |
| 3480 | 3494 | .any_children = false, |
| 3481 | 3495 | .func = .none, |
| 3482 | 3496 | .func_sym_index = undefined, |
| 3483 | .func_high_reloc = undefined, | |
| 3484 | .inlined_funcs = undefined, | |
| 3497 | .func_high_pc = undefined, | |
| 3498 | .blocks = undefined, | |
| 3485 | 3499 | .cfi = undefined, |
| 3486 | 3500 | .debug_frame = .{}, |
| 3487 | 3501 | .debug_info = .{}, |
| ... | ... | @@ -3553,8 +3567,8 @@ pub fn updateContainerType(dwarf: *Dwarf, pt: Zcu.PerThread, type_index: InternP |
| 3553 | 3567 | .any_children = false, |
| 3554 | 3568 | .func = .none, |
| 3555 | 3569 | .func_sym_index = undefined, |
| 3556 | .func_high_reloc = undefined, | |
| 3557 | .inlined_funcs = undefined, | |
| 3570 | .func_high_pc = undefined, | |
| 3571 | .blocks = undefined, | |
| 3558 | 3572 | .cfi = undefined, |
| 3559 | 3573 | .debug_frame = .{}, |
| 3560 | 3574 | .debug_info = .{}, |
| ... | ... | @@ -3756,8 +3770,8 @@ pub fn flushModule(dwarf: *Dwarf, pt: Zcu.PerThread) FlushError!void { |
| 3756 | 3770 | .any_children = false, |
| 3757 | 3771 | .func = .none, |
| 3758 | 3772 | .func_sym_index = undefined, |
| 3759 | .func_high_reloc = undefined, | |
| 3760 | .inlined_funcs = undefined, | |
| 3773 | .func_high_pc = undefined, | |
| 3774 | .blocks = undefined, | |
| 3761 | 3775 | .cfi = undefined, |
| 3762 | 3776 | .debug_frame = .{}, |
| 3763 | 3777 | .debug_info = .{}, |
| ... | ... | @@ -4212,6 +4226,8 @@ const AbbrevCode = enum { |
| 4212 | 4226 | empty_packed_struct_type, |
| 4213 | 4227 | union_type, |
| 4214 | 4228 | empty_union_type, |
| 4229 | empty_block, | |
| 4230 | block, | |
| 4215 | 4231 | empty_inlined_func, |
| 4216 | 4232 | inlined_func, |
| 4217 | 4233 | local_arg, |
| ... | ... | @@ -4319,7 +4335,7 @@ const AbbrevCode = enum { |
| 4319 | 4335 | .{ .linkage_name, .strp }, |
| 4320 | 4336 | .{ .type, .ref_addr }, |
| 4321 | 4337 | .{ .low_pc, .addr }, |
| 4322 | .{ .high_pc, .addr }, | |
| 4338 | .{ .high_pc, .data4 }, | |
| 4323 | 4339 | .{ .alignment, .udata }, |
| 4324 | 4340 | .{ .external, .flag }, |
| 4325 | 4341 | .{ .noreturn, .flag }, |
| ... | ... | @@ -4331,7 +4347,7 @@ const AbbrevCode = enum { |
| 4331 | 4347 | .{ .linkage_name, .strp }, |
| 4332 | 4348 | .{ .type, .ref_addr }, |
| 4333 | 4349 | .{ .low_pc, .addr }, |
| 4334 | .{ .high_pc, .addr }, | |
| 4350 | .{ .high_pc, .data4 }, | |
| 4335 | 4351 | .{ .alignment, .udata }, |
| 4336 | 4352 | .{ .external, .flag }, |
| 4337 | 4353 | .{ .noreturn, .flag }, |
| ... | ... | @@ -4672,6 +4688,21 @@ const AbbrevCode = enum { |
| 4672 | 4688 | .{ .alignment, .udata }, |
| 4673 | 4689 | }, |
| 4674 | 4690 | }, |
| 4691 | .empty_block = .{ | |
| 4692 | .tag = .lexical_block, | |
| 4693 | .attrs = &.{ | |
| 4694 | .{ .low_pc, .addr }, | |
| 4695 | .{ .high_pc, .data4 }, | |
| 4696 | }, | |
| 4697 | }, | |
| 4698 | .block = .{ | |
| 4699 | .tag = .lexical_block, | |
| 4700 | .children = true, | |
| 4701 | .attrs = &.{ | |
| 4702 | .{ .low_pc, .addr }, | |
| 4703 | .{ .high_pc, .data4 }, | |
| 4704 | }, | |
| 4705 | }, | |
| 4675 | 4706 | .empty_inlined_func = .{ |
| 4676 | 4707 | .tag = .inlined_subroutine, |
| 4677 | 4708 | .attrs = &.{ |
| ... | ... | @@ -4679,7 +4710,7 @@ const AbbrevCode = enum { |
| 4679 | 4710 | .{ .call_line, .udata }, |
| 4680 | 4711 | .{ .call_column, .udata }, |
| 4681 | 4712 | .{ .low_pc, .addr }, |
| 4682 | .{ .high_pc, .addr }, | |
| 4713 | .{ .high_pc, .data4 }, | |
| 4683 | 4714 | }, |
| 4684 | 4715 | }, |
| 4685 | 4716 | .inlined_func = .{ |
| ... | ... | @@ -4690,7 +4721,7 @@ const AbbrevCode = enum { |
| 4690 | 4721 | .{ .call_line, .udata }, |
| 4691 | 4722 | .{ .call_column, .udata }, |
| 4692 | 4723 | .{ .low_pc, .addr }, |
| 4693 | .{ .high_pc, .addr }, | |
| 4724 | .{ .high_pc, .data4 }, | |
| 4694 | 4725 | }, |
| 4695 | 4726 | }, |
| 4696 | 4727 | .local_arg = .{ |
test/src/Debugger.zig+286-199| ... | ... | @@ -113,70 +113,70 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void { |
| 113 | 113 | &.{ |
| 114 | 114 | \\(lldb) frame variable --show-types -- basic |
| 115 | 115 | \\(root.basic.Basic) basic = { |
| 116 | \\ (void) void = {} | |
| 117 | \\ (bool) bool_false = false | |
| 118 | \\ (bool) bool_true = true | |
| 119 | \\ (u0) u0_0 = 0 | |
| 120 | \\ (u1) u1_0 = 0 | |
| 121 | \\ (u1) u1_1 = 1 | |
| 122 | \\ (u2) u2_0 = 0 | |
| 123 | \\ (u2) u2_3 = 3 | |
| 124 | \\ (u3) u3_0 = 0 | |
| 125 | \\ (u3) u3_7 = 7 | |
| 126 | \\ (u4) u4_0 = 0 | |
| 127 | \\ (u4) u4_15 = 15 | |
| 128 | \\ (u5) u5_0 = 0 | |
| 129 | \\ (u5) u5_31 = 31 | |
| 130 | \\ (u6) u6_0 = 0 | |
| 131 | \\ (u6) u6_63 = 63 | |
| 132 | \\ (u7) u7_0 = 0 | |
| 133 | \\ (u7) u7_127 = 127 | |
| 134 | \\ (u8) u8_0 = 0 | |
| 135 | \\ (u8) u8_255 = 255 | |
| 136 | \\ (u16) u16_0 = 0 | |
| 137 | \\ (u16) u16_65535 = 65535 | |
| 138 | \\ (u24) u24_0 = 0 | |
| 139 | \\ (u24) u24_16777215 = 16777215 | |
| 140 | \\ (u32) u32_0 = 0 | |
| 141 | \\ (u32) u32_4294967295 = 4294967295 | |
| 142 | \\ (i0) i0_0 = 0 | |
| 143 | \\ (i1) i1_-1 = -1 | |
| 144 | \\ (i1) i1_0 = 0 | |
| 145 | \\ (i2) i2_-2 = -2 | |
| 146 | \\ (i2) i2_0 = 0 | |
| 147 | \\ (i2) i2_1 = 1 | |
| 148 | \\ (i3) i3_-4 = -4 | |
| 149 | \\ (i3) i3_0 = 0 | |
| 150 | \\ (i3) i3_3 = 3 | |
| 151 | \\ (i4) i4_-8 = -8 | |
| 152 | \\ (i4) i4_0 = 0 | |
| 153 | \\ (i4) i4_7 = 7 | |
| 154 | \\ (i5) i5_-16 = -16 | |
| 155 | \\ (i5) i5_0 = 0 | |
| 156 | \\ (i5) i5_15 = 15 | |
| 157 | \\ (i6) i6_-32 = -32 | |
| 158 | \\ (i6) i6_0 = 0 | |
| 159 | \\ (i6) i6_31 = 31 | |
| 160 | \\ (i7) i7_-64 = -64 | |
| 161 | \\ (i7) i7_0 = 0 | |
| 162 | \\ (i7) i7_63 = 63 | |
| 163 | \\ (i8) i8_-128 = -128 | |
| 164 | \\ (i8) i8_0 = 0 | |
| 165 | \\ (i8) i8_127 = 127 | |
| 166 | \\ (i16) i16_-32768 = -32768 | |
| 167 | \\ (i16) i16_0 = 0 | |
| 168 | \\ (i16) i16_32767 = 32767 | |
| 169 | \\ (i24) i24_-8388608 = -8388608 | |
| 170 | \\ (i24) i24_0 = 0 | |
| 171 | \\ (i24) i24_8388607 = 8388607 | |
| 172 | \\ (i32) i32_-2147483648 = -2147483648 | |
| 173 | \\ (i32) i32_0 = 0 | |
| 174 | \\ (i32) i32_2147483647 = 2147483647 | |
| 175 | \\ (f16) f16_42.625 = 42.625 | |
| 176 | \\ (f32) f32_-2730.65625 = -2730.65625 | |
| 177 | \\ (f64) f64_357913941.33203125 = 357913941.33203125 | |
| 178 | \\ (f80) f80_-91625968981.3330078125 = -91625968981.3330078125 | |
| 179 | \\ (f128) f128_384307168202282325.333332061767578125 = 384307168202282325.333332061767578125 | |
| 116 | \\ (void) .void = {} | |
| 117 | \\ (bool) .bool_false = false | |
| 118 | \\ (bool) .bool_true = true | |
| 119 | \\ (u0) .u0_0 = 0 | |
| 120 | \\ (u1) .u1_0 = 0 | |
| 121 | \\ (u1) .u1_1 = 1 | |
| 122 | \\ (u2) .u2_0 = 0 | |
| 123 | \\ (u2) .u2_3 = 3 | |
| 124 | \\ (u3) .u3_0 = 0 | |
| 125 | \\ (u3) .u3_7 = 7 | |
| 126 | \\ (u4) .u4_0 = 0 | |
| 127 | \\ (u4) .u4_15 = 15 | |
| 128 | \\ (u5) .u5_0 = 0 | |
| 129 | \\ (u5) .u5_31 = 31 | |
| 130 | \\ (u6) .u6_0 = 0 | |
| 131 | \\ (u6) .u6_63 = 63 | |
| 132 | \\ (u7) .u7_0 = 0 | |
| 133 | \\ (u7) .u7_127 = 127 | |
| 134 | \\ (u8) .u8_0 = 0 | |
| 135 | \\ (u8) .u8_255 = 255 | |
| 136 | \\ (u16) .u16_0 = 0 | |
| 137 | \\ (u16) .u16_65535 = 65535 | |
| 138 | \\ (u24) .u24_0 = 0 | |
| 139 | \\ (u24) .u24_16777215 = 16777215 | |
| 140 | \\ (u32) .u32_0 = 0 | |
| 141 | \\ (u32) .u32_4294967295 = 4294967295 | |
| 142 | \\ (i0) .i0_0 = 0 | |
| 143 | \\ (i1) .@"i1_-1" = -1 | |
| 144 | \\ (i1) .i1_0 = 0 | |
| 145 | \\ (i2) .@"i2_-2" = -2 | |
| 146 | \\ (i2) .i2_0 = 0 | |
| 147 | \\ (i2) .i2_1 = 1 | |
| 148 | \\ (i3) .@"i3_-4" = -4 | |
| 149 | \\ (i3) .i3_0 = 0 | |
| 150 | \\ (i3) .i3_3 = 3 | |
| 151 | \\ (i4) .@"i4_-8" = -8 | |
| 152 | \\ (i4) .i4_0 = 0 | |
| 153 | \\ (i4) .i4_7 = 7 | |
| 154 | \\ (i5) .@"i5_-16" = -16 | |
| 155 | \\ (i5) .i5_0 = 0 | |
| 156 | \\ (i5) .i5_15 = 15 | |
| 157 | \\ (i6) .@"i6_-32" = -32 | |
| 158 | \\ (i6) .i6_0 = 0 | |
| 159 | \\ (i6) .i6_31 = 31 | |
| 160 | \\ (i7) .@"i7_-64" = -64 | |
| 161 | \\ (i7) .i7_0 = 0 | |
| 162 | \\ (i7) .i7_63 = 63 | |
| 163 | \\ (i8) .@"i8_-128" = -128 | |
| 164 | \\ (i8) .i8_0 = 0 | |
| 165 | \\ (i8) .i8_127 = 127 | |
| 166 | \\ (i16) .@"i16_-32768" = -32768 | |
| 167 | \\ (i16) .i16_0 = 0 | |
| 168 | \\ (i16) .i16_32767 = 32767 | |
| 169 | \\ (i24) .@"i24_-8388608" = -8388608 | |
| 170 | \\ (i24) .i24_0 = 0 | |
| 171 | \\ (i24) .i24_8388607 = 8388607 | |
| 172 | \\ (i32) .@"i32_-2147483648" = -2147483648 | |
| 173 | \\ (i32) .i32_0 = 0 | |
| 174 | \\ (i32) .i32_2147483647 = 2147483647 | |
| 175 | \\ (f16) .@"f16_42.625" = 42.625 | |
| 176 | \\ (f32) .@"f32_-2730.65625" = -2730.65625 | |
| 177 | \\ (f64) .@"f64_357913941.33203125" = 357913941.33203125 | |
| 178 | \\ (f80) .@"f80_-91625968981.3330078125" = -91625968981.3330078125 | |
| 179 | \\ (f128) .@"f128_384307168202282325.333332061767578125" = 384307168202282325.333332061767578125 | |
| 180 | 180 | \\} |
| 181 | 181 | \\(lldb) breakpoint delete --force 1 |
| 182 | 182 | \\1 breakpoints deleted; 0 breakpoint locations disabled. |
| ... | ... | @@ -249,57 +249,57 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void { |
| 249 | 249 | &.{ |
| 250 | 250 | \\(lldb) frame variable --show-types -- pointers |
| 251 | 251 | \\(root.pointers.Pointers) pointers = { |
| 252 | \\ (*u32) single = 0x0000000000001010 | |
| 253 | \\ (*const u32) single_const = 0x0000000000001014 | |
| 254 | \\ (*volatile u32) single_volatile = 0x0000000000001018 | |
| 255 | \\ (*const volatile u32) single_const_volatile = 0x000000000000101c | |
| 256 | \\ (*allowzero u32) single_allowzero = 0x0000000000001020 | |
| 257 | \\ (*allowzero const u32) single_allowzero_const = 0x0000000000001024 | |
| 258 | \\ (*allowzero volatile u32) single_allowzero_volatile = 0x0000000000001028 | |
| 259 | \\ (*allowzero const volatile u32) single_allowzero_const_volatile = 0x000000000000102c | |
| 260 | \\ ([*]u32) many = 0x0000000000002010 | |
| 261 | \\ ([*]const u32) many_const = 0x0000000000002014 | |
| 262 | \\ ([*]volatile u32) many_volatile = 0x0000000000002018 | |
| 263 | \\ ([*]const volatile u32) many_const_volatile = 0x000000000000201c | |
| 264 | \\ ([*]allowzero u32) many_allowzero = 0x0000000000002020 | |
| 265 | \\ ([*]allowzero const u32) many_allowzero_const = 0x0000000000002024 | |
| 266 | \\ ([*]allowzero volatile u32) many_allowzero_volatile = 0x0000000000002028 | |
| 267 | \\ ([*]allowzero const volatile u32) many_allowzero_const_volatile = 0x000000000000202c | |
| 268 | \\ ([]u32) slice = len=1 { | |
| 252 | \\ (*u32) .single = 0x0000000000001010 | |
| 253 | \\ (*const u32) .single_const = 0x0000000000001014 | |
| 254 | \\ (*volatile u32) .single_volatile = 0x0000000000001018 | |
| 255 | \\ (*const volatile u32) .single_const_volatile = 0x000000000000101c | |
| 256 | \\ (*allowzero u32) .single_allowzero = 0x0000000000001020 | |
| 257 | \\ (*allowzero const u32) .single_allowzero_const = 0x0000000000001024 | |
| 258 | \\ (*allowzero volatile u32) .single_allowzero_volatile = 0x0000000000001028 | |
| 259 | \\ (*allowzero const volatile u32) .single_allowzero_const_volatile = 0x000000000000102c | |
| 260 | \\ ([*]u32) .many = 0x0000000000002010 | |
| 261 | \\ ([*]const u32) .many_const = 0x0000000000002014 | |
| 262 | \\ ([*]volatile u32) .many_volatile = 0x0000000000002018 | |
| 263 | \\ ([*]const volatile u32) .many_const_volatile = 0x000000000000201c | |
| 264 | \\ ([*]allowzero u32) .many_allowzero = 0x0000000000002020 | |
| 265 | \\ ([*]allowzero const u32) .many_allowzero_const = 0x0000000000002024 | |
| 266 | \\ ([*]allowzero volatile u32) .many_allowzero_volatile = 0x0000000000002028 | |
| 267 | \\ ([*]allowzero const volatile u32) .many_allowzero_const_volatile = 0x000000000000202c | |
| 268 | \\ ([]u32) .slice = len=1 { | |
| 269 | 269 | \\ (u32) [0] = 3010 |
| 270 | 270 | \\ } |
| 271 | \\ ([]const u32) slice_const = len=2 { | |
| 271 | \\ ([]const u32) .slice_const = len=2 { | |
| 272 | 272 | \\ (u32) [0] = 3010 |
| 273 | 273 | \\ (u32) [1] = 3014 |
| 274 | 274 | \\ } |
| 275 | \\ ([]volatile u32) slice_volatile = len=3 { | |
| 275 | \\ ([]volatile u32) .slice_volatile = len=3 { | |
| 276 | 276 | \\ (u32) [0] = 3010 |
| 277 | 277 | \\ (u32) [1] = 3014 |
| 278 | 278 | \\ (u32) [2] = 3018 |
| 279 | 279 | \\ } |
| 280 | \\ ([]const volatile u32) slice_const_volatile = len=4 { | |
| 280 | \\ ([]const volatile u32) .slice_const_volatile = len=4 { | |
| 281 | 281 | \\ (u32) [0] = 3010 |
| 282 | 282 | \\ (u32) [1] = 3014 |
| 283 | 283 | \\ (u32) [2] = 3018 |
| 284 | 284 | \\ (u32) [3] = 3022 |
| 285 | 285 | \\ } |
| 286 | \\ ([]allowzero u32) slice_allowzero = len=0 {} | |
| 287 | \\ ([]allowzero const u32) slice_allowzero_const = len=1 { | |
| 286 | \\ ([]allowzero u32) .slice_allowzero = len=0 {} | |
| 287 | \\ ([]allowzero const u32) .slice_allowzero_const = len=1 { | |
| 288 | 288 | \\ (u32) [0] = 3026 |
| 289 | 289 | \\ } |
| 290 | \\ ([]allowzero volatile u32) slice_allowzero_volatile = len=2 { | |
| 290 | \\ ([]allowzero volatile u32) .slice_allowzero_volatile = len=2 { | |
| 291 | 291 | \\ (u32) [0] = 3026 |
| 292 | 292 | \\ (u32) [1] = 3030 |
| 293 | 293 | \\ } |
| 294 | \\ ([]allowzero const volatile u32) slice_allowzero_const_volatile = len=3 { | |
| 294 | \\ ([]allowzero const volatile u32) .slice_allowzero_const_volatile = len=3 { | |
| 295 | 295 | \\ (u32) [0] = 3026 |
| 296 | 296 | \\ (u32) [1] = 3030 |
| 297 | 297 | \\ (u32) [2] = 3034 |
| 298 | 298 | \\ } |
| 299 | \\ ([*c]u32) c = 0x0000000000004010 | |
| 300 | \\ ([*c]const u32) c_const = 0x0000000000004014 | |
| 301 | \\ ([*c]volatile u32) c_volatile = 0x0000000000004018 | |
| 302 | \\ ([*c]const volatile u32) c_const_volatile = 0x000000000000401c | |
| 299 | \\ ([*c]u32) .c = 0x0000000000004010 | |
| 300 | \\ ([*c]const u32) .c_const = 0x0000000000004014 | |
| 301 | \\ ([*c]volatile u32) .c_volatile = 0x0000000000004018 | |
| 302 | \\ ([*c]const volatile u32) .c_const_volatile = 0x000000000000401c | |
| 303 | 303 | \\} |
| 304 | 304 | \\(lldb) breakpoint delete --force 1 |
| 305 | 305 | \\1 breakpoints deleted; 0 breakpoint locations disabled. |
| ... | ... | @@ -362,10 +362,10 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void { |
| 362 | 362 | \\} |
| 363 | 363 | \\(lldb) frame variable --show-types --format c-string -- strings |
| 364 | 364 | \\(root.strings.Strings) strings = { |
| 365 | \\ ([*c]const u8) c_ptr = "c_ptr\x07\x08\t" | |
| 366 | \\ ([*:0]const u8) many_ptr = "many_ptr\n\x0b\x0c" | |
| 367 | \\ (*const [12:0]u8) ptr_array = "ptr_array\x00\r\x1b" | |
| 368 | \\ ([:0]const u8) slice = "slice\"\'\\\x00" len=9 { | |
| 365 | \\ ([*c]const u8) .c_ptr = "c_ptr\x07\x08\t" | |
| 366 | \\ ([*:0]const u8) .many_ptr = "many_ptr\n\x0b\x0c" | |
| 367 | \\ (*const [12:0]u8) .ptr_array = "ptr_array\x00\r\x1b" | |
| 368 | \\ ([:0]const u8) .slice = "slice\"\'\\\x00" len=9 { | |
| 369 | 369 | \\ (u8) [0] = "s" |
| 370 | 370 | \\ (u8) [1] = "l" |
| 371 | 371 | \\ (u8) [2] = "i" |
| ... | ... | @@ -434,10 +434,10 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void { |
| 434 | 434 | \\} |
| 435 | 435 | \\(lldb) frame variable --show-types -- enums |
| 436 | 436 | \\(root.enums.Enums) enums = { |
| 437 | \\ (root.enums.Enums.Zero) zero = @enumFromInt(13) | |
| 438 | \\ (root.enums.Enums.One) one = .first | |
| 439 | \\ (root.enums.Enums.Two) two = @enumFromInt(-1234) | |
| 440 | \\ (root.enums.Enums.Three) three = .second | |
| 437 | \\ (root.enums.Enums.Zero) .zero = @enumFromInt(13) | |
| 438 | \\ (root.enums.Enums.One) .one = .first | |
| 439 | \\ (root.enums.Enums.Two) .two = @enumFromInt(-1234) | |
| 440 | \\ (root.enums.Enums.Three) .three = .second | |
| 441 | 441 | \\} |
| 442 | 442 | \\(lldb) breakpoint delete --force 1 |
| 443 | 443 | \\1 breakpoints deleted; 0 breakpoint locations disabled. |
| ... | ... | @@ -498,15 +498,15 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void { |
| 498 | 498 | \\} |
| 499 | 499 | \\(lldb) frame variable --show-types -- errors |
| 500 | 500 | \\(root.errors.Errors) errors = { |
| 501 | \\ (error{One}) one = error.One | |
| 502 | \\ (error{One,Two}) two = error.Two | |
| 503 | \\ (error{One,Two,Three}) three = error.Three | |
| 504 | \\ (anyerror) any = error.Any | |
| 505 | \\ (anyerror!void) any_void = { | |
| 506 | \\ (anyerror) error = error.NotVoid | |
| 501 | \\ (error{One}) .one = error.One | |
| 502 | \\ (error{One,Two}) .two = error.Two | |
| 503 | \\ (error{One,Two,Three}) .three = error.Three | |
| 504 | \\ (anyerror) .any = error.Any | |
| 505 | \\ (anyerror!void) .any_void = { | |
| 506 | \\ (anyerror) .error = error.NotVoid | |
| 507 | 507 | \\ } |
| 508 | \\ (error{One}!u32) any_u32 = { | |
| 509 | \\ (u32) value = 42 | |
| 508 | \\ (error{One}!u32) .any_u32 = { | |
| 509 | \\ (u32) .value = 42 | |
| 510 | 510 | \\ } |
| 511 | 511 | \\} |
| 512 | 512 | \\(lldb) breakpoint delete --force 1 |
| ... | ... | @@ -630,17 +630,17 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void { |
| 630 | 630 | \\} |
| 631 | 631 | \\(lldb) frame variable --show-types -- unions |
| 632 | 632 | \\(root.unions.Unions) unions = { |
| 633 | \\ (root.unions.Unions.Untagged) untagged = { | |
| 634 | \\ (u32) u32 = 3217031168 | |
| 635 | \\ (i32) i32 = -1077936128 | |
| 636 | \\ (f32) f32 = -1.5 | |
| 633 | \\ (root.unions.Unions.Untagged) .untagged = { | |
| 634 | \\ (u32) .u32 = 3217031168 | |
| 635 | \\ (i32) .i32 = -1077936128 | |
| 636 | \\ (f32) .f32 = -1.5 | |
| 637 | 637 | \\ } |
| 638 | \\ (root.unions.Unions.SafetyTagged) safety_tagged = { | |
| 639 | \\ (root.unions.Unions.Enum) en = .second | |
| 638 | \\ (root.unions.Unions.SafetyTagged) .safety_tagged = { | |
| 639 | \\ (root.unions.Unions.Enum) .en = .second | |
| 640 | 640 | \\ } |
| 641 | \\ (root.unions.Unions.Tagged) tagged = { | |
| 642 | \\ (error{Error}!root.unions.Unions.Enum) eu = { | |
| 643 | \\ (error{Error}) error = error.Error | |
| 641 | \\ (root.unions.Unions.Tagged) .tagged = { | |
| 642 | \\ (error{Error}!root.unions.Unions.Enum) .eu = { | |
| 643 | \\ (error{Error}) .error = error.Error | |
| 644 | 644 | \\ } |
| 645 | 645 | \\ } |
| 646 | 646 | \\} |
| ... | ... | @@ -721,6 +721,93 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void { |
| 721 | 721 | \\1 breakpoints deleted; 0 breakpoint locations disabled. |
| 722 | 722 | }, |
| 723 | 723 | ); |
| 724 | db.addLldbTest( | |
| 725 | "if_blocks", | |
| 726 | target, | |
| 727 | &.{ | |
| 728 | .{ | |
| 729 | .path = "if_blocks.zig", | |
| 730 | .source = | |
| 731 | \\pub fn main() void { | |
| 732 | \\ for (0..2) |i| { | |
| 733 | \\ if (i == 0) { | |
| 734 | \\ var x: u32 = 123; | |
| 735 | \\ _ = &x; | |
| 736 | \\ } else { | |
| 737 | \\ var x: f32 = 4.5; | |
| 738 | \\ _ = &x; | |
| 739 | \\ } | |
| 740 | \\ } | |
| 741 | \\} | |
| 742 | \\ | |
| 743 | , | |
| 744 | }, | |
| 745 | }, | |
| 746 | \\breakpoint set --file if_blocks.zig --source-pattern-regexp '_ = &x;' | |
| 747 | \\process launch | |
| 748 | \\frame variable | |
| 749 | \\process continue | |
| 750 | \\frame variable | |
| 751 | \\breakpoint delete --force 1 | |
| 752 | , | |
| 753 | &.{ | |
| 754 | \\(lldb) frame variable | |
| 755 | \\(usize) i = 0 | |
| 756 | \\(u32) x = 123 | |
| 757 | \\(lldb) process continue | |
| 758 | , | |
| 759 | \\(lldb) frame variable | |
| 760 | \\(usize) i = 1 | |
| 761 | \\(f32) x = 4.5 | |
| 762 | \\(lldb) breakpoint delete --force 1 | |
| 763 | \\1 breakpoints deleted; 0 breakpoint locations disabled. | |
| 764 | }, | |
| 765 | ); | |
| 766 | db.addLldbTest( | |
| 767 | "switch_blocks", | |
| 768 | target, | |
| 769 | &.{ | |
| 770 | .{ | |
| 771 | .path = "switch_blocks.zig", | |
| 772 | .source = | |
| 773 | \\pub fn main() void { | |
| 774 | \\ for (0..2) |i| { | |
| 775 | \\ switch (i) { | |
| 776 | \\ 0 => { | |
| 777 | \\ var x: u32 = 123; | |
| 778 | \\ _ = &x; | |
| 779 | \\ }, | |
| 780 | \\ else => { | |
| 781 | \\ var x: f32 = 4.5; | |
| 782 | \\ _ = &x; | |
| 783 | \\ }, | |
| 784 | \\ } | |
| 785 | \\ } | |
| 786 | \\} | |
| 787 | \\ | |
| 788 | , | |
| 789 | }, | |
| 790 | }, | |
| 791 | \\breakpoint set --file switch_blocks.zig --source-pattern-regexp '_ = &x;' | |
| 792 | \\process launch | |
| 793 | \\frame variable | |
| 794 | \\process continue | |
| 795 | \\frame variable | |
| 796 | \\breakpoint delete --force 1 | |
| 797 | , | |
| 798 | &.{ | |
| 799 | \\(lldb) frame variable | |
| 800 | \\(usize) i = 0 | |
| 801 | \\(u32) x = 123 | |
| 802 | \\(lldb) process continue | |
| 803 | , | |
| 804 | \\(lldb) frame variable | |
| 805 | \\(usize) i = 1 | |
| 806 | \\(f32) x = 4.5 | |
| 807 | \\(lldb) breakpoint delete --force 1 | |
| 808 | \\1 breakpoints deleted; 0 breakpoint locations disabled. | |
| 809 | }, | |
| 810 | ); | |
| 724 | 811 | db.addLldbTest( |
| 725 | 812 | "inline_call", |
| 726 | 813 | target, |
| ... | ... | @@ -1370,24 +1457,24 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void { |
| 1370 | 1457 | \\(lldb) frame variable --show-types -- map.unmanaged |
| 1371 | 1458 | \\(std.hash_map.HashMapUnmanaged(u32,u32,main.Context,63)) map.unmanaged = len=5 capacity=16 { |
| 1372 | 1459 | \\ (std.hash_map.HashMapUnmanaged(u32,u32,main.Context,63).KV) [0] = { |
| 1373 | \\ (u32) key = 0 | |
| 1374 | \\ (u32) value = 1 | |
| 1460 | \\ (u32) .key = 0 | |
| 1461 | \\ (u32) .value = 1 | |
| 1375 | 1462 | \\ } |
| 1376 | 1463 | \\ (std.hash_map.HashMapUnmanaged(u32,u32,main.Context,63).KV) [1] = { |
| 1377 | \\ (u32) key = 2 | |
| 1378 | \\ (u32) value = 3 | |
| 1464 | \\ (u32) .key = 2 | |
| 1465 | \\ (u32) .value = 3 | |
| 1379 | 1466 | \\ } |
| 1380 | 1467 | \\ (std.hash_map.HashMapUnmanaged(u32,u32,main.Context,63).KV) [2] = { |
| 1381 | \\ (u32) key = 4 | |
| 1382 | \\ (u32) value = 5 | |
| 1468 | \\ (u32) .key = 4 | |
| 1469 | \\ (u32) .value = 5 | |
| 1383 | 1470 | \\ } |
| 1384 | 1471 | \\ (std.hash_map.HashMapUnmanaged(u32,u32,main.Context,63).KV) [3] = { |
| 1385 | \\ (u32) key = 6 | |
| 1386 | \\ (u32) value = 7 | |
| 1472 | \\ (u32) .key = 6 | |
| 1473 | \\ (u32) .value = 7 | |
| 1387 | 1474 | \\ } |
| 1388 | 1475 | \\ (std.hash_map.HashMapUnmanaged(u32,u32,main.Context,63).KV) [4] = { |
| 1389 | \\ (u32) key = 8 | |
| 1390 | \\ (u32) value = 9 | |
| 1476 | \\ (u32) .key = 8 | |
| 1477 | \\ (u32) .value = 9 | |
| 1391 | 1478 | \\ } |
| 1392 | 1479 | \\} |
| 1393 | 1480 | \\(lldb) breakpoint delete --force 1 |
| ... | ... | @@ -1447,37 +1534,37 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void { |
| 1447 | 1534 | \\(lldb) frame variable --show-types -- list0 list0.len list0.capacity list0[0] list0[1] list0[2] list0.0 list0.1 list0.2 |
| 1448 | 1535 | \\(std.multi_array_list.MultiArrayList(main.Elem0)) list0 = len=3 capacity=8 { |
| 1449 | 1536 | \\ (root.main.Elem0) [0] = { |
| 1450 | \\ (u32) 0 = 1 | |
| 1451 | \\ (u8) 1 = 2 | |
| 1452 | \\ (u16) 2 = 3 | |
| 1537 | \\ (u32) .@"0" = 1 | |
| 1538 | \\ (u8) .@"1" = 2 | |
| 1539 | \\ (u16) .@"2" = 3 | |
| 1453 | 1540 | \\ } |
| 1454 | 1541 | \\ (root.main.Elem0) [1] = { |
| 1455 | \\ (u32) 0 = 4 | |
| 1456 | \\ (u8) 1 = 5 | |
| 1457 | \\ (u16) 2 = 6 | |
| 1542 | \\ (u32) .@"0" = 4 | |
| 1543 | \\ (u8) .@"1" = 5 | |
| 1544 | \\ (u16) .@"2" = 6 | |
| 1458 | 1545 | \\ } |
| 1459 | 1546 | \\ (root.main.Elem0) [2] = { |
| 1460 | \\ (u32) 0 = 7 | |
| 1461 | \\ (u8) 1 = 8 | |
| 1462 | \\ (u16) 2 = 9 | |
| 1547 | \\ (u32) .@"0" = 7 | |
| 1548 | \\ (u8) .@"1" = 8 | |
| 1549 | \\ (u16) .@"2" = 9 | |
| 1463 | 1550 | \\ } |
| 1464 | 1551 | \\} |
| 1465 | 1552 | \\(usize) list0.len = 3 |
| 1466 | 1553 | \\(usize) list0.capacity = 8 |
| 1467 | 1554 | \\(root.main.Elem0) list0[0] = { |
| 1468 | \\ (u32) 0 = 1 | |
| 1469 | \\ (u8) 1 = 2 | |
| 1470 | \\ (u16) 2 = 3 | |
| 1555 | \\ (u32) .@"0" = 1 | |
| 1556 | \\ (u8) .@"1" = 2 | |
| 1557 | \\ (u16) .@"2" = 3 | |
| 1471 | 1558 | \\} |
| 1472 | 1559 | \\(root.main.Elem0) list0[1] = { |
| 1473 | \\ (u32) 0 = 4 | |
| 1474 | \\ (u8) 1 = 5 | |
| 1475 | \\ (u16) 2 = 6 | |
| 1560 | \\ (u32) .@"0" = 4 | |
| 1561 | \\ (u8) .@"1" = 5 | |
| 1562 | \\ (u16) .@"2" = 6 | |
| 1476 | 1563 | \\} |
| 1477 | 1564 | \\(root.main.Elem0) list0[2] = { |
| 1478 | \\ (u32) 0 = 7 | |
| 1479 | \\ (u8) 1 = 8 | |
| 1480 | \\ (u16) 2 = 9 | |
| 1565 | \\ (u32) .@"0" = 7 | |
| 1566 | \\ (u8) .@"1" = 8 | |
| 1567 | \\ (u16) .@"2" = 9 | |
| 1481 | 1568 | \\} |
| 1482 | 1569 | \\([3]u32) list0.0 = { |
| 1483 | 1570 | \\ (u32) [0] = 1 |
| ... | ... | @@ -1497,37 +1584,37 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void { |
| 1497 | 1584 | \\(lldb) frame variable --show-types -- slice0 slice0.len slice0.capacity slice0[0] slice0[1] slice0[2] slice0.0 slice0.1 slice0.2 |
| 1498 | 1585 | \\(std.multi_array_list.MultiArrayList(main.Elem0).Slice) slice0 = len=3 capacity=8 { |
| 1499 | 1586 | \\ (root.main.Elem0) [0] = { |
| 1500 | \\ (u32) 0 = 1 | |
| 1501 | \\ (u8) 1 = 2 | |
| 1502 | \\ (u16) 2 = 3 | |
| 1587 | \\ (u32) .@"0" = 1 | |
| 1588 | \\ (u8) .@"1" = 2 | |
| 1589 | \\ (u16) .@"2" = 3 | |
| 1503 | 1590 | \\ } |
| 1504 | 1591 | \\ (root.main.Elem0) [1] = { |
| 1505 | \\ (u32) 0 = 4 | |
| 1506 | \\ (u8) 1 = 5 | |
| 1507 | \\ (u16) 2 = 6 | |
| 1592 | \\ (u32) .@"0" = 4 | |
| 1593 | \\ (u8) .@"1" = 5 | |
| 1594 | \\ (u16) .@"2" = 6 | |
| 1508 | 1595 | \\ } |
| 1509 | 1596 | \\ (root.main.Elem0) [2] = { |
| 1510 | \\ (u32) 0 = 7 | |
| 1511 | \\ (u8) 1 = 8 | |
| 1512 | \\ (u16) 2 = 9 | |
| 1597 | \\ (u32) .@"0" = 7 | |
| 1598 | \\ (u8) .@"1" = 8 | |
| 1599 | \\ (u16) .@"2" = 9 | |
| 1513 | 1600 | \\ } |
| 1514 | 1601 | \\} |
| 1515 | 1602 | \\(usize) slice0.len = 3 |
| 1516 | 1603 | \\(usize) slice0.capacity = 8 |
| 1517 | 1604 | \\(root.main.Elem0) slice0[0] = { |
| 1518 | \\ (u32) 0 = 1 | |
| 1519 | \\ (u8) 1 = 2 | |
| 1520 | \\ (u16) 2 = 3 | |
| 1605 | \\ (u32) .@"0" = 1 | |
| 1606 | \\ (u8) .@"1" = 2 | |
| 1607 | \\ (u16) .@"2" = 3 | |
| 1521 | 1608 | \\} |
| 1522 | 1609 | \\(root.main.Elem0) slice0[1] = { |
| 1523 | \\ (u32) 0 = 4 | |
| 1524 | \\ (u8) 1 = 5 | |
| 1525 | \\ (u16) 2 = 6 | |
| 1610 | \\ (u32) .@"0" = 4 | |
| 1611 | \\ (u8) .@"1" = 5 | |
| 1612 | \\ (u16) .@"2" = 6 | |
| 1526 | 1613 | \\} |
| 1527 | 1614 | \\(root.main.Elem0) slice0[2] = { |
| 1528 | \\ (u32) 0 = 7 | |
| 1529 | \\ (u8) 1 = 8 | |
| 1530 | \\ (u16) 2 = 9 | |
| 1615 | \\ (u32) .@"0" = 7 | |
| 1616 | \\ (u8) .@"1" = 8 | |
| 1617 | \\ (u16) .@"2" = 9 | |
| 1531 | 1618 | \\} |
| 1532 | 1619 | \\([3]u32) slice0.0 = { |
| 1533 | 1620 | \\ (u32) [0] = 1 |
| ... | ... | @@ -1547,37 +1634,37 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void { |
| 1547 | 1634 | \\(lldb) frame variable --show-types -- list1 list1.len list1.capacity list1[0] list1[1] list1[2] list1.a list1.b list1.c |
| 1548 | 1635 | \\(std.multi_array_list.MultiArrayList(main.Elem1)) list1 = len=3 capacity=12 { |
| 1549 | 1636 | \\ (root.main.Elem1) [0] = { |
| 1550 | \\ (u32) a = 1 | |
| 1551 | \\ (u8) b = 2 | |
| 1552 | \\ (u16) c = 3 | |
| 1637 | \\ (u32) .a = 1 | |
| 1638 | \\ (u8) .b = 2 | |
| 1639 | \\ (u16) .c = 3 | |
| 1553 | 1640 | \\ } |
| 1554 | 1641 | \\ (root.main.Elem1) [1] = { |
| 1555 | \\ (u32) a = 4 | |
| 1556 | \\ (u8) b = 5 | |
| 1557 | \\ (u16) c = 6 | |
| 1642 | \\ (u32) .a = 4 | |
| 1643 | \\ (u8) .b = 5 | |
| 1644 | \\ (u16) .c = 6 | |
| 1558 | 1645 | \\ } |
| 1559 | 1646 | \\ (root.main.Elem1) [2] = { |
| 1560 | \\ (u32) a = 7 | |
| 1561 | \\ (u8) b = 8 | |
| 1562 | \\ (u16) c = 9 | |
| 1647 | \\ (u32) .a = 7 | |
| 1648 | \\ (u8) .b = 8 | |
| 1649 | \\ (u16) .c = 9 | |
| 1563 | 1650 | \\ } |
| 1564 | 1651 | \\} |
| 1565 | 1652 | \\(usize) list1.len = 3 |
| 1566 | 1653 | \\(usize) list1.capacity = 12 |
| 1567 | 1654 | \\(root.main.Elem1) list1[0] = { |
| 1568 | \\ (u32) a = 1 | |
| 1569 | \\ (u8) b = 2 | |
| 1570 | \\ (u16) c = 3 | |
| 1655 | \\ (u32) .a = 1 | |
| 1656 | \\ (u8) .b = 2 | |
| 1657 | \\ (u16) .c = 3 | |
| 1571 | 1658 | \\} |
| 1572 | 1659 | \\(root.main.Elem1) list1[1] = { |
| 1573 | \\ (u32) a = 4 | |
| 1574 | \\ (u8) b = 5 | |
| 1575 | \\ (u16) c = 6 | |
| 1660 | \\ (u32) .a = 4 | |
| 1661 | \\ (u8) .b = 5 | |
| 1662 | \\ (u16) .c = 6 | |
| 1576 | 1663 | \\} |
| 1577 | 1664 | \\(root.main.Elem1) list1[2] = { |
| 1578 | \\ (u32) a = 7 | |
| 1579 | \\ (u8) b = 8 | |
| 1580 | \\ (u16) c = 9 | |
| 1665 | \\ (u32) .a = 7 | |
| 1666 | \\ (u8) .b = 8 | |
| 1667 | \\ (u16) .c = 9 | |
| 1581 | 1668 | \\} |
| 1582 | 1669 | \\([3]u32) list1.a = { |
| 1583 | 1670 | \\ (u32) [0] = 1 |
| ... | ... | @@ -1597,37 +1684,37 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void { |
| 1597 | 1684 | \\(lldb) frame variable --show-types -- slice1 slice1.len slice1.capacity slice1[0] slice1[1] slice1[2] slice1.a slice1.b slice1.c |
| 1598 | 1685 | \\(std.multi_array_list.MultiArrayList(main.Elem1).Slice) slice1 = len=3 capacity=12 { |
| 1599 | 1686 | \\ (root.main.Elem1) [0] = { |
| 1600 | \\ (u32) a = 1 | |
| 1601 | \\ (u8) b = 2 | |
| 1602 | \\ (u16) c = 3 | |
| 1687 | \\ (u32) .a = 1 | |
| 1688 | \\ (u8) .b = 2 | |
| 1689 | \\ (u16) .c = 3 | |
| 1603 | 1690 | \\ } |
| 1604 | 1691 | \\ (root.main.Elem1) [1] = { |
| 1605 | \\ (u32) a = 4 | |
| 1606 | \\ (u8) b = 5 | |
| 1607 | \\ (u16) c = 6 | |
| 1692 | \\ (u32) .a = 4 | |
| 1693 | \\ (u8) .b = 5 | |
| 1694 | \\ (u16) .c = 6 | |
| 1608 | 1695 | \\ } |
| 1609 | 1696 | \\ (root.main.Elem1) [2] = { |
| 1610 | \\ (u32) a = 7 | |
| 1611 | \\ (u8) b = 8 | |
| 1612 | \\ (u16) c = 9 | |
| 1697 | \\ (u32) .a = 7 | |
| 1698 | \\ (u8) .b = 8 | |
| 1699 | \\ (u16) .c = 9 | |
| 1613 | 1700 | \\ } |
| 1614 | 1701 | \\} |
| 1615 | 1702 | \\(usize) slice1.len = 3 |
| 1616 | 1703 | \\(usize) slice1.capacity = 12 |
| 1617 | 1704 | \\(root.main.Elem1) slice1[0] = { |
| 1618 | \\ (u32) a = 1 | |
| 1619 | \\ (u8) b = 2 | |
| 1620 | \\ (u16) c = 3 | |
| 1705 | \\ (u32) .a = 1 | |
| 1706 | \\ (u8) .b = 2 | |
| 1707 | \\ (u16) .c = 3 | |
| 1621 | 1708 | \\} |
| 1622 | 1709 | \\(root.main.Elem1) slice1[1] = { |
| 1623 | \\ (u32) a = 4 | |
| 1624 | \\ (u8) b = 5 | |
| 1625 | \\ (u16) c = 6 | |
| 1710 | \\ (u32) .a = 4 | |
| 1711 | \\ (u8) .b = 5 | |
| 1712 | \\ (u16) .c = 6 | |
| 1626 | 1713 | \\} |
| 1627 | 1714 | \\(root.main.Elem1) slice1[2] = { |
| 1628 | \\ (u32) a = 7 | |
| 1629 | \\ (u8) b = 8 | |
| 1630 | \\ (u16) c = 9 | |
| 1715 | \\ (u32) .a = 7 | |
| 1716 | \\ (u8) .b = 8 | |
| 1717 | \\ (u16) .c = 9 | |
| 1631 | 1718 | \\} |
| 1632 | 1719 | \\([3]u32) slice1.a = { |
| 1633 | 1720 | \\ (u32) [0] = 1 |
tools/lldb_pretty_printers.py+8-5| ... | ... | @@ -1,7 +1,7 @@ |
| 1 | 1 | # pretty printing for the zig language, zig standard library, and zig stage 2 compiler. |
| 2 | 2 | # put commands in ~/.lldbinit to run them automatically when starting lldb |
| 3 | 3 | # `command script import /path/to/zig/tools/lldb_pretty_printers.py` to import this file |
| 4 | # `type category enable zig` to enable pretty printing for the zig language | |
| 4 | # `type category enable zig.lang` to enable pretty printing for the zig language | |
| 5 | 5 | # `type category enable zig.std` to enable pretty printing for the zig standard library |
| 6 | 6 | # `type category enable zig.stage2` to enable pretty printing for the zig stage 2 compiler |
| 7 | 7 | import lldb |
| ... | ... | @@ -688,11 +688,14 @@ def add(debugger, *, category, regex=False, type, identifier=None, synth=False, |
| 688 | 688 | def MultiArrayList_Entry(type): return '^multi_array_list\\.MultiArrayList\\(%s\\)\\.Entry__struct_[1-9][0-9]*$' % type |
| 689 | 689 | |
| 690 | 690 | def __lldb_init_module(debugger, _=None): |
| 691 | # Initialize Zig Categories | |
| 692 | debugger.HandleCommand('type category define --language c99 zig.lang zig.std') | |
| 693 | ||
| 691 | 694 | # Initialize Zig Language |
| 692 | add(debugger, category='zig', regex=True, type='^\\[\\]', identifier='zig_Slice', synth=True, expand=True, summary='len=${svar%#}') | |
| 693 | add(debugger, category='zig', type='[]u8', identifier='zig_String', summary=True) | |
| 694 | add(debugger, category='zig', regex=True, type='^\\?', identifier='zig_Optional', synth=True, summary=True) | |
| 695 | add(debugger, category='zig', regex=True, type='^(error{.*}|anyerror)!', identifier='zig_ErrorUnion', synth=True, inline_children=True, summary=True) | |
| 695 | add(debugger, category='zig.lang', regex=True, type='^\\[\\]', identifier='zig_Slice', synth=True, expand=True, summary='len=${svar%#}') | |
| 696 | add(debugger, category='zig.lang', type='[]u8', identifier='zig_String', summary=True) | |
| 697 | add(debugger, category='zig.lang', regex=True, type='^\\?', identifier='zig_Optional', synth=True, summary=True) | |
| 698 | add(debugger, category='zig.lang', regex=True, type='^(error{.*}|anyerror)!', identifier='zig_ErrorUnion', synth=True, inline_children=True, summary=True) | |
| 696 | 699 | |
| 697 | 700 | # Initialize Zig Standard Library |
| 698 | 701 | add(debugger, category='zig.std', type='mem.Allocator', summary='${var.ptr}') |