authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2015-12-07 20:07:46-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2015-12-07 20:07:46-07:00
logb66fb607bf00c8ac120f22080bcf48eb05cbc71f
tree480fd5993a44c7cdb5a33181039e9fae1471c2d1
parentf6eecfe5f486b250de33a8129b1c85198be43280

add debugging info for array type


6 files changed, 43 insertions(+), 7 deletions(-)

README.md+1
...@@ -55,6 +55,7 @@ compromises backward compatibility....@@ -55,6 +55,7 @@ compromises backward compatibility.
5555
56### Roadmap56### Roadmap
5757
58 * debugging for variables
58 * structs59 * structs
59 * loops60 * loops
60 * enums61 * enums
src/analyze.cpp+9-3
...@@ -65,8 +65,10 @@ TypeTableEntry *get_pointer_to_type(CodeGen *g, TypeTableEntry *child_type, bool...@@ -65,8 +65,10 @@ TypeTableEntry *get_pointer_to_type(CodeGen *g, TypeTableEntry *child_type, bool
65 entry->type_ref = LLVMPointerType(child_type->type_ref, 0);65 entry->type_ref = LLVMPointerType(child_type->type_ref, 0);
66 buf_resize(&entry->name, 0);66 buf_resize(&entry->name, 0);
67 buf_appendf(&entry->name, "*%s %s", is_const ? "const" : "mut", buf_ptr(&child_type->name));67 buf_appendf(&entry->name, "*%s %s", is_const ? "const" : "mut", buf_ptr(&child_type->name));
68 entry->size_in_bits = g->pointer_size_bytes * 8;
69 entry->align_in_bits = g->pointer_size_bytes * 8;
68 entry->di_type = LLVMZigCreateDebugPointerType(g->dbuilder, child_type->di_type,70 entry->di_type = LLVMZigCreateDebugPointerType(g->dbuilder, child_type->di_type,
69 g->pointer_size_bytes * 8, g->pointer_size_bytes * 8, buf_ptr(&entry->name));71 entry->size_in_bits, entry->align_in_bits, buf_ptr(&entry->name));
70 g->type_table.put(&entry->name, entry);72 g->type_table.put(&entry->name, entry);
71 *parent_pointer = entry;73 *parent_pointer = entry;
72 return entry;74 return entry;
...@@ -81,8 +83,12 @@ static TypeTableEntry *get_array_type(CodeGen *g, TypeTableEntry *child_type, in...@@ -81,8 +83,12 @@ static TypeTableEntry *get_array_type(CodeGen *g, TypeTableEntry *child_type, in
81 TypeTableEntry *entry = new_type_table_entry();83 TypeTableEntry *entry = new_type_table_entry();
82 entry->type_ref = LLVMArrayType(child_type->type_ref, array_size);84 entry->type_ref = LLVMArrayType(child_type->type_ref, array_size);
83 buf_resize(&entry->name, 0);85 buf_resize(&entry->name, 0);
84 buf_appendf(&entry->name, "[%s; %ud]", buf_ptr(&child_type->name), array_size);86 buf_appendf(&entry->name, "[%s; %d]", buf_ptr(&child_type->name), array_size);
85 //entry->di_type = LLVMZigCreateDebugArrayType(g->dbuilder, ..., buf_ptr(&entry->name)); // TODO87
88 entry->size_in_bits = child_type->size_in_bits * array_size;
89 entry->align_in_bits = child_type->align_in_bits;
90 entry->di_type = LLVMZigCreateDebugArrayType(g->dbuilder, entry->size_in_bits,
91 entry->align_in_bits, child_type->di_type, array_size);
8692
87 g->type_table.put(&entry->name, entry);93 g->type_table.put(&entry->name, entry);
88 child_type->arrays_by_size.put(array_size, entry);94 child_type->arrays_by_size.put(array_size, entry);
src/codegen.cpp+14-4
...@@ -789,7 +789,10 @@ static void define_primitive_types(CodeGen *g) {...@@ -789,7 +789,10 @@ static void define_primitive_types(CodeGen *g) {
789 TypeTableEntry *entry = new_type_table_entry();789 TypeTableEntry *entry = new_type_table_entry();
790 entry->type_ref = LLVMInt1Type();790 entry->type_ref = LLVMInt1Type();
791 buf_init_from_str(&entry->name, "bool");791 buf_init_from_str(&entry->name, "bool");
792 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name), 1, 8,792 entry->size_in_bits = 1;
793 entry->align_in_bits = 8;
794 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
795 entry->size_in_bits, entry->align_in_bits,
793 LLVMZigEncoding_DW_ATE_unsigned());796 LLVMZigEncoding_DW_ATE_unsigned());
794 g->type_table.put(&entry->name, entry);797 g->type_table.put(&entry->name, entry);
795 g->builtin_types.entry_bool = entry;798 g->builtin_types.entry_bool = entry;
...@@ -798,7 +801,10 @@ static void define_primitive_types(CodeGen *g) {...@@ -798,7 +801,10 @@ static void define_primitive_types(CodeGen *g) {
798 TypeTableEntry *entry = new_type_table_entry();801 TypeTableEntry *entry = new_type_table_entry();
799 entry->type_ref = LLVMInt8Type();802 entry->type_ref = LLVMInt8Type();
800 buf_init_from_str(&entry->name, "u8");803 buf_init_from_str(&entry->name, "u8");
801 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name), 8, 8,804 entry->size_in_bits = 8;
805 entry->align_in_bits = 8;
806 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
807 entry->size_in_bits, entry->align_in_bits,
802 LLVMZigEncoding_DW_ATE_unsigned());808 LLVMZigEncoding_DW_ATE_unsigned());
803 g->type_table.put(&entry->name, entry);809 g->type_table.put(&entry->name, entry);
804 g->builtin_types.entry_u8 = entry;810 g->builtin_types.entry_u8 = entry;
...@@ -808,7 +814,10 @@ static void define_primitive_types(CodeGen *g) {...@@ -808,7 +814,10 @@ static void define_primitive_types(CodeGen *g) {
808 TypeTableEntry *entry = new_type_table_entry();814 TypeTableEntry *entry = new_type_table_entry();
809 entry->type_ref = LLVMInt32Type();815 entry->type_ref = LLVMInt32Type();
810 buf_init_from_str(&entry->name, "i32");816 buf_init_from_str(&entry->name, "i32");
811 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name), 32, 32,817 entry->size_in_bits = 32;
818 entry->align_in_bits = 32;
819 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
820 entry->size_in_bits, entry->align_in_bits,
812 LLVMZigEncoding_DW_ATE_signed());821 LLVMZigEncoding_DW_ATE_signed());
813 g->type_table.put(&entry->name, entry);822 g->type_table.put(&entry->name, entry);
814 g->builtin_types.entry_i32 = entry;823 g->builtin_types.entry_i32 = entry;
...@@ -817,7 +826,8 @@ static void define_primitive_types(CodeGen *g) {...@@ -817,7 +826,8 @@ static void define_primitive_types(CodeGen *g) {
817 TypeTableEntry *entry = new_type_table_entry();826 TypeTableEntry *entry = new_type_table_entry();
818 entry->type_ref = LLVMVoidType();827 entry->type_ref = LLVMVoidType();
819 buf_init_from_str(&entry->name, "void");828 buf_init_from_str(&entry->name, "void");
820 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name), 0, 0,829 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
830 entry->size_in_bits, entry->align_in_bits,
821 LLVMZigEncoding_DW_ATE_unsigned());831 LLVMZigEncoding_DW_ATE_unsigned());
822 g->type_table.put(&entry->name, entry);832 g->type_table.put(&entry->name, entry);
823 g->builtin_types.entry_void = entry;833 g->builtin_types.entry_void = entry;
src/semantic_info.hpp+2
...@@ -18,6 +18,8 @@ struct FnTableEntry;...@@ -18,6 +18,8 @@ struct FnTableEntry;
18struct TypeTableEntry {18struct TypeTableEntry {
19 LLVMTypeRef type_ref;19 LLVMTypeRef type_ref;
20 LLVMZigDIType *di_type;20 LLVMZigDIType *di_type;
21 uint64_t size_in_bits;
22 uint64_t align_in_bits;
2123
22 TypeTableEntry *pointer_child;24 TypeTableEntry *pointer_child;
23 bool pointer_is_const;25 bool pointer_is_const;
src/zig_llvm.cpp+12
...@@ -149,6 +149,18 @@ LLVMZigDIType *LLVMZigCreateDebugBasicType(LLVMZigDIBuilder *dibuilder, const ch...@@ -149,6 +149,18 @@ LLVMZigDIType *LLVMZigCreateDebugBasicType(LLVMZigDIBuilder *dibuilder, const ch
149 return reinterpret_cast<LLVMZigDIType*>(di_type);149 return reinterpret_cast<LLVMZigDIType*>(di_type);
150}150}
151151
152LLVMZigDIType *LLVMZigCreateDebugArrayType(LLVMZigDIBuilder *dibuilder, uint64_t size_in_bits,
153 uint64_t align_in_bits, LLVMZigDIType *elem_type, int elem_count)
154{
155 SmallVector<Metadata *, 1> subrange;
156 subrange.push_back(reinterpret_cast<DIBuilder*>(dibuilder)->getOrCreateSubrange(0, elem_count - 1));
157 DIType *di_type = reinterpret_cast<DIBuilder*>(dibuilder)->createArrayType(
158 size_in_bits, align_in_bits,
159 reinterpret_cast<DIType*>(elem_type),
160 reinterpret_cast<DIBuilder*>(dibuilder)->getOrCreateArray(subrange));
161 return reinterpret_cast<LLVMZigDIType*>(di_type);
162}
163
152LLVMZigDISubroutineType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped,164LLVMZigDISubroutineType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped,
153 LLVMZigDIFile *file, LLVMZigDIType **types_array, int types_array_len, unsigned flags)165 LLVMZigDIFile *file, LLVMZigDIType **types_array, int types_array_len, unsigned flags)
154{166{
src/zig_llvm.hpp+5
...@@ -43,6 +43,11 @@ LLVMZigDIType *LLVMZigCreateDebugPointerType(LLVMZigDIBuilder *dibuilder, LLVMZi...@@ -43,6 +43,11 @@ LLVMZigDIType *LLVMZigCreateDebugPointerType(LLVMZigDIBuilder *dibuilder, LLVMZi
43LLVMZigDIType *LLVMZigCreateDebugBasicType(LLVMZigDIBuilder *dibuilder, const char *name,43LLVMZigDIType *LLVMZigCreateDebugBasicType(LLVMZigDIBuilder *dibuilder, const char *name,
44 uint64_t size_in_bits, uint64_t align_in_bits, unsigned encoding);44 uint64_t size_in_bits, uint64_t align_in_bits, unsigned encoding);
4545
46LLVMZigDIType *LLVMZigCreateDebugArrayType(LLVMZigDIBuilder *dibuilder,
47 uint64_t size_in_bits, uint64_t align_in_bits, LLVMZigDIType *elem_type,
48 int elem_count);
49
50
46LLVMZigDISubroutineType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped,51LLVMZigDISubroutineType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped,
47 LLVMZigDIFile *file, LLVMZigDIType **types_array, int types_array_len, unsigned flags);52 LLVMZigDIFile *file, LLVMZigDIType **types_array, int types_array_len, unsigned flags);
4853