Produce better pointer and slice debug info names

This commit is contained in:
David Gonzalez Martin 2024-06-17 14:31:25 -05:00
parent 11f70a1d9e
commit 53894589ff
3 changed files with 17 additions and 3 deletions

View File

@ -40,6 +40,7 @@ pub extern fn NativityLLVMDebugInfoBuilderCreateReplaceableCompositeType(builder
pub extern fn NativityLLVMDebugInfoBuilderCreateMemberType(builder: *LLVM.DebugInfo.Builder, scope: ?*LLVM.DebugInfo.Scope, name_ptr: [*]const u8, name_len: usize, file: ?*LLVM.DebugInfo.File, line_number: c_uint, bit_size: u64, alignment: u32, bit_offset: u64, flags: LLVM.DebugInfo.Node.Flags, type: *LLVM.DebugInfo.Type) *LLVM.DebugInfo.Type.Derived;
pub extern fn NativityLLVMDebugInfoBuilderCreateBitfieldMemberType(builder: *LLVM.DebugInfo.Builder, scope: *LLVM.DebugInfo.Scope, name_pointer: [*]const u8, name_len: usize, file: *LLVM.DebugInfo.File, line_number: c_uint, bit_size: u64, bit_offset: u64, storage_bit_offset: u64, flags: LLVM.DebugInfo.Node.Flags, type: *LLVM.DebugInfo.Type) *LLVM.DebugInfo.Type.Derived;
pub extern fn NativityLLVMDebugInfoBuilderCompositeTypeReplaceTypes(builder: *LLVM.DebugInfo.Builder, type: *LLVM.DebugInfo.Type.Composite, element_type_ptr: [*]const *LLVM.DebugInfo.Type, element_type_count: usize) void;
pub extern fn NativityLLLVMDITypeGetName(type: *LLVM.DebugInfo.Type, name_pointer: *[*]const u8, name_length: *usize) void;
pub extern fn NativityLLLVMDITypeIsResolved(type: *LLVM.DebugInfo.Type) bool;
pub extern fn NativityLLVMDebugInfoBuilderFinalizeSubprogram(builder: *LLVM.DebugInfo.Builder, subprogram: *LLVM.DebugInfo.Subprogram, function: *LLVM.Value.Constant.Function) void;
pub extern fn NativityLLVMDebugInfoBuilderFinalize(builder: *LLVM.DebugInfo.Builder) void;

View File

@ -6592,8 +6592,10 @@ fn llvm_get_debug_type(thread: *Thread, builder: *LLVM.DebugInfo.Builder, ty: *T
const element_type = llvm_get_debug_type(thread, builder, typed_pointer.descriptor.pointee);
const alignment = 3;
const pointer_width = @bitSizeOf(usize);
// TODO:
const pointer_type = builder.createPointerType(element_type, pointer_width, alignment, "ptr", "ptr".len);
var element_name: []const u8 = undefined;
element_type.getName(&element_name.ptr, &element_name.len);
const pointer_name = thread.arena.join(&.{"*", element_name}) catch unreachable;
const pointer_type = builder.createPointerType(element_type, pointer_width, alignment, pointer_name.ptr, pointer_name.len);
break :block pointer_type.toType();
},
.@"struct" => block: {
@ -6773,7 +6775,9 @@ fn llvm_get_debug_type(thread: *Thread, builder: *LLVM.DebugInfo.Builder, ty: *T
.all_calls_described = false,
};
const file = file_struct.file;
const name = "[]";
var element_name: []const u8 = undefined;
element_type.getName(&element_name.ptr, &element_name.len);
const name = thread.arena.join(&.{"[]", element_name}) catch unreachable;
const line = 0;
const bitsize = nat_slice_type.type.size * 8;
@ -10418,6 +10422,7 @@ pub const LLVM = struct {
};
pub const Type = opaque {
const getName = bindings.NativityLLLVMDITypeGetName;
const isResolved = bindings.NativityLLLVMDITypeIsResolved;
fn toScope(this: *@This()) *LLVM.DebugInfo.Scope {
return @ptrCast(this);

View File

@ -174,6 +174,7 @@ extern "C" DIType* NativityLLVMDebugInfoBuilderCreateBasicType(DIBuilder& builde
{
auto name = StringRef(name_ptr, name_len);
auto* type = builder.createBasicType(name, bit_count, dwarf_encoding, flags);
type->getName();
return type;
}
@ -255,6 +256,13 @@ extern "C" bool NativityLLLVMDITypeIsResolved(DIType* type)
return type->isResolved();
}
extern "C" void NativityLLLVMDITypeGetName(DIType& type, const char** name_pointer, size_t* name_length)
{
auto name = type.getName();
*name_pointer = name.data();
*name_length = name.size();
}
extern "C" DISubprogram* NativityLLVMDebugInfoScopeToSubprogram(DIScope* scope)
{
auto* subprogram = dyn_cast<DISubprogram>(scope);