authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-05-23 22:10:50+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-05-24 15:34:52-07:00
logb42100c70fc306c6d6f69a55e9225a9a91e363ef
tree7654e6bced1d96b3d533d6c92f6ef67a097d866e
parentcd59b8277d018a3418267b9fa0c219debdff5ca3

dwarf: update abbrev info generation for new error union layout


2 files changed, 6 insertions(+), 5 deletions(-)

src/arch/x86_64/CodeGen.zig-1
...@@ -4377,7 +4377,6 @@ fn genVarDbgInfo(...@@ -4377,7 +4377,6 @@ fn genVarDbgInfo(
4377fn addDbgInfoTypeReloc(self: *Self, ty: Type) !void {4377fn addDbgInfoTypeReloc(self: *Self, ty: Type) !void {
4378 switch (self.debug_output) {4378 switch (self.debug_output) {
4379 .dwarf => |dw| {4379 .dwarf => |dw| {
4380 assert(ty.hasRuntimeBits());
4381 const dbg_info = &dw.dbg_info;4380 const dbg_info = &dw.dbg_info;
4382 const index = dbg_info.items.len;4381 const index = dbg_info.items.len;
4383 try dbg_info.resize(index + 4); // DW.AT.type, DW.FORM.ref44382 try dbg_info.resize(index + 4); // DW.AT.type, DW.FORM.ref4
src/link/Dwarf.zig+6-4
...@@ -498,9 +498,11 @@ pub const DeclState = struct {...@@ -498,9 +498,11 @@ pub const DeclState = struct {
498 .ErrorUnion => {498 .ErrorUnion => {
499 const error_ty = ty.errorUnionSet();499 const error_ty = ty.errorUnionSet();
500 const payload_ty = ty.errorUnionPayload();500 const payload_ty = ty.errorUnionPayload();
501 const payload_align = payload_ty.abiAlignment(target);
502 const error_align = Type.anyerror.abiAlignment(target);
501 const abi_size = ty.abiSize(target);503 const abi_size = ty.abiSize(target);
502 const abi_align = ty.abiAlignment(target);504 const payload_off = if (error_align >= payload_align) Type.anyerror.abiSize(target) else 0;
503 const payload_off = mem.alignForwardGeneric(u64, error_ty.abiSize(target), abi_align);505 const error_off = if (error_align >= payload_align) 0 else payload_ty.abiSize(target);
504506
505 // DW.AT.structure_type507 // DW.AT.structure_type
506 try dbg_info_buffer.append(@enumToInt(AbbrevKind.struct_type));508 try dbg_info_buffer.append(@enumToInt(AbbrevKind.struct_type));
...@@ -534,7 +536,7 @@ pub const DeclState = struct {...@@ -534,7 +536,7 @@ pub const DeclState = struct {
534 try dbg_info_buffer.resize(index + 4);536 try dbg_info_buffer.resize(index + 4);
535 try self.addTypeReloc(atom, error_ty, @intCast(u32, index), null);537 try self.addTypeReloc(atom, error_ty, @intCast(u32, index), null);
536 // DW.AT.data_member_location, DW.FORM.sdata538 // DW.AT.data_member_location, DW.FORM.sdata
537 try dbg_info_buffer.append(0);539 try leb128.writeULEB128(dbg_info_buffer.writer(), error_off);
538540
539 // DW.AT.structure_type delimit children541 // DW.AT.structure_type delimit children
540 try dbg_info_buffer.append(0);542 try dbg_info_buffer.append(0);
...@@ -2293,7 +2295,7 @@ fn addDbgInfoErrorSet(...@@ -2293,7 +2295,7 @@ fn addDbgInfoErrorSet(
2293 // DW.AT.enumeration_type2295 // DW.AT.enumeration_type
2294 try dbg_info_buffer.append(@enumToInt(AbbrevKind.enum_type));2296 try dbg_info_buffer.append(@enumToInt(AbbrevKind.enum_type));
2295 // DW.AT.byte_size, DW.FORM.sdata2297 // DW.AT.byte_size, DW.FORM.sdata
2296 const abi_size = ty.abiSize(target);2298 const abi_size = Type.anyerror.abiSize(target);
2297 try leb128.writeULEB128(dbg_info_buffer.writer(), abi_size);2299 try leb128.writeULEB128(dbg_info_buffer.writer(), abi_size);
2298 // DW.AT.name, DW.FORM.string2300 // DW.AT.name, DW.FORM.string
2299 const name = try ty.nameAllocArena(arena, module);2301 const name = try ty.nameAllocArena(arena, module);