aboutsummaryrefslogtreecommitdiff
path: root/src/link/Dwarf.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/link/Dwarf.zig')
-rw-r--r--src/link/Dwarf.zig28
1 files changed, 13 insertions, 15 deletions
diff --git a/src/link/Dwarf.zig b/src/link/Dwarf.zig
index 52d6550bcb..70654662b4 100644
--- a/src/link/Dwarf.zig
+++ b/src/link/Dwarf.zig
@@ -341,23 +341,22 @@ pub const DeclState = struct {
try leb128.writeULEB128(dbg_info_buffer.writer(), field_off);
}
},
- .struct_type => |struct_type| s: {
- const struct_obj = mod.structPtrUnwrap(struct_type.index) orelse break :s;
+ .struct_type => |struct_type| {
// DW.AT.name, DW.FORM.string
try ty.print(dbg_info_buffer.writer(), mod);
try dbg_info_buffer.append(0);
- if (struct_obj.layout == .Packed) {
+ if (struct_type.layout == .Packed) {
log.debug("TODO implement .debug_info for packed structs", .{});
break :blk;
}
for (
- struct_obj.fields.keys(),
- struct_obj.fields.values(),
- 0..,
- ) |field_name_ip, field, field_index| {
- if (!field.ty.hasRuntimeBits(mod)) continue;
+ struct_type.field_names.get(ip),
+ struct_type.field_types.get(ip),
+ struct_type.offsets.get(ip),
+ ) |field_name_ip, field_ty, field_off| {
+ if (!field_ty.toType().hasRuntimeBits(mod)) continue;
const field_name = ip.stringToSlice(field_name_ip);
// DW.AT.member
try dbg_info_buffer.ensureUnusedCapacity(field_name.len + 2);
@@ -368,9 +367,8 @@ pub const DeclState = struct {
// DW.AT.type, DW.FORM.ref4
var index = dbg_info_buffer.items.len;
try dbg_info_buffer.resize(index + 4);
- try self.addTypeRelocGlobal(atom_index, field.ty, @as(u32, @intCast(index)));
+ try self.addTypeRelocGlobal(atom_index, field_ty.toType(), @intCast(index));
// DW.AT.data_member_location, DW.FORM.udata
- const field_off = ty.structFieldOffset(field_index, mod);
try leb128.writeULEB128(dbg_info_buffer.writer(), field_off);
}
},
@@ -416,8 +414,8 @@ pub const DeclState = struct {
.Union => {
const union_obj = mod.typeToUnion(ty).?;
const layout = mod.getUnionLayout(union_obj);
- const payload_offset = if (layout.tag_align >= layout.payload_align) layout.tag_size else 0;
- const tag_offset = if (layout.tag_align >= layout.payload_align) 0 else layout.payload_size;
+ const payload_offset = if (layout.tag_align.compare(.gte, layout.payload_align)) layout.tag_size else 0;
+ const tag_offset = if (layout.tag_align.compare(.gte, layout.payload_align)) 0 else layout.payload_size;
// TODO this is temporary to match current state of unions in Zig - we don't yet have
// safety checks implemented meaning the implicit tag is not yet stored and generated
// for untagged unions.
@@ -496,11 +494,11 @@ pub const DeclState = struct {
.ErrorUnion => {
const error_ty = ty.errorUnionSet(mod);
const payload_ty = ty.errorUnionPayload(mod);
- const payload_align = if (payload_ty.isNoReturn(mod)) 0 else payload_ty.abiAlignment(mod);
+ const payload_align = if (payload_ty.isNoReturn(mod)) .none else payload_ty.abiAlignment(mod);
const error_align = Type.anyerror.abiAlignment(mod);
const abi_size = ty.abiSize(mod);
- const payload_off = if (error_align >= payload_align) Type.anyerror.abiSize(mod) else 0;
- const error_off = if (error_align >= payload_align) 0 else payload_ty.abiSize(mod);
+ const payload_off = if (error_align.compare(.gte, payload_align)) Type.anyerror.abiSize(mod) else 0;
+ const error_off = if (error_align.compare(.gte, payload_align)) 0 else payload_ty.abiSize(mod);
// DW.AT.structure_type
try dbg_info_buffer.append(@intFromEnum(AbbrevKind.struct_type));