diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2022-05-23 22:10:50 +0200 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-05-24 15:34:52 -0700 |
| commit | b42100c70fc306c6d6f69a55e9225a9a91e363ef (patch) | |
| tree | 7654e6bced1d96b3d533d6c92f6ef67a097d866e /src | |
| parent | cd59b8277d018a3418267b9fa0c219debdff5ca3 (diff) | |
| download | zig-b42100c70fc306c6d6f69a55e9225a9a91e363ef.tar.gz zig-b42100c70fc306c6d6f69a55e9225a9a91e363ef.zip | |
dwarf: update abbrev info generation for new error union layout
Diffstat (limited to 'src')
| -rw-r--r-- | src/arch/x86_64/CodeGen.zig | 1 | ||||
| -rw-r--r-- | src/link/Dwarf.zig | 10 |
2 files changed, 6 insertions, 5 deletions
diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index eeb4cab04f..68c8d3449b 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -4377,7 +4377,6 @@ fn genVarDbgInfo( fn addDbgInfoTypeReloc(self: *Self, ty: Type) !void { switch (self.debug_output) { .dwarf => |dw| { - assert(ty.hasRuntimeBits()); const dbg_info = &dw.dbg_info; const index = dbg_info.items.len; try dbg_info.resize(index + 4); // DW.AT.type, DW.FORM.ref4 diff --git a/src/link/Dwarf.zig b/src/link/Dwarf.zig index a204dd91ae..61bec1f880 100644 --- a/src/link/Dwarf.zig +++ b/src/link/Dwarf.zig @@ -498,9 +498,11 @@ pub const DeclState = struct { .ErrorUnion => { const error_ty = ty.errorUnionSet(); const payload_ty = ty.errorUnionPayload(); + const payload_align = payload_ty.abiAlignment(target); + const error_align = Type.anyerror.abiAlignment(target); const abi_size = ty.abiSize(target); - const abi_align = ty.abiAlignment(target); - const payload_off = mem.alignForwardGeneric(u64, error_ty.abiSize(target), abi_align); + const payload_off = if (error_align >= payload_align) Type.anyerror.abiSize(target) else 0; + const error_off = if (error_align >= payload_align) 0 else payload_ty.abiSize(target); // DW.AT.structure_type try dbg_info_buffer.append(@enumToInt(AbbrevKind.struct_type)); @@ -534,7 +536,7 @@ pub const DeclState = struct { try dbg_info_buffer.resize(index + 4); try self.addTypeReloc(atom, error_ty, @intCast(u32, index), null); // DW.AT.data_member_location, DW.FORM.sdata - try dbg_info_buffer.append(0); + try leb128.writeULEB128(dbg_info_buffer.writer(), error_off); // DW.AT.structure_type delimit children try dbg_info_buffer.append(0); @@ -2293,7 +2295,7 @@ fn addDbgInfoErrorSet( // DW.AT.enumeration_type try dbg_info_buffer.append(@enumToInt(AbbrevKind.enum_type)); // DW.AT.byte_size, DW.FORM.sdata - const abi_size = ty.abiSize(target); + const abi_size = Type.anyerror.abiSize(target); try leb128.writeULEB128(dbg_info_buffer.writer(), abi_size); // DW.AT.name, DW.FORM.string const name = try ty.nameAllocArena(arena, module); |
