| ... | ... | @@ -184,12 +184,14 @@ pub const DeclState = struct { |
| 184 | 184 | try dbg_info_buffer.append(@enumToInt(AbbrevKind.pad1)); |
| 185 | 185 | }, |
| 186 | 186 | .Bool => { |
| 187 | | try dbg_info_buffer.appendSlice(&[_]u8{ |
| 188 | | @enumToInt(AbbrevKind.base_type), |
| 189 | | DW.ATE.boolean, // DW.AT.encoding , DW.FORM.data1 |
| 190 | | 1, // DW.AT.byte_size, DW.FORM.data1 |
| 191 | | 'b', 'o', 'o', 'l', 0, // DW.AT.name, DW.FORM.string |
| 192 | | }); |
| 187 | try dbg_info_buffer.ensureUnusedCapacity(12); |
| 188 | dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.base_type)); |
| 189 | // DW.AT.encoding, DW.FORM.data1 |
| 190 | dbg_info_buffer.appendAssumeCapacity(DW.ATE.boolean); |
| 191 | // DW.AT.byte_size, DW.FORM.udata |
| 192 | try leb128.writeULEB128(dbg_info_buffer.writer(), ty.abiSize(target)); |
| 193 | // DW.AT.name, DW.FORM.string |
| 194 | try dbg_info_buffer.writer().print("{}\x00", .{ty.fmt(module)}); |
| 193 | 195 | }, |
| 194 | 196 | .Int => { |
| 195 | 197 | const info = ty.intInfo(target); |
| ... | ... | @@ -200,9 +202,9 @@ pub const DeclState = struct { |
| 200 | 202 | .signed => DW.ATE.signed, |
| 201 | 203 | .unsigned => DW.ATE.unsigned, |
| 202 | 204 | }); |
| 203 | | // DW.AT.byte_size, DW.FORM.data1 |
| 204 | | dbg_info_buffer.appendAssumeCapacity(@intCast(u8, ty.abiSize(target))); |
| 205 | | // DW.AT.name, DW.FORM.string |
| 205 | // DW.AT.byte_size, DW.FORM.udata |
| 206 | try leb128.writeULEB128(dbg_info_buffer.writer(), ty.abiSize(target)); |
| 207 | // DW.AT.name, DW.FORM.string |
| 206 | 208 | try dbg_info_buffer.writer().print("{}\x00", .{ty.fmt(module)}); |
| 207 | 209 | }, |
| 208 | 210 | .Optional => { |
| ... | ... | @@ -211,9 +213,9 @@ pub const DeclState = struct { |
| 211 | 213 | dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.base_type)); |
| 212 | 214 | // DW.AT.encoding, DW.FORM.data1 |
| 213 | 215 | dbg_info_buffer.appendAssumeCapacity(DW.ATE.address); |
| 214 | | // DW.AT.byte_size, DW.FORM.data1 |
| 215 | | dbg_info_buffer.appendAssumeCapacity(@intCast(u8, ty.abiSize(target))); |
| 216 | | // DW.AT.name, DW.FORM.string |
| 216 | // DW.AT.byte_size, DW.FORM.udata |
| 217 | try leb128.writeULEB128(dbg_info_buffer.writer(), ty.abiSize(target)); |
| 218 | // DW.AT.name, DW.FORM.string |
| 217 | 219 | try dbg_info_buffer.writer().print("{}\x00", .{ty.fmt(module)}); |
| 218 | 220 | } else { |
| 219 | 221 | // Non-pointer optionals are structs: struct { .maybe = *, .val = * } |
| ... | ... | @@ -221,7 +223,7 @@ pub const DeclState = struct { |
| 221 | 223 | const payload_ty = ty.optionalChild(buf); |
| 222 | 224 | // DW.AT.structure_type |
| 223 | 225 | try dbg_info_buffer.append(@enumToInt(AbbrevKind.struct_type)); |
| 224 | | // DW.AT.byte_size, DW.FORM.sdata |
| 226 | // DW.AT.byte_size, DW.FORM.udata |
| 225 | 227 | const abi_size = ty.abiSize(target); |
| 226 | 228 | try leb128.writeULEB128(dbg_info_buffer.writer(), abi_size); |
| 227 | 229 | // DW.AT.name, DW.FORM.string |
| ... | ... | @@ -236,7 +238,7 @@ pub const DeclState = struct { |
| 236 | 238 | var index = dbg_info_buffer.items.len; |
| 237 | 239 | try dbg_info_buffer.resize(index + 4); |
| 238 | 240 | try self.addTypeRelocGlobal(atom_index, Type.bool, @intCast(u32, index)); |
| 239 | | // DW.AT.data_member_location, DW.FORM.sdata |
| 241 | // DW.AT.data_member_location, DW.FORM.udata |
| 240 | 242 | try dbg_info_buffer.ensureUnusedCapacity(6); |
| 241 | 243 | dbg_info_buffer.appendAssumeCapacity(0); |
| 242 | 244 | // DW.AT.member |
| ... | ... | @@ -248,7 +250,7 @@ pub const DeclState = struct { |
| 248 | 250 | index = dbg_info_buffer.items.len; |
| 249 | 251 | try dbg_info_buffer.resize(index + 4); |
| 250 | 252 | try self.addTypeRelocGlobal(atom_index, payload_ty, @intCast(u32, index)); |
| 251 | | // DW.AT.data_member_location, DW.FORM.sdata |
| 253 | // DW.AT.data_member_location, DW.FORM.udata |
| 252 | 254 | const offset = abi_size - payload_ty.abiSize(target); |
| 253 | 255 | try leb128.writeULEB128(dbg_info_buffer.writer(), offset); |
| 254 | 256 | // DW.AT.structure_type delimit children |
| ... | ... | @@ -263,8 +265,8 @@ pub const DeclState = struct { |
| 263 | 265 | // DW.AT.structure_type |
| 264 | 266 | try dbg_info_buffer.ensureUnusedCapacity(2); |
| 265 | 267 | dbg_info_buffer.appendAssumeCapacity(@enumToInt(AbbrevKind.struct_type)); |
| 266 | | // DW.AT.byte_size, DW.FORM.sdata |
| 267 | | dbg_info_buffer.appendAssumeCapacity(ptr_bytes * 2); |
| 268 | // DW.AT.byte_size, DW.FORM.udata |
| 269 | try leb128.writeULEB128(dbg_info_buffer.writer(), ty.abiSize(target)); |
| 268 | 270 | // DW.AT.name, DW.FORM.string |
| 269 | 271 | try dbg_info_buffer.writer().print("{}\x00", .{ty.fmt(module)}); |
| 270 | 272 | // DW.AT.member |
| ... | ... | @@ -279,7 +281,7 @@ pub const DeclState = struct { |
| 279 | 281 | var buf = try arena.create(Type.SlicePtrFieldTypeBuffer); |
| 280 | 282 | const ptr_ty = ty.slicePtrFieldType(buf); |
| 281 | 283 | try self.addTypeRelocGlobal(atom_index, ptr_ty, @intCast(u32, index)); |
| 282 | | // DW.AT.data_member_location, DW.FORM.sdata |
| 284 | // DW.AT.data_member_location, DW.FORM.udata |
| 283 | 285 | try dbg_info_buffer.ensureUnusedCapacity(6); |
| 284 | 286 | dbg_info_buffer.appendAssumeCapacity(0); |
| 285 | 287 | // DW.AT.member |
| ... | ... | @@ -291,7 +293,7 @@ pub const DeclState = struct { |
| 291 | 293 | index = dbg_info_buffer.items.len; |
| 292 | 294 | try dbg_info_buffer.resize(index + 4); |
| 293 | 295 | try self.addTypeRelocGlobal(atom_index, Type.usize, @intCast(u32, index)); |
| 294 | | // DW.AT.data_member_location, DW.FORM.sdata |
| 296 | // DW.AT.data_member_location, DW.FORM.udata |
| 295 | 297 | try dbg_info_buffer.ensureUnusedCapacity(2); |
| 296 | 298 | dbg_info_buffer.appendAssumeCapacity(ptr_bytes); |
| 297 | 299 | // DW.AT.structure_type delimit children |
| ... | ... | @@ -329,9 +331,8 @@ pub const DeclState = struct { |
| 329 | 331 | .Struct => blk: { |
| 330 | 332 | // DW.AT.structure_type |
| 331 | 333 | try dbg_info_buffer.append(@enumToInt(AbbrevKind.struct_type)); |
| 332 | | // DW.AT.byte_size, DW.FORM.sdata |
| 333 | | const abi_size = ty.abiSize(target); |
| 334 | | try leb128.writeULEB128(dbg_info_buffer.writer(), abi_size); |
| 334 | // DW.AT.byte_size, DW.FORM.udata |
| 335 | try leb128.writeULEB128(dbg_info_buffer.writer(), ty.abiSize(target)); |
| 335 | 336 | |
| 336 | 337 | switch (ty.tag()) { |
| 337 | 338 | .tuple, .anon_struct => { |
| ... | ... | @@ -348,7 +349,7 @@ pub const DeclState = struct { |
| 348 | 349 | var index = dbg_info_buffer.items.len; |
| 349 | 350 | try dbg_info_buffer.resize(index + 4); |
| 350 | 351 | try self.addTypeRelocGlobal(atom_index, field, @intCast(u32, index)); |
| 351 | | // DW.AT.data_member_location, DW.FORM.sdata |
| 352 | // DW.AT.data_member_location, DW.FORM.udata |
| 352 | 353 | const field_off = ty.structFieldOffset(field_index, target); |
| 353 | 354 | try leb128.writeULEB128(dbg_info_buffer.writer(), field_off); |
| 354 | 355 | } |
| ... | ... | @@ -380,7 +381,7 @@ pub const DeclState = struct { |
| 380 | 381 | var index = dbg_info_buffer.items.len; |
| 381 | 382 | try dbg_info_buffer.resize(index + 4); |
| 382 | 383 | try self.addTypeRelocGlobal(atom_index, field.ty, @intCast(u32, index)); |
| 383 | | // DW.AT.data_member_location, DW.FORM.sdata |
| 384 | // DW.AT.data_member_location, DW.FORM.udata |
| 384 | 385 | const field_off = ty.structFieldOffset(field_index, target); |
| 385 | 386 | try leb128.writeULEB128(dbg_info_buffer.writer(), field_off); |
| 386 | 387 | } |
| ... | ... | @@ -393,9 +394,8 @@ pub const DeclState = struct { |
| 393 | 394 | .Enum => { |
| 394 | 395 | // DW.AT.enumeration_type |
| 395 | 396 | try dbg_info_buffer.append(@enumToInt(AbbrevKind.enum_type)); |
| 396 | | // DW.AT.byte_size, DW.FORM.sdata |
| 397 | | const abi_size = ty.abiSize(target); |
| 398 | | try leb128.writeULEB128(dbg_info_buffer.writer(), abi_size); |
| 397 | // DW.AT.byte_size, DW.FORM.udata |
| 398 | try leb128.writeULEB128(dbg_info_buffer.writer(), ty.abiSize(target)); |
| 399 | 399 | // DW.AT.name, DW.FORM.string |
| 400 | 400 | const enum_name = try ty.nameAllocArena(arena, module); |
| 401 | 401 | try dbg_info_buffer.ensureUnusedCapacity(enum_name.len + 1); |
| ... | ... | @@ -446,7 +446,7 @@ pub const DeclState = struct { |
| 446 | 446 | if (is_tagged) { |
| 447 | 447 | // DW.AT.structure_type |
| 448 | 448 | try dbg_info_buffer.append(@enumToInt(AbbrevKind.struct_type)); |
| 449 | | // DW.AT.byte_size, DW.FORM.sdata |
| 449 | // DW.AT.byte_size, DW.FORM.udata |
| 450 | 450 | try leb128.writeULEB128(dbg_info_buffer.writer(), layout.abi_size); |
| 451 | 451 | // DW.AT.name, DW.FORM.string |
| 452 | 452 | try dbg_info_buffer.ensureUnusedCapacity(union_name.len + 1); |
| ... | ... | @@ -463,13 +463,13 @@ pub const DeclState = struct { |
| 463 | 463 | const inner_union_index = dbg_info_buffer.items.len; |
| 464 | 464 | try dbg_info_buffer.resize(inner_union_index + 4); |
| 465 | 465 | try self.addTypeRelocLocal(atom_index, @intCast(u32, inner_union_index), 5); |
| 466 | | // DW.AT.data_member_location, DW.FORM.sdata |
| 466 | // DW.AT.data_member_location, DW.FORM.udata |
| 467 | 467 | try leb128.writeULEB128(dbg_info_buffer.writer(), payload_offset); |
| 468 | 468 | } |
| 469 | 469 | |
| 470 | 470 | // DW.AT.union_type |
| 471 | 471 | try dbg_info_buffer.append(@enumToInt(AbbrevKind.union_type)); |
| 472 | | // DW.AT.byte_size, DW.FORM.sdata, |
| 472 | // DW.AT.byte_size, DW.FORM.udata, |
| 473 | 473 | try leb128.writeULEB128(dbg_info_buffer.writer(), layout.payload_size); |
| 474 | 474 | // DW.AT.name, DW.FORM.string |
| 475 | 475 | if (is_tagged) { |
| ... | ... | @@ -490,7 +490,7 @@ pub const DeclState = struct { |
| 490 | 490 | const index = dbg_info_buffer.items.len; |
| 491 | 491 | try dbg_info_buffer.resize(index + 4); |
| 492 | 492 | try self.addTypeRelocGlobal(atom_index, field.ty, @intCast(u32, index)); |
| 493 | | // DW.AT.data_member_location, DW.FORM.sdata |
| 493 | // DW.AT.data_member_location, DW.FORM.udata |
| 494 | 494 | try dbg_info_buffer.append(0); |
| 495 | 495 | } |
| 496 | 496 | // DW.AT.union_type delimit children |
| ... | ... | @@ -507,7 +507,7 @@ pub const DeclState = struct { |
| 507 | 507 | const index = dbg_info_buffer.items.len; |
| 508 | 508 | try dbg_info_buffer.resize(index + 4); |
| 509 | 509 | try self.addTypeRelocGlobal(atom_index, union_obj.tag_ty, @intCast(u32, index)); |
| 510 | | // DW.AT.data_member_location, DW.FORM.sdata |
| 510 | // DW.AT.data_member_location, DW.FORM.udata |
| 511 | 511 | try leb128.writeULEB128(dbg_info_buffer.writer(), tag_offset); |
| 512 | 512 | |
| 513 | 513 | // DW.AT.structure_type delimit children |
| ... | ... | @@ -534,7 +534,7 @@ pub const DeclState = struct { |
| 534 | 534 | |
| 535 | 535 | // DW.AT.structure_type |
| 536 | 536 | try dbg_info_buffer.append(@enumToInt(AbbrevKind.struct_type)); |
| 537 | | // DW.AT.byte_size, DW.FORM.sdata |
| 537 | // DW.AT.byte_size, DW.FORM.udata |
| 538 | 538 | try leb128.writeULEB128(dbg_info_buffer.writer(), abi_size); |
| 539 | 539 | // DW.AT.name, DW.FORM.string |
| 540 | 540 | const name = try ty.nameAllocArena(arena, module); |
| ... | ... | @@ -551,7 +551,7 @@ pub const DeclState = struct { |
| 551 | 551 | const index = dbg_info_buffer.items.len; |
| 552 | 552 | try dbg_info_buffer.resize(index + 4); |
| 553 | 553 | try self.addTypeRelocGlobal(atom_index, payload_ty, @intCast(u32, index)); |
| 554 | | // DW.AT.data_member_location, DW.FORM.sdata |
| 554 | // DW.AT.data_member_location, DW.FORM.udata |
| 555 | 555 | try leb128.writeULEB128(dbg_info_buffer.writer(), payload_off); |
| 556 | 556 | } |
| 557 | 557 | |
| ... | ... | @@ -566,7 +566,7 @@ pub const DeclState = struct { |
| 566 | 566 | const index = dbg_info_buffer.items.len; |
| 567 | 567 | try dbg_info_buffer.resize(index + 4); |
| 568 | 568 | try self.addTypeRelocGlobal(atom_index, error_ty, @intCast(u32, index)); |
| 569 | | // DW.AT.data_member_location, DW.FORM.sdata |
| 569 | // DW.AT.data_member_location, DW.FORM.udata |
| 570 | 570 | try leb128.writeULEB128(dbg_info_buffer.writer(), error_off); |
| 571 | 571 | } |
| 572 | 572 | |
| ... | ... | @@ -647,8 +647,8 @@ pub const DeclState = struct { |
| 647 | 647 | |
| 648 | 648 | try dbg_info.ensureUnusedCapacity(5 + name_with_null.len); |
| 649 | 649 | const index = dbg_info.items.len; |
| 650 | | try dbg_info.resize(index + 4); // dw.at.type, dw.form.ref4 |
| 651 | | try self.addTypeRelocGlobal(atom_index, ty, @intCast(u32, index)); // DW.AT.type, DW.FORM.ref4 |
| 650 | try dbg_info.resize(index + 4); // dw.at.type, dw.form.ref4 |
| 651 | try self.addTypeRelocGlobal(atom_index, ty, @intCast(u32, index)); // DW.AT.type, DW.FORM.ref4 |
| 652 | 652 | dbg_info.appendSliceAssumeCapacity(name_with_null); // DW.AT.name, DW.FORM.string |
| 653 | 653 | } |
| 654 | 654 | |
| ... | ... | @@ -790,7 +790,7 @@ pub const DeclState = struct { |
| 790 | 790 | |
| 791 | 791 | try dbg_info.ensureUnusedCapacity(5 + name_with_null.len); |
| 792 | 792 | const index = dbg_info.items.len; |
| 793 | | try dbg_info.resize(index + 4); // dw.at.type, dw.form.ref4 |
| 793 | try dbg_info.resize(index + 4); // dw.at.type, dw.form.ref4 |
| 794 | 794 | try self.addTypeRelocGlobal(atom_index, child_ty, @intCast(u32, index)); |
| 795 | 795 | dbg_info.appendSliceAssumeCapacity(name_with_null); // DW.AT.name, DW.FORM.string |
| 796 | 796 | } |
| ... | ... | @@ -993,13 +993,13 @@ pub fn initDeclState(self: *Dwarf, mod: *Module, decl_index: Module.Decl.Index) |
| 993 | 993 | // "relocations" and have to be in this fixed place so that functions can be |
| 994 | 994 | // moved in virtual address space. |
| 995 | 995 | assert(dbg_info_low_pc_reloc_index == dbg_info_buffer.items.len); |
| 996 | | dbg_info_buffer.items.len += ptr_width_bytes; // DW.AT.low_pc, DW.FORM.addr |
| 996 | dbg_info_buffer.items.len += ptr_width_bytes; // DW.AT.low_pc, DW.FORM.addr |
| 997 | 997 | assert(self.getRelocDbgInfoSubprogramHighPC() == dbg_info_buffer.items.len); |
| 998 | | dbg_info_buffer.items.len += 4; // DW.AT.high_pc, DW.FORM.data4 |
| 998 | dbg_info_buffer.items.len += 4; // DW.AT.high_pc, DW.FORM.data4 |
| 999 | 999 | // |
| 1000 | 1000 | if (fn_ret_has_bits) { |
| 1001 | 1001 | try decl_state.addTypeRelocGlobal(di_atom_index, fn_ret_type, @intCast(u32, dbg_info_buffer.items.len)); |
| 1002 | | dbg_info_buffer.items.len += 4; // DW.AT.type, DW.FORM.ref4 |
| 1002 | dbg_info_buffer.items.len += 4; // DW.AT.type, DW.FORM.ref4 |
| 1003 | 1003 | } |
| 1004 | 1004 | |
| 1005 | 1005 | dbg_info_buffer.appendSliceAssumeCapacity(decl_name_with_null); // DW.AT.name, DW.FORM.string |
| ... | ... | @@ -1619,7 +1619,7 @@ pub fn writeDbgAbbrev(self: *Dwarf) !void { |
| 1619 | 1619 | DW.AT.encoding, |
| 1620 | 1620 | DW.FORM.data1, |
| 1621 | 1621 | DW.AT.byte_size, |
| 1622 | | DW.FORM.data1, |
| 1622 | DW.FORM.udata, |
| 1623 | 1623 | DW.AT.name, |
| 1624 | 1624 | DW.FORM.string, |
| 1625 | 1625 | 0, |
| ... | ... | @@ -1635,7 +1635,7 @@ pub fn writeDbgAbbrev(self: *Dwarf) !void { |
| 1635 | 1635 | DW.TAG.structure_type, |
| 1636 | 1636 | DW.CHILDREN.yes, // header |
| 1637 | 1637 | DW.AT.byte_size, |
| 1638 | | DW.FORM.sdata, |
| 1638 | DW.FORM.udata, |
| 1639 | 1639 | DW.AT.name, |
| 1640 | 1640 | DW.FORM.string, |
| 1641 | 1641 | 0, |
| ... | ... | @@ -1648,14 +1648,14 @@ pub fn writeDbgAbbrev(self: *Dwarf) !void { |
| 1648 | 1648 | DW.AT.type, |
| 1649 | 1649 | DW.FORM.ref4, |
| 1650 | 1650 | DW.AT.data_member_location, |
| 1651 | | DW.FORM.sdata, |
| 1651 | DW.FORM.udata, |
| 1652 | 1652 | 0, |
| 1653 | 1653 | 0, // table sentinel |
| 1654 | 1654 | @enumToInt(AbbrevKind.enum_type), |
| 1655 | 1655 | DW.TAG.enumeration_type, |
| 1656 | 1656 | DW.CHILDREN.yes, // header |
| 1657 | 1657 | DW.AT.byte_size, |
| 1658 | | DW.FORM.sdata, |
| 1658 | DW.FORM.udata, |
| 1659 | 1659 | DW.AT.name, |
| 1660 | 1660 | DW.FORM.string, |
| 1661 | 1661 | 0, |
| ... | ... | @@ -1673,7 +1673,7 @@ pub fn writeDbgAbbrev(self: *Dwarf) !void { |
| 1673 | 1673 | DW.TAG.union_type, |
| 1674 | 1674 | DW.CHILDREN.yes, // header |
| 1675 | 1675 | DW.AT.byte_size, |
| 1676 | | DW.FORM.sdata, |
| 1676 | DW.FORM.udata, |
| 1677 | 1677 | DW.AT.name, |
| 1678 | 1678 | DW.FORM.string, |
| 1679 | 1679 | 0, |
| ... | ... | @@ -2628,7 +2628,7 @@ fn addDbgInfoErrorSet( |
| 2628 | 2628 | |
| 2629 | 2629 | // DW.AT.enumeration_type |
| 2630 | 2630 | try dbg_info_buffer.append(@enumToInt(AbbrevKind.enum_type)); |
| 2631 | | // DW.AT.byte_size, DW.FORM.sdata |
| 2631 | // DW.AT.byte_size, DW.FORM.udata |
| 2632 | 2632 | const abi_size = Type.anyerror.abiSize(target); |
| 2633 | 2633 | try leb128.writeULEB128(dbg_info_buffer.writer(), abi_size); |
| 2634 | 2634 | // DW.AT.name, DW.FORM.string |