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 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 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 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 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 NativityLLVMDebugInfoBuilderFinalizeSubprogram(builder: *LLVM.DebugInfo.Builder, subprogram: *LLVM.DebugInfo.Subprogram, function: *LLVM.Value.Constant.Function) void;
|
||||||
pub extern fn NativityLLVMDebugInfoBuilderFinalize(builder: *LLVM.DebugInfo.Builder) 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 element_type = llvm_get_debug_type(thread, builder, typed_pointer.descriptor.pointee);
|
||||||
const alignment = 3;
|
const alignment = 3;
|
||||||
const pointer_width = @bitSizeOf(usize);
|
const pointer_width = @bitSizeOf(usize);
|
||||||
// TODO:
|
var element_name: []const u8 = undefined;
|
||||||
const pointer_type = builder.createPointerType(element_type, pointer_width, alignment, "ptr", "ptr".len);
|
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();
|
break :block pointer_type.toType();
|
||||||
},
|
},
|
||||||
.@"struct" => block: {
|
.@"struct" => block: {
|
||||||
@ -6773,7 +6775,9 @@ fn llvm_get_debug_type(thread: *Thread, builder: *LLVM.DebugInfo.Builder, ty: *T
|
|||||||
.all_calls_described = false,
|
.all_calls_described = false,
|
||||||
};
|
};
|
||||||
const file = file_struct.file;
|
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 line = 0;
|
||||||
|
|
||||||
const bitsize = nat_slice_type.type.size * 8;
|
const bitsize = nat_slice_type.type.size * 8;
|
||||||
@ -10418,6 +10422,7 @@ pub const LLVM = struct {
|
|||||||
};
|
};
|
||||||
|
|
||||||
pub const Type = opaque {
|
pub const Type = opaque {
|
||||||
|
const getName = bindings.NativityLLLVMDITypeGetName;
|
||||||
const isResolved = bindings.NativityLLLVMDITypeIsResolved;
|
const isResolved = bindings.NativityLLLVMDITypeIsResolved;
|
||||||
fn toScope(this: *@This()) *LLVM.DebugInfo.Scope {
|
fn toScope(this: *@This()) *LLVM.DebugInfo.Scope {
|
||||||
return @ptrCast(this);
|
return @ptrCast(this);
|
||||||
|
@ -174,6 +174,7 @@ extern "C" DIType* NativityLLVMDebugInfoBuilderCreateBasicType(DIBuilder& builde
|
|||||||
{
|
{
|
||||||
auto name = StringRef(name_ptr, name_len);
|
auto name = StringRef(name_ptr, name_len);
|
||||||
auto* type = builder.createBasicType(name, bit_count, dwarf_encoding, flags);
|
auto* type = builder.createBasicType(name, bit_count, dwarf_encoding, flags);
|
||||||
|
type->getName();
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -255,6 +256,13 @@ extern "C" bool NativityLLLVMDITypeIsResolved(DIType* type)
|
|||||||
return type->isResolved();
|
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)
|
extern "C" DISubprogram* NativityLLVMDebugInfoScopeToSubprogram(DIScope* scope)
|
||||||
{
|
{
|
||||||
auto* subprogram = dyn_cast<DISubprogram>(scope);
|
auto* subprogram = dyn_cast<DISubprogram>(scope);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user