| ... | ... | @@ -187,17 +187,16 @@ pub const DeclState = struct { |
| 187 | 187 | // DW.AT.name, DW.FORM.string |
| 188 | 188 | try dbg_info_buffer.writer().print("{}\x00", .{ty.fmt(mod)}); |
| 189 | 189 | // DW.AT.member |
| 190 | | try dbg_info_buffer.ensureUnusedCapacity(7); |
| 190 | try dbg_info_buffer.ensureUnusedCapacity(21); |
| 191 | 191 | dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.struct_member)); |
| 192 | 192 | // DW.AT.name, DW.FORM.string |
| 193 | 193 | dbg_info_buffer.appendSliceAssumeCapacity("maybe"); |
| 194 | 194 | dbg_info_buffer.appendAssumeCapacity(0); |
| 195 | 195 | // DW.AT.type, DW.FORM.ref4 |
| 196 | 196 | var index = dbg_info_buffer.items.len; |
| 197 | | try dbg_info_buffer.writer().writeByteNTimes(0, 4); |
| 197 | dbg_info_buffer.appendNTimesAssumeCapacity(0, 4); |
| 198 | 198 | try self.addTypeRelocGlobal(atom_index, Type.bool, @intCast(index)); |
| 199 | 199 | // DW.AT.data_member_location, DW.FORM.udata |
| 200 | | try dbg_info_buffer.ensureUnusedCapacity(6); |
| 201 | 200 | dbg_info_buffer.appendAssumeCapacity(0); |
| 202 | 201 | // DW.AT.member |
| 203 | 202 | dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.struct_member)); |
| ... | ... | @@ -206,7 +205,7 @@ pub const DeclState = struct { |
| 206 | 205 | dbg_info_buffer.appendAssumeCapacity(0); |
| 207 | 206 | // DW.AT.type, DW.FORM.ref4 |
| 208 | 207 | index = dbg_info_buffer.items.len; |
| 209 | | try dbg_info_buffer.writer().writeByteNTimes(0, 4); |
| 208 | dbg_info_buffer.appendNTimesAssumeCapacity(0, 4); |
| 210 | 209 | try self.addTypeRelocGlobal(atom_index, payload_ty, @intCast(index)); |
| 211 | 210 | // DW.AT.data_member_location, DW.FORM.udata |
| 212 | 211 | const offset = abi_size - payload_ty.abiSize(mod); |
| ... | ... | @@ -228,18 +227,17 @@ pub const DeclState = struct { |
| 228 | 227 | // DW.AT.name, DW.FORM.string |
| 229 | 228 | try dbg_info_buffer.writer().print("{}\x00", .{ty.fmt(mod)}); |
| 230 | 229 | // DW.AT.member |
| 231 | | try dbg_info_buffer.ensureUnusedCapacity(5); |
| 230 | try dbg_info_buffer.ensureUnusedCapacity(21); |
| 232 | 231 | dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.struct_member)); |
| 233 | 232 | // DW.AT.name, DW.FORM.string |
| 234 | 233 | dbg_info_buffer.appendSliceAssumeCapacity("ptr"); |
| 235 | 234 | dbg_info_buffer.appendAssumeCapacity(0); |
| 236 | 235 | // DW.AT.type, DW.FORM.ref4 |
| 237 | 236 | var index = dbg_info_buffer.items.len; |
| 238 | | try dbg_info_buffer.writer().writeByteNTimes(0, 4); |
| 237 | dbg_info_buffer.appendNTimesAssumeCapacity(0, 4); |
| 239 | 238 | const ptr_ty = ty.slicePtrFieldType(mod); |
| 240 | 239 | try self.addTypeRelocGlobal(atom_index, ptr_ty, @intCast(index)); |
| 241 | 240 | // DW.AT.data_member_location, DW.FORM.udata |
| 242 | | try dbg_info_buffer.ensureUnusedCapacity(6); |
| 243 | 241 | dbg_info_buffer.appendAssumeCapacity(0); |
| 244 | 242 | // DW.AT.member |
| 245 | 243 | dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.struct_member)); |
| ... | ... | @@ -248,19 +246,18 @@ pub const DeclState = struct { |
| 248 | 246 | dbg_info_buffer.appendAssumeCapacity(0); |
| 249 | 247 | // DW.AT.type, DW.FORM.ref4 |
| 250 | 248 | index = dbg_info_buffer.items.len; |
| 251 | | try dbg_info_buffer.writer().writeByteNTimes(0, 4); |
| 249 | dbg_info_buffer.appendNTimesAssumeCapacity(0, 4); |
| 252 | 250 | try self.addTypeRelocGlobal(atom_index, Type.usize, @intCast(index)); |
| 253 | 251 | // DW.AT.data_member_location, DW.FORM.udata |
| 254 | | try dbg_info_buffer.ensureUnusedCapacity(2); |
| 255 | 252 | dbg_info_buffer.appendAssumeCapacity(ptr_bytes); |
| 256 | 253 | // DW.AT.structure_type delimit children |
| 257 | 254 | dbg_info_buffer.appendAssumeCapacity(0); |
| 258 | 255 | } else { |
| 259 | | try dbg_info_buffer.ensureUnusedCapacity(5); |
| 256 | try dbg_info_buffer.ensureUnusedCapacity(9); |
| 260 | 257 | dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.ptr_type)); |
| 261 | 258 | // DW.AT.type, DW.FORM.ref4 |
| 262 | 259 | const index = dbg_info_buffer.items.len; |
| 263 | | try dbg_info_buffer.writer().writeByteNTimes(0, 4); |
| 260 | dbg_info_buffer.appendNTimesAssumeCapacity(0, 4); |
| 264 | 261 | try self.addTypeRelocGlobal(atom_index, ty.childType(mod), @intCast(index)); |
| 265 | 262 | } |
| 266 | 263 | }, |
| ... | ... | @@ -271,13 +268,14 @@ pub const DeclState = struct { |
| 271 | 268 | try dbg_info_buffer.writer().print("{}\x00", .{ty.fmt(mod)}); |
| 272 | 269 | // DW.AT.type, DW.FORM.ref4 |
| 273 | 270 | var index = dbg_info_buffer.items.len; |
| 274 | | try dbg_info_buffer.writer().writeByteNTimes(0, 4); |
| 271 | try dbg_info_buffer.ensureUnusedCapacity(9); |
| 272 | dbg_info_buffer.appendNTimesAssumeCapacity(0, 4); |
| 275 | 273 | try self.addTypeRelocGlobal(atom_index, ty.childType(mod), @intCast(index)); |
| 276 | 274 | // DW.AT.subrange_type |
| 277 | | try dbg_info_buffer.append(@intFromEnum(AbbrevCode.array_dim)); |
| 275 | dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.array_dim)); |
| 278 | 276 | // DW.AT.type, DW.FORM.ref4 |
| 279 | 277 | index = dbg_info_buffer.items.len; |
| 280 | | try dbg_info_buffer.writer().writeByteNTimes(0, 4); |
| 278 | dbg_info_buffer.appendNTimesAssumeCapacity(0, 4); |
| 281 | 279 | try self.addTypeRelocGlobal(atom_index, Type.usize, @intCast(index)); |
| 282 | 280 | // DW.AT.count, DW.FORM.udata |
| 283 | 281 | const len = ty.arrayLenIncludingSentinel(mod); |
| ... | ... | @@ -304,7 +302,7 @@ pub const DeclState = struct { |
| 304 | 302 | try dbg_info_buffer.writer().print("{d}\x00", .{field_index}); |
| 305 | 303 | // DW.AT.type, DW.FORM.ref4 |
| 306 | 304 | const index = dbg_info_buffer.items.len; |
| 307 | | try dbg_info_buffer.writer().writeByteNTimes(0, 4); |
| 305 | try dbg_info_buffer.appendNTimes(0, 4); |
| 308 | 306 | try self.addTypeRelocGlobal(atom_index, Type.fromInterned(field_ty), @intCast(index)); |
| 309 | 307 | // DW.AT.data_member_location, DW.FORM.udata |
| 310 | 308 | const field_off = ty.structFieldOffset(field_index, mod); |
| ... | ... | @@ -331,7 +329,7 @@ pub const DeclState = struct { |
| 331 | 329 | try dbg_info_buffer.writer().print("{d}\x00", .{field_index}); |
| 332 | 330 | // DW.AT.type, DW.FORM.ref4 |
| 333 | 331 | const index = dbg_info_buffer.items.len; |
| 334 | | try dbg_info_buffer.writer().writeByteNTimes(0, 4); |
| 332 | try dbg_info_buffer.appendNTimes(0, 4); |
| 335 | 333 | try self.addTypeRelocGlobal(atom_index, Type.fromInterned(field_ty), @intCast(index)); |
| 336 | 334 | // DW.AT.data_member_location, DW.FORM.udata |
| 337 | 335 | try leb128.writeULEB128(dbg_info_buffer.writer(), field_off); |
| ... | ... | @@ -352,7 +350,7 @@ pub const DeclState = struct { |
| 352 | 350 | dbg_info_buffer.appendAssumeCapacity(0); |
| 353 | 351 | // DW.AT.type, DW.FORM.ref4 |
| 354 | 352 | const index = dbg_info_buffer.items.len; |
| 355 | | try dbg_info_buffer.writer().writeByteNTimes(0, 4); |
| 353 | try dbg_info_buffer.appendNTimes(0, 4); |
| 356 | 354 | try self.addTypeRelocGlobal(atom_index, Type.fromInterned(field_ty), @intCast(index)); |
| 357 | 355 | // DW.AT.data_member_location, DW.FORM.udata |
| 358 | 356 | try leb128.writeULEB128(dbg_info_buffer.writer(), field_off); |
| ... | ... | @@ -418,14 +416,14 @@ pub const DeclState = struct { |
| 418 | 416 | try dbg_info_buffer.append(0); |
| 419 | 417 | |
| 420 | 418 | // DW.AT.member |
| 421 | | try dbg_info_buffer.ensureUnusedCapacity(9); |
| 419 | try dbg_info_buffer.ensureUnusedCapacity(13); |
| 422 | 420 | dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.struct_member)); |
| 423 | 421 | // DW.AT.name, DW.FORM.string |
| 424 | 422 | dbg_info_buffer.appendSliceAssumeCapacity("payload"); |
| 425 | 423 | dbg_info_buffer.appendAssumeCapacity(0); |
| 426 | 424 | // DW.AT.type, DW.FORM.ref4 |
| 427 | 425 | const inner_union_index = dbg_info_buffer.items.len; |
| 428 | | try dbg_info_buffer.writer().writeByteNTimes(0, 4); |
| 426 | dbg_info_buffer.appendNTimesAssumeCapacity(0, 4); |
| 429 | 427 | try self.addTypeRelocLocal(atom_index, @intCast(inner_union_index), 5); |
| 430 | 428 | // DW.AT.data_member_location, DW.FORM.udata |
| 431 | 429 | try leb128.writeULEB128(dbg_info_buffer.writer(), payload_offset); |
| ... | ... | @@ -452,7 +450,7 @@ pub const DeclState = struct { |
| 452 | 450 | try dbg_info_buffer.append(0); |
| 453 | 451 | // DW.AT.type, DW.FORM.ref4 |
| 454 | 452 | const index = dbg_info_buffer.items.len; |
| 455 | | try dbg_info_buffer.writer().writeByteNTimes(0, 4); |
| 453 | try dbg_info_buffer.appendNTimes(0, 4); |
| 456 | 454 | try self.addTypeRelocGlobal(atom_index, Type.fromInterned(field_ty), @intCast(index)); |
| 457 | 455 | // DW.AT.data_member_location, DW.FORM.udata |
| 458 | 456 | try dbg_info_buffer.append(0); |
| ... | ... | @@ -462,14 +460,14 @@ pub const DeclState = struct { |
| 462 | 460 | |
| 463 | 461 | if (is_tagged) { |
| 464 | 462 | // DW.AT.member |
| 465 | | try dbg_info_buffer.ensureUnusedCapacity(5); |
| 463 | try dbg_info_buffer.ensureUnusedCapacity(9); |
| 466 | 464 | dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.struct_member)); |
| 467 | 465 | // DW.AT.name, DW.FORM.string |
| 468 | 466 | dbg_info_buffer.appendSliceAssumeCapacity("tag"); |
| 469 | 467 | dbg_info_buffer.appendAssumeCapacity(0); |
| 470 | 468 | // DW.AT.type, DW.FORM.ref4 |
| 471 | 469 | const index = dbg_info_buffer.items.len; |
| 472 | | try dbg_info_buffer.writer().writeByteNTimes(0, 4); |
| 470 | dbg_info_buffer.appendNTimesAssumeCapacity(0, 4); |
| 473 | 471 | try self.addTypeRelocGlobal(atom_index, Type.fromInterned(union_obj.enum_tag_ty), @intCast(index)); |
| 474 | 472 | // DW.AT.data_member_location, DW.FORM.udata |
| 475 | 473 | try leb128.writeULEB128(dbg_info_buffer.writer(), tag_offset); |
| ... | ... | @@ -498,14 +496,14 @@ pub const DeclState = struct { |
| 498 | 496 | |
| 499 | 497 | if (!payload_ty.isNoReturn(mod)) { |
| 500 | 498 | // DW.AT.member |
| 501 | | try dbg_info_buffer.ensureUnusedCapacity(7); |
| 499 | try dbg_info_buffer.ensureUnusedCapacity(11); |
| 502 | 500 | dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.struct_member)); |
| 503 | 501 | // DW.AT.name, DW.FORM.string |
| 504 | 502 | dbg_info_buffer.appendSliceAssumeCapacity("value"); |
| 505 | 503 | dbg_info_buffer.appendAssumeCapacity(0); |
| 506 | 504 | // DW.AT.type, DW.FORM.ref4 |
| 507 | 505 | const index = dbg_info_buffer.items.len; |
| 508 | | try dbg_info_buffer.writer().writeByteNTimes(0, 4); |
| 506 | dbg_info_buffer.appendNTimesAssumeCapacity(0, 4); |
| 509 | 507 | try self.addTypeRelocGlobal(atom_index, payload_ty, @intCast(index)); |
| 510 | 508 | // DW.AT.data_member_location, DW.FORM.udata |
| 511 | 509 | try leb128.writeULEB128(dbg_info_buffer.writer(), payload_off); |
| ... | ... | @@ -513,14 +511,14 @@ pub const DeclState = struct { |
| 513 | 511 | |
| 514 | 512 | { |
| 515 | 513 | // DW.AT.member |
| 516 | | try dbg_info_buffer.ensureUnusedCapacity(5); |
| 514 | try dbg_info_buffer.ensureUnusedCapacity(9); |
| 517 | 515 | dbg_info_buffer.appendAssumeCapacity(@intFromEnum(AbbrevCode.struct_member)); |
| 518 | 516 | // DW.AT.name, DW.FORM.string |
| 519 | 517 | dbg_info_buffer.appendSliceAssumeCapacity("err"); |
| 520 | 518 | dbg_info_buffer.appendAssumeCapacity(0); |
| 521 | 519 | // DW.AT.type, DW.FORM.ref4 |
| 522 | 520 | const index = dbg_info_buffer.items.len; |
| 523 | | try dbg_info_buffer.writer().writeByteNTimes(0, 4); |
| 521 | dbg_info_buffer.appendNTimesAssumeCapacity(0, 4); |
| 524 | 522 | try self.addTypeRelocGlobal(atom_index, error_ty, @intCast(index)); |
| 525 | 523 | // DW.AT.data_member_location, DW.FORM.udata |
| 526 | 524 | try leb128.writeULEB128(dbg_info_buffer.writer(), error_off); |
| ... | ... | @@ -661,7 +659,7 @@ pub const DeclState = struct { |
| 661 | 659 | |
| 662 | 660 | try dbg_info.ensureUnusedCapacity(5 + name_with_null.len); |
| 663 | 661 | const index = dbg_info.items.len; |
| 664 | | try dbg_info.writer().writeByteNTimes(0, 4); |
| 662 | dbg_info.appendNTimesAssumeCapacity(0, 4); |
| 665 | 663 | try self.addTypeRelocGlobal(atom_index, ty, @intCast(index)); // DW.AT.type, DW.FORM.ref4 |
| 666 | 664 | dbg_info.appendSliceAssumeCapacity(name_with_null); // DW.AT.name, DW.FORM.string |
| 667 | 665 | } |
| ... | ... | @@ -877,7 +875,7 @@ pub const DeclState = struct { |
| 877 | 875 | |
| 878 | 876 | try dbg_info.ensureUnusedCapacity(5 + name_with_null.len); |
| 879 | 877 | const index = dbg_info.items.len; |
| 880 | | try dbg_info.writer().writeByteNTimes(0, 4); // dw.at.type, dw.form.ref4 |
| 878 | dbg_info.appendNTimesAssumeCapacity(0, 4); // dw.at.type, dw.form.ref4 |
| 881 | 879 | try self.addTypeRelocGlobal(atom_index, child_ty, @intCast(index)); |
| 882 | 880 | dbg_info.appendSliceAssumeCapacity(name_with_null); // DW.AT.name, DW.FORM.string |
| 883 | 881 | } |
| ... | ... | @@ -1133,7 +1131,7 @@ pub fn initDeclState(self: *Dwarf, mod: *Module, decl_index: InternPool.DeclInde |
| 1133 | 1131 | }); |
| 1134 | 1132 | // This is the "relocatable" vaddr, corresponding to `code_buffer` index `0`. |
| 1135 | 1133 | assert(dbg_line_vaddr_reloc_index == dbg_line_buffer.items.len); |
| 1136 | | dbg_line_buffer.writer().writeByteNTimes(0, ptr_width_bytes) catch unreachable; |
| 1134 | dbg_line_buffer.appendNTimesAssumeCapacity(0, ptr_width_bytes); |
| 1137 | 1135 | |
| 1138 | 1136 | dbg_line_buffer.appendAssumeCapacity(DW.LNS.advance_line); |
| 1139 | 1137 | // This is the "relocatable" relative line offset from the previous function's end curly |
| ... | ... | @@ -1171,12 +1169,12 @@ pub fn initDeclState(self: *Dwarf, mod: *Module, decl_index: InternPool.DeclInde |
| 1171 | 1169 | // "relocations" and have to be in this fixed place so that functions can be |
| 1172 | 1170 | // moved in virtual address space. |
| 1173 | 1171 | assert(dbg_info_low_pc_reloc_index == dbg_info_buffer.items.len); |
| 1174 | | dbg_info_buffer.writer().writeByteNTimes(0, ptr_width_bytes) catch unreachable; // DW.AT.low_pc, DW.FORM.addr |
| 1172 | dbg_info_buffer.appendNTimesAssumeCapacity(0, ptr_width_bytes); // DW.AT.low_pc, DW.FORM.addr |
| 1175 | 1173 | assert(self.getRelocDbgInfoSubprogramHighPC() == dbg_info_buffer.items.len); |
| 1176 | | dbg_info_buffer.writer().writeByteNTimes(0, 4) catch unreachable; // DW.AT.high_pc, DW.FORM.data4 |
| 1174 | dbg_info_buffer.appendNTimesAssumeCapacity(0, 4); // DW.AT.high_pc, DW.FORM.data4 |
| 1177 | 1175 | if (fn_ret_has_bits) { |
| 1178 | 1176 | try decl_state.addTypeRelocGlobal(di_atom_index, fn_ret_type, @intCast(dbg_info_buffer.items.len)); |
| 1179 | | dbg_info_buffer.writer().writeByteNTimes(0, 4) catch unreachable; // DW.AT.type, DW.FORM.ref4 |
| 1177 | dbg_info_buffer.appendNTimesAssumeCapacity(0, 4); // DW.AT.type, DW.FORM.ref4 |
| 1180 | 1178 | } |
| 1181 | 1179 | dbg_info_buffer.appendSliceAssumeCapacity( |
| 1182 | 1180 | decl_name_slice[0 .. decl_name_slice.len + 1], |