Commit de536e8473
Changed files (2)
src
codegen
src/codegen/llvm/Builder.zig
@@ -13739,6 +13739,25 @@ pub fn toBitcode(self: *Builder, allocator: Allocator) bitcode_writer.Error![]co
try constants_block.end();
}
+ const MetadataKind = enum(u8) {
+ dbg = 0,
+ };
+
+ // METADATA_KIND_BLOCK
+ if (!self.strip) {
+ const MetadataKindBlock = ir.MetadataKindBlock;
+ var metadata_kind_block = try module_block.enterSubBlock(MetadataKindBlock);
+
+ inline for (@typeInfo(MetadataKind).Enum.fields) |field| {
+ try metadata_kind_block.writeAbbrev(MetadataKindBlock.Kind{
+ .id = field.value,
+ .name = field.name,
+ });
+ }
+
+ try metadata_kind_block.end();
+ }
+
const MetadataAdapter = struct {
builder: *const Builder,
constant_adapter: ConstantAdapter,
@@ -14766,6 +14785,23 @@ pub fn toBitcode(self: *Builder, allocator: Allocator) bitcode_writer.Error![]co
try value_symtab_block.end();
}
+ // METADATA_ATTACHMENT_BLOCK
+ if (!self.strip) blk: {
+ const dbg = func.global.ptrConst(self).dbg;
+
+ if (dbg == .none) break :blk;
+
+ const MetadataAttachmentBlock = ir.MetadataAttachmentBlock;
+ var metadata_attach_block = try function_block.enterSubBlock(MetadataAttachmentBlock);
+
+ try metadata_attach_block.writeAbbrev(MetadataAttachmentBlock.AttachmentSingle{
+ .id = @intFromEnum(MetadataKind.dbg),
+ .metadata = @enumFromInt(metadata_adapter.getMetadataIndex(dbg) - 1),
+ });
+
+ try metadata_attach_block.end();
+ }
+
try function_block.end();
}
}
src/codegen/llvm/ir.zig
@@ -580,6 +580,42 @@ pub const Constants = struct {
};
};
+pub const MetadataKindBlock = struct {
+ pub const id = 22;
+
+ pub const abbrevs = [_]type{
+ Kind,
+ };
+
+ pub const Kind = struct {
+ pub const ops = [_]AbbrevOp{
+ .{ .literal = 6 },
+ .{ .vbr = 4 },
+ .{ .array_fixed = 8 },
+ };
+ id: u32,
+ name: []const u8,
+ };
+};
+
+pub const MetadataAttachmentBlock = struct {
+ pub const id = 16;
+
+ pub const abbrevs = [_]type{
+ AttachmentSingle,
+ };
+
+ pub const AttachmentSingle = struct {
+ pub const ops = [_]AbbrevOp{
+ .{ .literal = 11 },
+ .{ .vbr = 4 },
+ MetadataAbbrev,
+ };
+ id: u32,
+ metadata: Builder.Metadata,
+ };
+};
+
pub const MetadataBlock = struct {
pub const id = 15;