authorgravatar for jonathan.haehne@hotmail.comTau <jonathan.haehne@hotmail.com> 2024-06-28 18:01:55+02:00
committergravatar for jonathan.haehne@hotmail.comTau <jonathan.haehne@hotmail.com> 2024-07-19 17:51:38+02:00
log177b3359a16016caf080ff95ba4b9359251d04b8
tree0f384209e59eca1af6ef54b3e8321546e7741973
parent52e4cdb45e2bbf6b8a220475190a76c9a392fa6a

llvm: Do not generate static member definitions

They were not helping LLDB and actively throwing off GDB. Also: clean up some llvm.Builder and llvm.ir definitions that are no longer necessary.

3 files changed, 45 insertions(+), 126 deletions(-)

src/codegen/llvm.zig+33-63
......@@ -2444,6 +2444,8 @@ pub const Object = struct {
24442444 if (decl.kind != .named) continue;
24452445 if (decl.analysis != .complete) continue;
24462446
2447 const decl_line = 0;
2448
24472449 if (decl.val.typeOf(zcu).ip_index == .type_type) {
24482450 const nested_type = decl.val.toType();
24492451 // If this decl is the owner of the type, it will
......@@ -2465,52 +2467,10 @@ pub const Object = struct {
24652467 try o.builder.metadataString(decl_name),
24662468 try o.getDebugFile(namespace.fileScope(zcu)),
24672469 fwd_ref,
2468 0, // Line
2470 decl_line,
24692471 try o.lowerDebugType(nested_type, false),
24702472 0, // Align
24712473 ));
2472 } else if (decl.val.getVariable(zcu)) |v| {
2473 // Imitate a C++ static member variable since neither
2474 // GDB or LLDB can really cope with regular variables
2475 // directly inside a struct type.
2476
2477 const vglobal = (o.decl_map.get(decl_id) orelse continue).ptr(&o.builder);
2478
2479 const linkage_name = try o.builder.metadataStringFromStrtabString(vglobal.kind.variable.name(&o.builder));
2480 const var_name = try o.builder.metadataString(decl.name.toSlice(ip));
2481 const var_type = try o.lowerDebugType(Type.fromInterned(v.ty), false);
2482 const debug_file = try o.getDebugFile(namespace.fileScope(zcu));
2483 const debug_line = decl.navSrcLine(zcu) + 1;
2484
2485 const static_member = try o.builder.debugStaticMemberType(
2486 var_name,
2487 debug_file,
2488 fwd_ref,
2489 debug_line,
2490 var_type,
2491 );
2492 fields.appendAssumeCapacity(static_member);
2493
2494 const debug_global_var = try o.builder.debugGlobalVar(
2495 var_name,
2496 linkage_name,
2497 debug_file,
2498 debug_file,
2499 debug_line,
2500 var_type,
2501 vglobal.kind.variable,
2502 static_member,
2503 .internal,
2504 );
2505
2506 const debug_expression = try o.builder.debugExpression(&.{});
2507
2508 const resolved_var = try o.builder.debugGlobalVarExpression(
2509 debug_global_var,
2510 debug_expression,
2511 );
2512 vglobal.dbg = resolved_var;
2513 try o.debug_globals.append(o.gpa, resolved_var);
25142474 }
25152475 }
25162476 }
......@@ -4778,32 +4738,42 @@ pub const DeclGen = struct {
47784738 const debug_file = try o.getDebugFile(file_scope);
47794739
47804740 const linkage_name = try o.builder.metadataStringFromStrtabString(variable_index.name(&o.builder));
4741 const is_internal_linkage = !decl.isExtern(zcu);
4742
4743 const ty = try o.lowerDebugType(decl.typeOf(zcu), true);
4744 const debug_global_var = try o.builder.debugGlobalVar(
4745 linkage_name,
4746 linkage_name,
4747 debug_file,
4748 debug_file,
4749 line_number,
4750 ty,
4751 variable_index,
4752 is_internal_linkage,
4753 );
4754 if (is_internal_linkage) {
4755 const name = try o.builder.metadataString(decl.name.toSlice(ip));
4756 const debug_scope = try o.namespaceToDebugScope(decl.src_namespace);
47814757
4782 if (!decl.isExtern(zcu)) {
4783 // Make it a static member variable, which is resolved later in genNamespaces.
4784 _ = try o.namespaceToDebugScope(decl.src_namespace);
4785 } else {
4786 const debug_global_var = try o.builder.debugGlobalVar(
4787 linkage_name,
4788 linkage_name,
4789 debug_file,
4758 const import = try o.builder.debugImportDeclaration(
4759 name,
47904760 debug_file,
4761 debug_scope,
47914762 line_number,
4792 try o.lowerDebugType(decl.typeOf(zcu), true),
4793 variable_index,
4794 .none,
4795 .external,
4796 );
4797 const debug_expression = try o.builder.debugExpression(&.{});
4798
4799 const debug_global_var_expression = try o.builder.debugGlobalVarExpression(
48004763 debug_global_var,
4801 debug_expression,
48024764 );
4803
4804 variable_index.setGlobalVariableExpression(debug_global_var_expression, &o.builder);
4805 try o.debug_globals.append(o.gpa, debug_global_var_expression);
4765 try o.debug_imports.append(o.gpa, import);
48064766 }
4767
4768 const debug_expression = try o.builder.debugExpression(&.{});
4769
4770 const debug_global_var_expression = try o.builder.debugGlobalVarExpression(
4771 debug_global_var,
4772 debug_expression,
4773 );
4774
4775 variable_index.setGlobalVariableExpression(debug_global_var_expression, &o.builder);
4776 try o.debug_globals.append(o.gpa, debug_global_var_expression);
48074777 }
48084778 }
48094779
src/codegen/llvm/Builder.zig+10-59
......@@ -7651,7 +7651,6 @@ pub const Metadata = enum(u32) {
76517651 composite_vector_type,
76527652 derived_pointer_type,
76537653 derived_member_type,
7654 derived_static_member_type,
76557654 derived_typedef,
76567655 imported_declaration,
76577656 subroutine_type,
......@@ -7666,7 +7665,6 @@ pub const Metadata = enum(u32) {
76667665 parameter,
76677666 global_var,
76687667 @"global_var local",
7669 @"global_var decl",
76707668 global_var_expression,
76717669 constant,
76727670
......@@ -7700,7 +7698,6 @@ pub const Metadata = enum(u32) {
77007698 .composite_vector_type,
77017699 .derived_pointer_type,
77027700 .derived_member_type,
7703 .derived_static_member_type,
77047701 .derived_typedef,
77057702 .imported_declaration,
77067703 .subroutine_type,
......@@ -7714,7 +7711,6 @@ pub const Metadata = enum(u32) {
77147711 .parameter,
77157712 .global_var,
77167713 .@"global_var local",
7717 .@"global_var decl",
77187714 .global_var_expression,
77197715 => false,
77207716 };
......@@ -8008,12 +8004,6 @@ pub const Metadata = enum(u32) {
80088004 };
80098005
80108006 pub const GlobalVar = struct {
8011 pub const Options = enum {
8012 internal,
8013 internal_decl,
8014 external,
8015 };
8016
80178007 name: MetadataString,
80188008 linkage_name: MetadataString,
80198009 file: Metadata,
......@@ -8021,7 +8011,6 @@ pub const Metadata = enum(u32) {
80218011 line: u32,
80228012 ty: Metadata,
80238013 variable: Variable.Index,
8024 declaration: Metadata,
80258014 };
80268015
80278016 pub const GlobalVarExpression = struct {
......@@ -10123,7 +10112,6 @@ pub fn printUnbuffered(
1012310112 },
1012410113 .derived_pointer_type,
1012510114 .derived_member_type,
10126 .derived_static_member_type,
1012710115 .derived_typedef,
1012810116 => |kind| {
1012910117 const extra = self.metadataExtraData(Metadata.DerivedType, metadata_item.data);
......@@ -10134,7 +10122,7 @@ pub fn printUnbuffered(
1013410122 DW_TAG_typedef,
1013510123 }, switch (kind) {
1013610124 .derived_pointer_type => .DW_TAG_pointer_type,
10137 .derived_member_type, .derived_static_member_type => .DW_TAG_member,
10125 .derived_member_type => .DW_TAG_member,
1013810126 .derived_typedef => .DW_TAG_typedef,
1013910127 else => unreachable,
1014010128 }),
......@@ -10152,7 +10140,7 @@ pub fn printUnbuffered(
1015210140 0 => null,
1015310141 else => |bit_offset| bit_offset,
1015410142 },
10155 .flags = null, // TODO staticness
10143 .flags = null,
1015610144 .extraData = null,
1015710145 .dwarfAddressSpace = null,
1015810146 .annotations = null,
......@@ -10288,7 +10276,6 @@ pub fn printUnbuffered(
1028810276 },
1028910277 .global_var,
1029010278 .@"global_var local",
10291 .@"global_var decl",
1029210279 => |kind| {
1029310280 const extra = self.metadataExtraData(Metadata.GlobalVar, metadata_item.data);
1029410281 try metadata_formatter.specialized(.@"distinct !", .DIGlobalVariable, .{
......@@ -10299,7 +10286,7 @@ pub fn printUnbuffered(
1029910286 .line = extra.line,
1030010287 .type = extra.ty,
1030110288 .isLocal = kind != .global_var,
10302 .isDefinition = kind != .@"global_var decl",
10289 .isDefinition = true,
1030310290 .declaration = null,
1030410291 .templateParams = null,
1030510292 .@"align" = null,
......@@ -11991,28 +11978,6 @@ pub fn debugPointerType(
1199111978 );
1199211979}
1199311980
11994pub fn debugStaticMemberType(
11995 self: *Builder,
11996 name: MetadataString,
11997 file: Metadata,
11998 scope: Metadata,
11999 line: u32,
12000 underlying_type: Metadata,
12001) Allocator.Error!Metadata {
12002 try self.ensureUnusedMetadataCapacity(1, Metadata.DerivedType, 0);
12003 return self.debugMemberTypeAssumeCapacity(
12004 name,
12005 file,
12006 scope,
12007 line,
12008 underlying_type,
12009 0,
12010 0,
12011 0,
12012 true,
12013 );
12014}
12015
1201611981pub fn debugMemberType(
1201711982 self: *Builder,
1201811983 name: MetadataString,
......@@ -12034,7 +11999,6 @@ pub fn debugMemberType(
1203411999 size_in_bits,
1203512000 align_in_bits,
1203612001 offset_in_bits,
12037 false,
1203812002 );
1203912003}
1204012004
......@@ -12175,8 +12139,7 @@ pub fn debugGlobalVar(
1217512139 line: u32,
1217612140 ty: Metadata,
1217712141 variable: Variable.Index,
12178 declaration: Metadata,
12179 options: Metadata.GlobalVar.Options,
12142 internal: bool,
1218012143) Allocator.Error!Metadata {
1218112144 try self.ensureUnusedMetadataCapacity(1, Metadata.GlobalVar, 0);
1218212145 return self.debugGlobalVarAssumeCapacity(
......@@ -12187,8 +12150,7 @@ pub fn debugGlobalVar(
1218712150 line,
1218812151 ty,
1218912152 variable,
12190 declaration,
12191 options,
12153 internal,
1219212154 );
1219312155}
1219412156
......@@ -12617,10 +12579,9 @@ fn debugMemberTypeAssumeCapacity(
1261712579 size_in_bits: u64,
1261812580 align_in_bits: u64,
1261912581 offset_in_bits: u64,
12620 static: bool,
1262112582) Metadata {
1262212583 assert(!self.strip);
12623 return self.metadataSimpleAssumeCapacity(if (static) .derived_static_member_type else .derived_member_type, Metadata.DerivedType{
12584 return self.metadataSimpleAssumeCapacity(.derived_member_type, Metadata.DerivedType{
1262412585 .name = name,
1262512586 .file = file,
1262612587 .scope = scope,
......@@ -12888,16 +12849,11 @@ fn debugGlobalVarAssumeCapacity(
1288812849 line: u32,
1288912850 ty: Metadata,
1289012851 variable: Variable.Index,
12891 declaration: Metadata,
12892 options: Metadata.GlobalVar.Options,
12852 internal: bool,
1289312853) Metadata {
1289412854 assert(!self.strip);
1289512855 return self.metadataDistinctAssumeCapacity(
12896 switch (options) {
12897 .internal => .@"global_var local",
12898 .internal_decl => .@"global_var decl",
12899 .external => .global_var,
12900 },
12856 if (internal) .@"global_var local" else .global_var,
1290112857 Metadata.GlobalVar{
1290212858 .name = name,
1290312859 .linkage_name = linkage_name,
......@@ -12906,7 +12862,6 @@ fn debugGlobalVarAssumeCapacity(
1290612862 .line = line,
1290712863 .ty = ty,
1290812864 .variable = variable,
12909 .declaration = declaration,
1291012865 },
1291112866 );
1291212867}
......@@ -14024,14 +13979,13 @@ pub fn toBitcode(self: *Builder, allocator: Allocator) bitcode_writer.Error![]co
1402413979 },
1402513980 .derived_pointer_type,
1402613981 .derived_member_type,
14027 .derived_static_member_type,
1402813982 .derived_typedef,
1402913983 => |kind| {
1403013984 const extra = self.metadataExtraData(Metadata.DerivedType, data);
1403113985 try metadata_block.writeAbbrevAdapted(MetadataBlock.DerivedType{
1403213986 .tag = switch (kind) {
1403313987 .derived_pointer_type => DW.TAG.pointer_type,
14034 .derived_member_type, .derived_static_member_type => DW.TAG.member,
13988 .derived_member_type => DW.TAG.member,
1403513989 .derived_typedef => DW.TAG.typedef,
1403613990 else => unreachable,
1403713991 },
......@@ -14044,7 +13998,7 @@ pub fn toBitcode(self: *Builder, allocator: Allocator) bitcode_writer.Error![]co
1404413998 .align_in_bits = extra.bitAlign(),
1404513999 .offset_in_bits = extra.bitOffset(),
1404614000 .flags = .{
14047 .StaticMember = kind == .derived_static_member_type,
14001 .StaticMember = false,
1404814002 },
1404914003 }, metadata_adapter);
1405014004 },
......@@ -14184,7 +14138,6 @@ pub fn toBitcode(self: *Builder, allocator: Allocator) bitcode_writer.Error![]co
1418414138 },
1418514139 .global_var,
1418614140 .@"global_var local",
14187 .@"global_var decl",
1418814141 => |kind| {
1418914142 const extra = self.metadataExtraData(Metadata.GlobalVar, data);
1419014143 try metadata_block.writeAbbrevAdapted(MetadataBlock.GlobalVar{
......@@ -14195,8 +14148,6 @@ pub fn toBitcode(self: *Builder, allocator: Allocator) bitcode_writer.Error![]co
1419514148 .line = extra.line,
1419614149 .ty = extra.ty,
1419714150 .local = kind == .@"global_var local",
14198 .defined = kind != .@"global_var decl",
14199 .declaration = extra.declaration,
1420014151 }, metadata_adapter);
1420114152 },
1420214153 .global_var_expression => {
src/codegen/llvm/ir.zig+2-4
......@@ -1026,8 +1026,8 @@ pub const MetadataBlock = struct {
10261026 LineAbbrev, // line
10271027 MetadataAbbrev, // type
10281028 .{ .fixed = 1 }, // local
1029 .{ .fixed = 1 }, // defined
1030 MetadataAbbrev, // static data members declaration
1029 .{ .literal = 1 }, // defined
1030 .{ .literal = 0 }, // static data members declaration
10311031 .{ .literal = 0 }, // template params
10321032 .{ .literal = 0 }, // align in bits
10331033 .{ .literal = 0 }, // annotations
......@@ -1040,8 +1040,6 @@ pub const MetadataBlock = struct {
10401040 line: u32,
10411041 ty: Builder.Metadata,
10421042 local: bool,
1043 defined: bool,
1044 declaration: Builder.Metadata,
10451043 };
10461044
10471045 pub const GlobalVarExpression = struct {