| ... | @@ -468,6 +468,7 @@ pub fn commitDeclDebugInfo( | ... | @@ -468,6 +468,7 @@ pub fn commitDeclDebugInfo( |
| 468 | value_ptr.off = @intCast(u32, dbg_info_buffer.items.len); | 468 | value_ptr.off = @intCast(u32, dbg_info_buffer.items.len); |
| 469 | try self.addDbgInfoType( | 469 | try self.addDbgInfoType( |
| 470 | dbg_type_arena.allocator(), | 470 | dbg_type_arena.allocator(), |
| | 471 | module, |
| 471 | ty, | 472 | ty, |
| 472 | dbg_info_buffer, | 473 | dbg_info_buffer, |
| 473 | dbg_info_type_relocs, | 474 | dbg_info_type_relocs, |
| ... | @@ -771,6 +772,7 @@ pub fn freeDecl(self: *Dwarf, decl: *Module.Decl) void { | ... | @@ -771,6 +772,7 @@ pub fn freeDecl(self: *Dwarf, decl: *Module.Decl) void { |
| 771 | fn addDbgInfoType( | 772 | fn addDbgInfoType( |
| 772 | self: *Dwarf, | 773 | self: *Dwarf, |
| 773 | arena: Allocator, | 774 | arena: Allocator, |
| | 775 | module: *Module, |
| 774 | ty: Type, | 776 | ty: Type, |
| 775 | dbg_info_buffer: *std.ArrayList(u8), | 777 | dbg_info_buffer: *std.ArrayList(u8), |
| 776 | dbg_info_type_relocs: *File.DbgInfoTypeRelocsTable, | 778 | dbg_info_type_relocs: *File.DbgInfoTypeRelocsTable, |
| ... | @@ -1095,6 +1097,32 @@ fn addDbgInfoType( | ... | @@ -1095,6 +1097,32 @@ fn addDbgInfoType( |
| 1095 | try dbg_info_buffer.append(0); | 1097 | try dbg_info_buffer.append(0); |
| 1096 | } | 1098 | } |
| 1097 | }, | 1099 | }, |
| | 1100 | .ErrorSet => { |
| | 1101 | // DW.AT.enumeration_type |
| | 1102 | try dbg_info_buffer.append(abbrev_enum_type); |
| | 1103 | // DW.AT.byte_size, DW.FORM.sdata |
| | 1104 | const abi_size = ty.abiSize(target); |
| | 1105 | try leb128.writeULEB128(dbg_info_buffer.writer(), abi_size); |
| | 1106 | // DW.AT.name, DW.FORM.string |
| | 1107 | const name = try ty.nameAllocArena(arena, target); |
| | 1108 | try dbg_info_buffer.writer().print("{s}\x00", .{name}); |
| | 1109 | |
| | 1110 | const error_names = if (ty.isAnyError()) module.error_name_list.items else ty.errorSetNames(); |
| | 1111 | for (error_names) |error_name| { |
| | 1112 | const kv = module.getErrorValue(error_name) catch unreachable; |
| | 1113 | // DW.AT.enumerator |
| | 1114 | try dbg_info_buffer.ensureUnusedCapacity(error_name.len + 2 + @sizeOf(u64)); |
| | 1115 | dbg_info_buffer.appendAssumeCapacity(abbrev_enum_variant); |
| | 1116 | // DW.AT.name, DW.FORM.string |
| | 1117 | dbg_info_buffer.appendSliceAssumeCapacity(error_name); |
| | 1118 | dbg_info_buffer.appendAssumeCapacity(0); |
| | 1119 | // DW.AT.const_value, DW.FORM.data8 |
| | 1120 | mem.writeInt(u64, dbg_info_buffer.addManyAsArrayAssumeCapacity(8), kv.value, target_endian); |
| | 1121 | } |
| | 1122 | |
| | 1123 | // DW.AT.enumeration_type delimit children |
| | 1124 | try dbg_info_buffer.append(0); |
| | 1125 | }, |
| 1098 | else => { | 1126 | else => { |
| 1099 | log.debug("TODO implement .debug_info for type '{}'", .{ty.fmtDebug()}); | 1127 | log.debug("TODO implement .debug_info for type '{}'", .{ty.fmtDebug()}); |
| 1100 | try dbg_info_buffer.append(abbrev_pad1); | 1128 | try dbg_info_buffer.append(abbrev_pad1); |