diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2019-06-04 11:58:09 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-06-04 11:58:09 -0400 |
| commit | 8e109aec6b9e508e46f3d016065ad4ada0a2fd36 (patch) | |
| tree | 8f3e12d11e47b56e6765bbf5cec1789f020afdaa /src | |
| parent | 3eca5a42e650878922437a854a352300052c878a (diff) | |
| parent | 80cd142c96c421b50f26a7227066530a2a5d5978 (diff) | |
| download | zig-8e109aec6b9e508e46f3d016065ad4ada0a2fd36.tar.gz zig-8e109aec6b9e508e46f3d016065ad4ada0a2fd36.zip | |
Merge pull request #2620 from LemonBoy/debug-stuff
Small changes to debug info emitter
Diffstat (limited to 'src')
| -rw-r--r-- | src/analyze.cpp | 45 | ||||
| -rw-r--r-- | src/codegen.cpp | 4 | ||||
| -rw-r--r-- | src/zig_llvm.cpp | 24 | ||||
| -rw-r--r-- | src/zig_llvm.h | 33 |
4 files changed, 70 insertions, 36 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp index a62c24460e..0878cf04a7 100644 --- a/src/analyze.cpp +++ b/src/analyze.cpp @@ -6388,12 +6388,14 @@ static void resolve_llvm_types_slice(CodeGen *g, ZigType *type, ResolveStatus wa len_debug_size_in_bits, len_debug_align_in_bits, len_offset_in_bits, - 0, usize_llvm_di_type), + ZigLLVM_DIFlags_Zero, + usize_llvm_di_type), }; ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder, compile_unit_scope, buf_ptr(&type->name), - di_file, line, debug_size_in_bits, debug_align_in_bits, 0, + di_file, line, debug_size_in_bits, debug_align_in_bits, + ZigLLVM_DIFlags_Zero, nullptr, di_element_types, 1, 0, nullptr, ""); ZigLLVMReplaceTemporary(g->dbuilder, type->llvm_di_type, replacement_di_type); @@ -6425,18 +6427,19 @@ static void resolve_llvm_types_slice(CodeGen *g, ZigType *type, ResolveStatus wa ptr_debug_size_in_bits, ptr_debug_align_in_bits, ptr_offset_in_bits, - 0, get_llvm_di_type(g, ptr_type)), + ZigLLVM_DIFlags_Zero, get_llvm_di_type(g, ptr_type)), ZigLLVMCreateDebugMemberType(g->dbuilder, ZigLLVMTypeToScope(type->llvm_di_type), "len", di_file, line, len_debug_size_in_bits, len_debug_align_in_bits, len_offset_in_bits, - 0, usize_llvm_di_type), + ZigLLVM_DIFlags_Zero, usize_llvm_di_type), }; ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder, compile_unit_scope, buf_ptr(&type->name), - di_file, line, debug_size_in_bits, debug_align_in_bits, 0, + di_file, line, debug_size_in_bits, debug_align_in_bits, + ZigLLVM_DIFlags_Zero, nullptr, di_element_types, 2, 0, nullptr, ""); ZigLLVMReplaceTemporary(g->dbuilder, type->llvm_di_type, replacement_di_type); @@ -6597,7 +6600,7 @@ static void resolve_llvm_types_struct(CodeGen *g, ZigType *struct_type, ResolveS debug_size_in_bits, debug_align_in_bits, debug_offset_in_bits, - 0, field_di_type); + ZigLLVM_DIFlags_Zero, field_di_type); assert(di_element_types[debug_field_index]); debug_field_index += 1; } @@ -6610,7 +6613,8 @@ static void resolve_llvm_types_struct(CodeGen *g, ZigType *struct_type, ResolveS di_file, line, debug_size_in_bits, debug_align_in_bits, - 0, nullptr, di_element_types, (int)debug_field_count, 0, nullptr, ""); + ZigLLVM_DIFlags_Zero, + nullptr, di_element_types, (int)debug_field_count, 0, nullptr, ""); ZigLLVMReplaceTemporary(g->dbuilder, struct_type->llvm_di_type, replacement_di_type); struct_type->llvm_di_type = replacement_di_type; @@ -6639,7 +6643,8 @@ static void resolve_llvm_types_enum(CodeGen *g, ZigType *enum_type) { import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1), debug_size_in_bits, debug_align_in_bits, - 0, nullptr, di_element_types, (int)debug_field_count, 0, nullptr, ""); + ZigLLVM_DIFlags_Zero, + nullptr, di_element_types, (int)debug_field_count, 0, nullptr, ""); return; } @@ -6723,7 +6728,7 @@ static void resolve_llvm_types_union(CodeGen *g, ZigType *union_type, ResolveSta store_size_in_bits, abi_align_in_bits, 0, - 0, field_di_type); + ZigLLVM_DIFlags_Zero, field_di_type); } @@ -6752,7 +6757,7 @@ static void resolve_llvm_types_union(CodeGen *g, ZigType *union_type, ResolveSta import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1), union_type->data.unionation.union_abi_size * 8, most_aligned_union_member->abi_align * 8, - 0, union_inner_di_types, + ZigLLVM_DIFlags_Zero, union_inner_di_types, gen_field_count, 0, ""); ZigLLVMReplaceTemporary(g->dbuilder, union_type->llvm_di_type, replacement_di_type); @@ -6786,7 +6791,7 @@ static void resolve_llvm_types_union(CodeGen *g, ZigType *union_type, ResolveSta ZigLLVMTypeToScope(union_type->llvm_di_type), "AnonUnion", import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1), most_aligned_union_member->size_in_bits, 8*most_aligned_union_member->abi_align, - 0, union_inner_di_types, gen_field_count, 0, ""); + ZigLLVM_DIFlags_Zero, union_inner_di_types, gen_field_count, 0, ""); uint64_t union_offset_in_bits = 8*LLVMOffsetOfElement(g->target_data_ref, union_type->llvm_type, union_type->data.unionation.gen_union_index); @@ -6799,7 +6804,7 @@ static void resolve_llvm_types_union(CodeGen *g, ZigType *union_type, ResolveSta most_aligned_union_member->size_in_bits, 8*most_aligned_union_member->abi_align, union_offset_in_bits, - 0, union_di_type); + ZigLLVM_DIFlags_Zero, union_di_type); uint64_t tag_debug_size_in_bits = tag_type->size_in_bits; uint64_t tag_debug_align_in_bits = 8*tag_type->abi_align; @@ -6810,7 +6815,7 @@ static void resolve_llvm_types_union(CodeGen *g, ZigType *union_type, ResolveSta tag_debug_size_in_bits, tag_debug_align_in_bits, tag_offset_in_bits, - 0, get_llvm_di_type(g, tag_type)); + ZigLLVM_DIFlags_Zero, get_llvm_di_type(g, tag_type)); ZigLLVMDIType *di_root_members[2]; di_root_members[union_type->data.unionation.gen_tag_index] = tag_member_di_type; @@ -6824,7 +6829,7 @@ static void resolve_llvm_types_union(CodeGen *g, ZigType *union_type, ResolveSta import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1), debug_size_in_bits, debug_align_in_bits, - 0, nullptr, di_root_members, 2, 0, nullptr, ""); + ZigLLVM_DIFlags_Zero, nullptr, di_root_members, 2, 0, nullptr, ""); ZigLLVMReplaceTemporary(g->dbuilder, union_type->llvm_di_type, replacement_di_type); union_type->llvm_di_type = replacement_di_type; @@ -6952,18 +6957,18 @@ static void resolve_llvm_types_optional(CodeGen *g, ZigType *type) { val_debug_size_in_bits, val_debug_align_in_bits, val_offset_in_bits, - 0, child_llvm_di_type), + ZigLLVM_DIFlags_Zero, child_llvm_di_type), ZigLLVMCreateDebugMemberType(g->dbuilder, ZigLLVMTypeToScope(type->llvm_di_type), "maybe", di_file, line, maybe_debug_size_in_bits, maybe_debug_align_in_bits, maybe_offset_in_bits, - 0, bool_llvm_di_type), + ZigLLVM_DIFlags_Zero, bool_llvm_di_type), }; ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder, compile_unit_scope, buf_ptr(&type->name), - di_file, line, debug_size_in_bits, debug_align_in_bits, 0, + di_file, line, debug_size_in_bits, debug_align_in_bits, ZigLLVM_DIFlags_Zero, nullptr, di_element_types, 2, 0, nullptr, ""); ZigLLVMReplaceTemporary(g->dbuilder, type->llvm_di_type, replacement_di_type); @@ -7016,13 +7021,13 @@ static void resolve_llvm_types_error_union(CodeGen *g, ZigType *type) { tag_debug_size_in_bits, tag_debug_align_in_bits, tag_offset_in_bits, - 0, get_llvm_di_type(g, err_set_type)), + ZigLLVM_DIFlags_Zero, get_llvm_di_type(g, err_set_type)), ZigLLVMCreateDebugMemberType(g->dbuilder, ZigLLVMTypeToScope(type->llvm_di_type), "value", di_file, line, value_debug_size_in_bits, value_debug_align_in_bits, value_offset_in_bits, - 0, get_llvm_di_type(g, payload_type)), + ZigLLVM_DIFlags_Zero, get_llvm_di_type(g, payload_type)), }; ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder, @@ -7031,7 +7036,7 @@ static void resolve_llvm_types_error_union(CodeGen *g, ZigType *type) { di_file, line, debug_size_in_bits, debug_align_in_bits, - 0, + ZigLLVM_DIFlags_Zero, nullptr, di_element_types, 2, 0, nullptr, ""); ZigLLVMReplaceTemporary(g->dbuilder, type->llvm_di_type, replacement_di_type); diff --git a/src/codegen.cpp b/src/codegen.cpp index 826a9463ac..4f1cb51a12 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -674,7 +674,7 @@ static ZigLLVMDIScope *get_di_scope(CodeGen *g, Scope *scope) { bool is_optimized = g->build_mode != BuildModeDebug; bool is_internal_linkage = (fn_table_entry->body_node != nullptr && fn_table_entry->export_list.length == 0); - unsigned flags = 0; + unsigned flags = ZigLLVM_DIFlags_StaticMember; ZigLLVMDIScope *fn_di_scope = get_di_scope(g, scope->parent); assert(fn_di_scope != nullptr); ZigLLVMDISubprogram *subprogram = ZigLLVMCreateFunction(g->dbuilder, @@ -7243,7 +7243,7 @@ static void define_builtin_types(CodeGen *g) { buf_init_from_str(&entry->name, "void"); entry->llvm_di_type = ZigLLVMCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name), 0, - ZigLLVMEncoding_DW_ATE_unsigned()); + ZigLLVMEncoding_DW_ATE_signed()); g->builtin_types.entry_void = entry; g->primitive_type_table.put(&entry->name, entry); } diff --git a/src/zig_llvm.cpp b/src/zig_llvm.cpp index c825ed3896..fe1b279cf0 100644 --- a/src/zig_llvm.cpp +++ b/src/zig_llvm.cpp @@ -318,12 +318,12 @@ ZigLLVMDIType *ZigLLVMCreateDebugMemberType(ZigLLVMDIBuilder *dibuilder, ZigLLVM const char *name, ZigLLVMDIFile *file, unsigned line, uint64_t size_in_bits, uint64_t align_in_bits, uint64_t offset_in_bits, unsigned flags, ZigLLVMDIType *type) { - assert(flags == 0); DIType *di_type = reinterpret_cast<DIBuilder*>(dibuilder)->createMemberType( reinterpret_cast<DIScope*>(scope), name, reinterpret_cast<DIFile*>(file), - line, size_in_bits, align_in_bits, offset_in_bits, DINode::FlagZero, + line, size_in_bits, align_in_bits, offset_in_bits, + static_cast<DINode::DIFlags>(flags), reinterpret_cast<DIType*>(type)); return reinterpret_cast<ZigLLVMDIType*>(di_type); } @@ -338,12 +338,12 @@ ZigLLVMDIType *ZigLLVMCreateDebugUnionType(ZigLLVMDIBuilder *dibuilder, ZigLLVMD DIType *ditype = reinterpret_cast<DIType*>(types_array[i]); fields.push_back(ditype); } - assert(flags == 0); DIType *di_type = reinterpret_cast<DIBuilder*>(dibuilder)->createUnionType( reinterpret_cast<DIScope*>(scope), name, reinterpret_cast<DIFile*>(file), - line_number, size_in_bits, align_in_bits, DINode::FlagZero, + line_number, size_in_bits, align_in_bits, + static_cast<DINode::DIFlags>(flags), reinterpret_cast<DIBuilder*>(dibuilder)->getOrCreateArray(fields), run_time_lang, unique_id); return reinterpret_cast<ZigLLVMDIType*>(di_type); @@ -360,12 +360,12 @@ ZigLLVMDIType *ZigLLVMCreateDebugStructType(ZigLLVMDIBuilder *dibuilder, ZigLLVM DIType *ditype = reinterpret_cast<DIType*>(types_array[i]); fields.push_back(ditype); } - assert(flags == 0); DIType *di_type = reinterpret_cast<DIBuilder*>(dibuilder)->createStructType( reinterpret_cast<DIScope*>(scope), name, reinterpret_cast<DIFile*>(file), - line_number, size_in_bits, align_in_bits, DINode::FlagZero, + line_number, size_in_bits, align_in_bits, + static_cast<DINode::DIFlags>(flags), reinterpret_cast<DIType*>(derived_from), reinterpret_cast<DIBuilder*>(dibuilder)->getOrCreateArray(fields), run_time_lang, @@ -426,11 +426,10 @@ ZigLLVMDIType *ZigLLVMCreateSubroutineType(ZigLLVMDIBuilder *dibuilder_wrapped, DIType *ditype = reinterpret_cast<DIType*>(types_array[i]); types.push_back(ditype); } - assert(flags == 0); DIBuilder *dibuilder = reinterpret_cast<DIBuilder*>(dibuilder_wrapped); DISubroutineType *subroutine_type = dibuilder->createSubroutineType( dibuilder->getOrCreateTypeArray(types), - DINode::FlagZero); + static_cast<DINode::DIFlags>(flags)); DIType *ditype = subroutine_type; return reinterpret_cast<ZigLLVMDIType*>(ditype); } @@ -516,7 +515,6 @@ ZigLLVMDILocalVariable *ZigLLVMCreateAutoVariable(ZigLLVMDIBuilder *dbuilder, ZigLLVMDIScope *scope, const char *name, ZigLLVMDIFile *file, unsigned line_no, ZigLLVMDIType *type, bool always_preserve, unsigned flags) { - assert(flags == 0); DILocalVariable *result = reinterpret_cast<DIBuilder*>(dbuilder)->createAutoVariable( reinterpret_cast<DIScope*>(scope), name, @@ -524,7 +522,7 @@ ZigLLVMDILocalVariable *ZigLLVMCreateAutoVariable(ZigLLVMDIBuilder *dbuilder, line_no, reinterpret_cast<DIType*>(type), always_preserve, - DINode::FlagZero); + static_cast<DINode::DIFlags>(flags)); return reinterpret_cast<ZigLLVMDILocalVariable*>(result); } @@ -547,7 +545,6 @@ ZigLLVMDILocalVariable *ZigLLVMCreateParameterVariable(ZigLLVMDIBuilder *dbuilde ZigLLVMDIScope *scope, const char *name, ZigLLVMDIFile *file, unsigned line_no, ZigLLVMDIType *type, bool always_preserve, unsigned flags, unsigned arg_no) { - assert(flags == 0); assert(arg_no != 0); DILocalVariable *result = reinterpret_cast<DIBuilder*>(dbuilder)->createParameterVariable( reinterpret_cast<DIScope*>(scope), @@ -557,7 +554,7 @@ ZigLLVMDILocalVariable *ZigLLVMCreateParameterVariable(ZigLLVMDIBuilder *dbuilde line_no, reinterpret_cast<DIType*>(type), always_preserve, - DINode::FlagZero); + static_cast<DINode::DIFlags>(flags)); return reinterpret_cast<ZigLLVMDILocalVariable*>(result); } @@ -612,7 +609,6 @@ ZigLLVMDISubprogram *ZigLLVMCreateFunction(ZigLLVMDIBuilder *dibuilder, ZigLLVMD unsigned flags, bool is_optimized, ZigLLVMDISubprogram *decl_subprogram) { DISubroutineType *di_sub_type = static_cast<DISubroutineType*>(reinterpret_cast<DIType*>(fn_di_type)); - assert(flags == 0); DISubprogram *result = reinterpret_cast<DIBuilder*>(dibuilder)->createFunction( reinterpret_cast<DIScope*>(scope), name, linkage_name, @@ -620,7 +616,7 @@ ZigLLVMDISubprogram *ZigLLVMCreateFunction(ZigLLVMDIBuilder *dibuilder, ZigLLVMD lineno, di_sub_type, scope_line, - DINode::FlagStaticMember, + static_cast<DINode::DIFlags>(flags), DISubprogram::toSPFlags(is_local_to_unit, is_definition, is_optimized), nullptr, reinterpret_cast<DISubprogram *>(decl_subprogram), diff --git a/src/zig_llvm.h b/src/zig_llvm.h index c60cfd058d..d667e0423d 100644 --- a/src/zig_llvm.h +++ b/src/zig_llvm.h @@ -406,6 +406,39 @@ enum ZigLLVM_ObjectFormatType { ZigLLVM_Wasm, }; +#define ZigLLVM_DIFlags_Zero 0U +#define ZigLLVM_DIFlags_Private 1U +#define ZigLLVM_DIFlags_Protected 2U +#define ZigLLVM_DIFlags_Public 3U +#define ZigLLVM_DIFlags_FwdDecl (1U << 2) +#define ZigLLVM_DIFlags_AppleBlock (1U << 3) +#define ZigLLVM_DIFlags_BlockByrefStruct (1U << 4) +#define ZigLLVM_DIFlags_Virtual (1U << 5) +#define ZigLLVM_DIFlags_Artificial (1U << 6) +#define ZigLLVM_DIFlags_Explicit (1U << 7) +#define ZigLLVM_DIFlags_Prototyped (1U << 8) +#define ZigLLVM_DIFlags_ObjcClassComplete (1U << 9) +#define ZigLLVM_DIFlags_ObjectPointer (1U << 10) +#define ZigLLVM_DIFlags_Vector (1U << 11) +#define ZigLLVM_DIFlags_StaticMember (1U << 12) +#define ZigLLVM_DIFlags_LValueReference (1U << 13) +#define ZigLLVM_DIFlags_RValueReference (1U << 14) +#define ZigLLVM_DIFlags_Reserved (1U << 15) +#define ZigLLVM_DIFlags_SingleInheritance (1U << 16) +#define ZigLLVM_DIFlags_MultipleInheritance (2 << 16) +#define ZigLLVM_DIFlags_VirtualInheritance (3 << 16) +#define ZigLLVM_DIFlags_IntroducedVirtual (1U << 18) +#define ZigLLVM_DIFlags_BitField (1U << 19) +#define ZigLLVM_DIFlags_NoReturn (1U << 20) +#define ZigLLVM_DIFlags_TypePassByValue (1U << 22) +#define ZigLLVM_DIFlags_TypePassByReference (1U << 23) +#define ZigLLVM_DIFlags_EnumClass (1U << 24) +#define ZigLLVM_DIFlags_Thunk (1U << 25) +#define ZigLLVM_DIFlags_NonTrivial (1U << 26) +#define ZigLLVM_DIFlags_BigEndian (1U << 27) +#define ZigLLVM_DIFlags_LittleEndian (1U << 28) +#define ZigLLVM_DIFlags_AllCallsDescribed (1U << 29) + ZIG_EXTERN_C const char *ZigLLVMGetArchTypeName(enum ZigLLVM_ArchType arch); ZIG_EXTERN_C const char *ZigLLVMGetSubArchTypeName(enum ZigLLVM_SubArchType sub_arch); ZIG_EXTERN_C const char *ZigLLVMGetVendorTypeName(enum ZigLLVM_VendorType vendor); |
