Produce better pointer and slice debug info names
This commit is contained in:
parent
11f70a1d9e
commit
53894589ff
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user