authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-06-04 11:58:09-04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2019-06-04 11:58:09-04:00
log8e109aec6b9e508e46f3d016065ad4ada0a2fd36
tree8f3e12d11e47b56e6765bbf5cec1789f020afdaa
parent3eca5a42e650878922437a854a352300052c878a
parent80cd142c96c421b50f26a7227066530a2a5d5978
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #2620 from LemonBoy/debug-stuff

Small changes to debug info emitter

4 files changed, 70 insertions(+), 36 deletions(-)

src/analyze.cpp+25-20
......@@ -6388,12 +6388,14 @@ static void resolve_llvm_types_slice(CodeGen *g, ZigType *type, ResolveStatus wa
63886388 len_debug_size_in_bits,
63896389 len_debug_align_in_bits,
63906390 len_offset_in_bits,
6391 0, usize_llvm_di_type),
6391 ZigLLVM_DIFlags_Zero,
6392 usize_llvm_di_type),
63926393 };
63936394 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,
63946395 compile_unit_scope,
63956396 buf_ptr(&type->name),
6396 di_file, line, debug_size_in_bits, debug_align_in_bits, 0,
6397 di_file, line, debug_size_in_bits, debug_align_in_bits,
6398 ZigLLVM_DIFlags_Zero,
63976399 nullptr, di_element_types, 1, 0, nullptr, "");
63986400
63996401 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
64256427 ptr_debug_size_in_bits,
64266428 ptr_debug_align_in_bits,
64276429 ptr_offset_in_bits,
6428 0, get_llvm_di_type(g, ptr_type)),
6430 ZigLLVM_DIFlags_Zero, get_llvm_di_type(g, ptr_type)),
64296431 ZigLLVMCreateDebugMemberType(g->dbuilder, ZigLLVMTypeToScope(type->llvm_di_type),
64306432 "len", di_file, line,
64316433 len_debug_size_in_bits,
64326434 len_debug_align_in_bits,
64336435 len_offset_in_bits,
6434 0, usize_llvm_di_type),
6436 ZigLLVM_DIFlags_Zero, usize_llvm_di_type),
64356437 };
64366438 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,
64376439 compile_unit_scope,
64386440 buf_ptr(&type->name),
6439 di_file, line, debug_size_in_bits, debug_align_in_bits, 0,
6441 di_file, line, debug_size_in_bits, debug_align_in_bits,
6442 ZigLLVM_DIFlags_Zero,
64406443 nullptr, di_element_types, 2, 0, nullptr, "");
64416444
64426445 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
65976600 debug_size_in_bits,
65986601 debug_align_in_bits,
65996602 debug_offset_in_bits,
6600 0, field_di_type);
6603 ZigLLVM_DIFlags_Zero, field_di_type);
66016604 assert(di_element_types[debug_field_index]);
66026605 debug_field_index += 1;
66036606 }
......@@ -6610,7 +6613,8 @@ static void resolve_llvm_types_struct(CodeGen *g, ZigType *struct_type, ResolveS
66106613 di_file, line,
66116614 debug_size_in_bits,
66126615 debug_align_in_bits,
6613 0, nullptr, di_element_types, (int)debug_field_count, 0, nullptr, "");
6616 ZigLLVM_DIFlags_Zero,
6617 nullptr, di_element_types, (int)debug_field_count, 0, nullptr, "");
66146618
66156619 ZigLLVMReplaceTemporary(g->dbuilder, struct_type->llvm_di_type, replacement_di_type);
66166620 struct_type->llvm_di_type = replacement_di_type;
......@@ -6639,7 +6643,8 @@ static void resolve_llvm_types_enum(CodeGen *g, ZigType *enum_type) {
66396643 import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1),
66406644 debug_size_in_bits,
66416645 debug_align_in_bits,
6642 0, nullptr, di_element_types, (int)debug_field_count, 0, nullptr, "");
6646 ZigLLVM_DIFlags_Zero,
6647 nullptr, di_element_types, (int)debug_field_count, 0, nullptr, "");
66436648 return;
66446649 }
66456650
......@@ -6723,7 +6728,7 @@ static void resolve_llvm_types_union(CodeGen *g, ZigType *union_type, ResolveSta
67236728 store_size_in_bits,
67246729 abi_align_in_bits,
67256730 0,
6726 0, field_di_type);
6731 ZigLLVM_DIFlags_Zero, field_di_type);
67276732
67286733 }
67296734
......@@ -6752,7 +6757,7 @@ static void resolve_llvm_types_union(CodeGen *g, ZigType *union_type, ResolveSta
67526757 import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1),
67536758 union_type->data.unionation.union_abi_size * 8,
67546759 most_aligned_union_member->abi_align * 8,
6755 0, union_inner_di_types,
6760 ZigLLVM_DIFlags_Zero, union_inner_di_types,
67566761 gen_field_count, 0, "");
67576762
67586763 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
67866791 ZigLLVMTypeToScope(union_type->llvm_di_type), "AnonUnion",
67876792 import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1),
67886793 most_aligned_union_member->size_in_bits, 8*most_aligned_union_member->abi_align,
6789 0, union_inner_di_types, gen_field_count, 0, "");
6794 ZigLLVM_DIFlags_Zero, union_inner_di_types, gen_field_count, 0, "");
67906795
67916796 uint64_t union_offset_in_bits = 8*LLVMOffsetOfElement(g->target_data_ref, union_type->llvm_type,
67926797 union_type->data.unionation.gen_union_index);
......@@ -6799,7 +6804,7 @@ static void resolve_llvm_types_union(CodeGen *g, ZigType *union_type, ResolveSta
67996804 most_aligned_union_member->size_in_bits,
68006805 8*most_aligned_union_member->abi_align,
68016806 union_offset_in_bits,
6802 0, union_di_type);
6807 ZigLLVM_DIFlags_Zero, union_di_type);
68036808
68046809 uint64_t tag_debug_size_in_bits = tag_type->size_in_bits;
68056810 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
68106815 tag_debug_size_in_bits,
68116816 tag_debug_align_in_bits,
68126817 tag_offset_in_bits,
6813 0, get_llvm_di_type(g, tag_type));
6818 ZigLLVM_DIFlags_Zero, get_llvm_di_type(g, tag_type));
68146819
68156820 ZigLLVMDIType *di_root_members[2];
68166821 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
68246829 import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1),
68256830 debug_size_in_bits,
68266831 debug_align_in_bits,
6827 0, nullptr, di_root_members, 2, 0, nullptr, "");
6832 ZigLLVM_DIFlags_Zero, nullptr, di_root_members, 2, 0, nullptr, "");
68286833
68296834 ZigLLVMReplaceTemporary(g->dbuilder, union_type->llvm_di_type, replacement_di_type);
68306835 union_type->llvm_di_type = replacement_di_type;
......@@ -6952,18 +6957,18 @@ static void resolve_llvm_types_optional(CodeGen *g, ZigType *type) {
69526957 val_debug_size_in_bits,
69536958 val_debug_align_in_bits,
69546959 val_offset_in_bits,
6955 0, child_llvm_di_type),
6960 ZigLLVM_DIFlags_Zero, child_llvm_di_type),
69566961 ZigLLVMCreateDebugMemberType(g->dbuilder, ZigLLVMTypeToScope(type->llvm_di_type),
69576962 "maybe", di_file, line,
69586963 maybe_debug_size_in_bits,
69596964 maybe_debug_align_in_bits,
69606965 maybe_offset_in_bits,
6961 0, bool_llvm_di_type),
6966 ZigLLVM_DIFlags_Zero, bool_llvm_di_type),
69626967 };
69636968 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,
69646969 compile_unit_scope,
69656970 buf_ptr(&type->name),
6966 di_file, line, debug_size_in_bits, debug_align_in_bits, 0,
6971 di_file, line, debug_size_in_bits, debug_align_in_bits, ZigLLVM_DIFlags_Zero,
69676972 nullptr, di_element_types, 2, 0, nullptr, "");
69686973
69696974 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) {
70167021 tag_debug_size_in_bits,
70177022 tag_debug_align_in_bits,
70187023 tag_offset_in_bits,
7019 0, get_llvm_di_type(g, err_set_type)),
7024 ZigLLVM_DIFlags_Zero, get_llvm_di_type(g, err_set_type)),
70207025 ZigLLVMCreateDebugMemberType(g->dbuilder, ZigLLVMTypeToScope(type->llvm_di_type),
70217026 "value", di_file, line,
70227027 value_debug_size_in_bits,
70237028 value_debug_align_in_bits,
70247029 value_offset_in_bits,
7025 0, get_llvm_di_type(g, payload_type)),
7030 ZigLLVM_DIFlags_Zero, get_llvm_di_type(g, payload_type)),
70267031 };
70277032
70287033 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,
......@@ -7031,7 +7036,7 @@ static void resolve_llvm_types_error_union(CodeGen *g, ZigType *type) {
70317036 di_file, line,
70327037 debug_size_in_bits,
70337038 debug_align_in_bits,
7034 0,
7039 ZigLLVM_DIFlags_Zero,
70357040 nullptr, di_element_types, 2, 0, nullptr, "");
70367041
70377042 ZigLLVMReplaceTemporary(g->dbuilder, type->llvm_di_type, replacement_di_type);
src/codegen.cpp+2-2
......@@ -674,7 +674,7 @@ static ZigLLVMDIScope *get_di_scope(CodeGen *g, Scope *scope) {
674674 bool is_optimized = g->build_mode != BuildModeDebug;
675675 bool is_internal_linkage = (fn_table_entry->body_node != nullptr &&
676676 fn_table_entry->export_list.length == 0);
677 unsigned flags = 0;
677 unsigned flags = ZigLLVM_DIFlags_StaticMember;
678678 ZigLLVMDIScope *fn_di_scope = get_di_scope(g, scope->parent);
679679 assert(fn_di_scope != nullptr);
680680 ZigLLVMDISubprogram *subprogram = ZigLLVMCreateFunction(g->dbuilder,
......@@ -7243,7 +7243,7 @@ static void define_builtin_types(CodeGen *g) {
72437243 buf_init_from_str(&entry->name, "void");
72447244 entry->llvm_di_type = ZigLLVMCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
72457245 0,
7246 ZigLLVMEncoding_DW_ATE_unsigned());
7246 ZigLLVMEncoding_DW_ATE_signed());
72477247 g->builtin_types.entry_void = entry;
72487248 g->primitive_type_table.put(&entry->name, entry);
72497249 }
src/zig_llvm.cpp+10-14
......@@ -318,12 +318,12 @@ ZigLLVMDIType *ZigLLVMCreateDebugMemberType(ZigLLVMDIBuilder *dibuilder, ZigLLVM
318318 const char *name, ZigLLVMDIFile *file, unsigned line, uint64_t size_in_bits,
319319 uint64_t align_in_bits, uint64_t offset_in_bits, unsigned flags, ZigLLVMDIType *type)
320320{
321 assert(flags == 0);
322321 DIType *di_type = reinterpret_cast<DIBuilder*>(dibuilder)->createMemberType(
323322 reinterpret_cast<DIScope*>(scope),
324323 name,
325324 reinterpret_cast<DIFile*>(file),
326 line, size_in_bits, align_in_bits, offset_in_bits, DINode::FlagZero,
325 line, size_in_bits, align_in_bits, offset_in_bits,
326 static_cast<DINode::DIFlags>(flags),
327327 reinterpret_cast<DIType*>(type));
328328 return reinterpret_cast<ZigLLVMDIType*>(di_type);
329329}
......@@ -338,12 +338,12 @@ ZigLLVMDIType *ZigLLVMCreateDebugUnionType(ZigLLVMDIBuilder *dibuilder, ZigLLVMD
338338 DIType *ditype = reinterpret_cast<DIType*>(types_array[i]);
339339 fields.push_back(ditype);
340340 }
341 assert(flags == 0);
342341 DIType *di_type = reinterpret_cast<DIBuilder*>(dibuilder)->createUnionType(
343342 reinterpret_cast<DIScope*>(scope),
344343 name,
345344 reinterpret_cast<DIFile*>(file),
346 line_number, size_in_bits, align_in_bits, DINode::FlagZero,
345 line_number, size_in_bits, align_in_bits,
346 static_cast<DINode::DIFlags>(flags),
347347 reinterpret_cast<DIBuilder*>(dibuilder)->getOrCreateArray(fields),
348348 run_time_lang, unique_id);
349349 return reinterpret_cast<ZigLLVMDIType*>(di_type);
......@@ -360,12 +360,12 @@ ZigLLVMDIType *ZigLLVMCreateDebugStructType(ZigLLVMDIBuilder *dibuilder, ZigLLVM
360360 DIType *ditype = reinterpret_cast<DIType*>(types_array[i]);
361361 fields.push_back(ditype);
362362 }
363 assert(flags == 0);
364363 DIType *di_type = reinterpret_cast<DIBuilder*>(dibuilder)->createStructType(
365364 reinterpret_cast<DIScope*>(scope),
366365 name,
367366 reinterpret_cast<DIFile*>(file),
368 line_number, size_in_bits, align_in_bits, DINode::FlagZero,
367 line_number, size_in_bits, align_in_bits,
368 static_cast<DINode::DIFlags>(flags),
369369 reinterpret_cast<DIType*>(derived_from),
370370 reinterpret_cast<DIBuilder*>(dibuilder)->getOrCreateArray(fields),
371371 run_time_lang,
......@@ -426,11 +426,10 @@ ZigLLVMDIType *ZigLLVMCreateSubroutineType(ZigLLVMDIBuilder *dibuilder_wrapped,
426426 DIType *ditype = reinterpret_cast<DIType*>(types_array[i]);
427427 types.push_back(ditype);
428428 }
429 assert(flags == 0);
430429 DIBuilder *dibuilder = reinterpret_cast<DIBuilder*>(dibuilder_wrapped);
431430 DISubroutineType *subroutine_type = dibuilder->createSubroutineType(
432431 dibuilder->getOrCreateTypeArray(types),
433 DINode::FlagZero);
432 static_cast<DINode::DIFlags>(flags));
434433 DIType *ditype = subroutine_type;
435434 return reinterpret_cast<ZigLLVMDIType*>(ditype);
436435}
......@@ -516,7 +515,6 @@ ZigLLVMDILocalVariable *ZigLLVMCreateAutoVariable(ZigLLVMDIBuilder *dbuilder,
516515 ZigLLVMDIScope *scope, const char *name, ZigLLVMDIFile *file, unsigned line_no,
517516 ZigLLVMDIType *type, bool always_preserve, unsigned flags)
518517{
519 assert(flags == 0);
520518 DILocalVariable *result = reinterpret_cast<DIBuilder*>(dbuilder)->createAutoVariable(
521519 reinterpret_cast<DIScope*>(scope),
522520 name,
......@@ -524,7 +522,7 @@ ZigLLVMDILocalVariable *ZigLLVMCreateAutoVariable(ZigLLVMDIBuilder *dbuilder,
524522 line_no,
525523 reinterpret_cast<DIType*>(type),
526524 always_preserve,
527 DINode::FlagZero);
525 static_cast<DINode::DIFlags>(flags));
528526 return reinterpret_cast<ZigLLVMDILocalVariable*>(result);
529527}
530528
......@@ -547,7 +545,6 @@ ZigLLVMDILocalVariable *ZigLLVMCreateParameterVariable(ZigLLVMDIBuilder *dbuilde
547545 ZigLLVMDIScope *scope, const char *name, ZigLLVMDIFile *file, unsigned line_no,
548546 ZigLLVMDIType *type, bool always_preserve, unsigned flags, unsigned arg_no)
549547{
550 assert(flags == 0);
551548 assert(arg_no != 0);
552549 DILocalVariable *result = reinterpret_cast<DIBuilder*>(dbuilder)->createParameterVariable(
553550 reinterpret_cast<DIScope*>(scope),
......@@ -557,7 +554,7 @@ ZigLLVMDILocalVariable *ZigLLVMCreateParameterVariable(ZigLLVMDIBuilder *dbuilde
557554 line_no,
558555 reinterpret_cast<DIType*>(type),
559556 always_preserve,
560 DINode::FlagZero);
557 static_cast<DINode::DIFlags>(flags));
561558 return reinterpret_cast<ZigLLVMDILocalVariable*>(result);
562559}
563560
......@@ -612,7 +609,6 @@ ZigLLVMDISubprogram *ZigLLVMCreateFunction(ZigLLVMDIBuilder *dibuilder, ZigLLVMD
612609 unsigned flags, bool is_optimized, ZigLLVMDISubprogram *decl_subprogram)
613610{
614611 DISubroutineType *di_sub_type = static_cast<DISubroutineType*>(reinterpret_cast<DIType*>(fn_di_type));
615 assert(flags == 0);
616612 DISubprogram *result = reinterpret_cast<DIBuilder*>(dibuilder)->createFunction(
617613 reinterpret_cast<DIScope*>(scope),
618614 name, linkage_name,
......@@ -620,7 +616,7 @@ ZigLLVMDISubprogram *ZigLLVMCreateFunction(ZigLLVMDIBuilder *dibuilder, ZigLLVMD
620616 lineno,
621617 di_sub_type,
622618 scope_line,
623 DINode::FlagStaticMember,
619 static_cast<DINode::DIFlags>(flags),
624620 DISubprogram::toSPFlags(is_local_to_unit, is_definition, is_optimized),
625621 nullptr,
626622 reinterpret_cast<DISubprogram *>(decl_subprogram),
src/zig_llvm.h+33
......@@ -406,6 +406,39 @@ enum ZigLLVM_ObjectFormatType {
406406 ZigLLVM_Wasm,
407407};
408408
409#define ZigLLVM_DIFlags_Zero 0U
410#define ZigLLVM_DIFlags_Private 1U
411#define ZigLLVM_DIFlags_Protected 2U
412#define ZigLLVM_DIFlags_Public 3U
413#define ZigLLVM_DIFlags_FwdDecl (1U << 2)
414#define ZigLLVM_DIFlags_AppleBlock (1U << 3)
415#define ZigLLVM_DIFlags_BlockByrefStruct (1U << 4)
416#define ZigLLVM_DIFlags_Virtual (1U << 5)
417#define ZigLLVM_DIFlags_Artificial (1U << 6)
418#define ZigLLVM_DIFlags_Explicit (1U << 7)
419#define ZigLLVM_DIFlags_Prototyped (1U << 8)
420#define ZigLLVM_DIFlags_ObjcClassComplete (1U << 9)
421#define ZigLLVM_DIFlags_ObjectPointer (1U << 10)
422#define ZigLLVM_DIFlags_Vector (1U << 11)
423#define ZigLLVM_DIFlags_StaticMember (1U << 12)
424#define ZigLLVM_DIFlags_LValueReference (1U << 13)
425#define ZigLLVM_DIFlags_RValueReference (1U << 14)
426#define ZigLLVM_DIFlags_Reserved (1U << 15)
427#define ZigLLVM_DIFlags_SingleInheritance (1U << 16)
428#define ZigLLVM_DIFlags_MultipleInheritance (2 << 16)
429#define ZigLLVM_DIFlags_VirtualInheritance (3 << 16)
430#define ZigLLVM_DIFlags_IntroducedVirtual (1U << 18)
431#define ZigLLVM_DIFlags_BitField (1U << 19)
432#define ZigLLVM_DIFlags_NoReturn (1U << 20)
433#define ZigLLVM_DIFlags_TypePassByValue (1U << 22)
434#define ZigLLVM_DIFlags_TypePassByReference (1U << 23)
435#define ZigLLVM_DIFlags_EnumClass (1U << 24)
436#define ZigLLVM_DIFlags_Thunk (1U << 25)
437#define ZigLLVM_DIFlags_NonTrivial (1U << 26)
438#define ZigLLVM_DIFlags_BigEndian (1U << 27)
439#define ZigLLVM_DIFlags_LittleEndian (1U << 28)
440#define ZigLLVM_DIFlags_AllCallsDescribed (1U << 29)
441
409442ZIG_EXTERN_C const char *ZigLLVMGetArchTypeName(enum ZigLLVM_ArchType arch);
410443ZIG_EXTERN_C const char *ZigLLVMGetSubArchTypeName(enum ZigLLVM_SubArchType sub_arch);
411444ZIG_EXTERN_C const char *ZigLLVMGetVendorTypeName(enum ZigLLVM_VendorType vendor);