Skip to content

Commit

Permalink
Update LLVM debug info.
Browse files Browse the repository at this point in the history
  • Loading branch information
lerno committed Nov 28, 2024
1 parent cc9a501 commit 8099e7a
Show file tree
Hide file tree
Showing 7 changed files with 573 additions and 556 deletions.
70 changes: 37 additions & 33 deletions src/compiler/llvm_codegen_module.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,26 +71,6 @@ void gencontext_begin_module(GenContext *c)
LLVMSetModuleDataLayout(c->module, c->target_data);
LLVMSetSourceFileName(c->module, c->code_module->name->module, strlen(c->code_module->name->module));

static const char *pic_level = "PIC Level";
static const char *pie_level = "PIE Level";
switch (compiler.platform.reloc_model)
{
case RELOC_BIG_PIE:
llvm_set_module_flag(c, LLVMModuleFlagBehaviorOverride, pie_level, (unsigned)2 /* PIE */, type_uint);
FALLTHROUGH;
case RELOC_BIG_PIC:
llvm_set_module_flag(c, LLVMModuleFlagBehaviorOverride, pic_level, (unsigned)2 /* PIC */, type_uint);
break;
case RELOC_SMALL_PIE:
llvm_set_module_flag(c, LLVMModuleFlagBehaviorOverride, pie_level, (unsigned)1 /* pie */, type_uint);
FALLTHROUGH;
case RELOC_SMALL_PIC:
llvm_set_module_flag(c, LLVMModuleFlagBehaviorOverride, pic_level, (unsigned)1 /* pic */, type_uint);
break;
default:
break;
}

LLVMSetTarget(c->module, compiler.platform.target_triple);

// Setup all types. Not thread-safe, but at this point in time we can assume a single context.
Expand Down Expand Up @@ -146,22 +126,46 @@ void gencontext_begin_module(GenContext *c)
c->memcmp_function_type = LLVMFunctionType(llvm_get_type(c, type_cint), memcmp_types, 3, false);
if (c->panic_var) c->panic_var->backend_ref = NULL;
if (c->panicf) c->panicf->backend_ref = NULL;
bool is_win = compiler.build.arch_os_target == WINDOWS_X64 || compiler.build.arch_os_target == WINDOWS_AARCH64;
llvm_set_module_flag(c, LLVMModuleFlagBehaviorWarning, "Dwarf Version", 4, type_uint);
if (is_win)
{
llvm_set_module_flag(c, LLVMModuleFlagBehaviorError, "CodeView", 1, type_uint);
}
llvm_set_module_flag(c, LLVMModuleFlagBehaviorWarning, "Debug Info Version", 3, type_uint);
llvm_set_module_flag(c, LLVMModuleFlagBehaviorWarning, "wchar_size", is_win ? 2 : 4, type_uint);
static const char *pic_level = "PIC Level";
static const char *pie_level = "PIE Level";
switch (compiler.platform.reloc_model)
{
case RELOC_BIG_PIE:
llvm_set_module_flag(c, LLVMModuleFlagBehaviorOverride, pie_level, (unsigned)2 /* PIE */, type_uint);
FALLTHROUGH;
case RELOC_BIG_PIC:
llvm_set_module_flag(c, LLVMModuleFlagBehaviorOverride, pic_level, (unsigned)2 /* PIC */, type_uint);
break;
case RELOC_SMALL_PIE:
llvm_set_module_flag(c, LLVMModuleFlagBehaviorOverride, pie_level, (unsigned)1 /* pie */, type_uint);
FALLTHROUGH;
case RELOC_SMALL_PIC:
llvm_set_module_flag(c, LLVMModuleFlagBehaviorOverride, pic_level, (unsigned)1 /* pic */, type_uint);
break;
default:
break;
}
llvm_set_module_flag(c, LLVMModuleFlagBehaviorError, "uwtable", UWTABLE, type_uint);
if (is_win)
{
llvm_set_module_flag(c, LLVMModuleFlagBehaviorWarning, "MaxTLSAlign", 65536, type_uint);
}
else
{
unsigned frame_pointer = compiler.platform.arch == ARCH_TYPE_AARCH64 ? 1 : 2;
llvm_set_module_flag(c, LLVMModuleFlagBehaviorWarning, "frame-pointer", frame_pointer, type_uint);
}

if (compiler.build.debug_info != DEBUG_INFO_NONE)
{
if (compiler.build.arch_os_target == WINDOWS_X64 || compiler.build.arch_os_target == WINDOWS_AARCH64)
{
llvm_set_module_flag(c, LLVMModuleFlagBehaviorError, "CodeView", 1, type_uint);
}
else
{
unsigned frame_pointer = compiler.platform.arch == ARCH_TYPE_AARCH64 ? 1 : 2;
llvm_set_module_flag(c, LLVMModuleFlagBehaviorWarning, "Dwarf Version", 4, type_uint);
llvm_set_module_flag(c, LLVMModuleFlagBehaviorWarning, "Debug Info Version", 3, type_uint);
llvm_set_module_flag(c, LLVMModuleFlagBehaviorWarning, "frame-pointer", frame_pointer, type_uint);
}
llvm_set_module_flag(c, LLVMModuleFlagBehaviorError, "uwtable", UWTABLE, type_uint);

c->debug.runtime_version = 0;
c->debug.builder = LLVMCreateDIBuilder(c->module);
if (compiler.build.debug_info == DEBUG_INFO_FULL && safe_mode_enabled())
Expand Down
160 changes: 81 additions & 79 deletions test/test_suite/concurrency/atomic_load_store_debug.c3t
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,12 @@ fn void main()
/* #expect: test.ll
%.introspect = type { i8, i64, ptr, i64, i64, i64, [0 x i64] }
%any = type { ptr, i64 }

@"$ct.test.Ghh" = linkonce global %.introspect { i8 10, i64 0, ptr null, i64 12, i64 0, i64 3, [0 x i64] zeroinitializer }, align 8
@.str = private unnamed_addr constant [3 x i8] c"%d\00", align 1
@"$ct.int" = linkonce global %.introspect { i8 2, i64 0, ptr null, i64 4, i64 0, i64 0, [0 x i64] zeroinitializer }, align 8

define void @test.main() #0 !dbg !7 {
define void @test.main() #0 !dbg !8 {
entry:
%a = alloca i32, align 4
%x = alloca i32, align 4
Expand All @@ -39,37 +40,37 @@ entry:
%value6 = alloca i32, align 4
%varargslots = alloca [1 x %any], align 16
%retparam = alloca i64, align 8
store i32 111, ptr %a, align 4, !dbg !14
store i32 111, ptr %a, align 4, !dbg !15
store ptr %a, ptr %x1, align 8
%0 = load ptr, ptr %x1, align 8, !dbg !17
%1 = load atomic i32, ptr %0 seq_cst, align 4, !dbg !17
store i32 %1, ptr %x, align 4, !dbg !17
%0 = load ptr, ptr %x1, align 8, !dbg !18
%1 = load atomic i32, ptr %0 seq_cst, align 4, !dbg !18
store i32 %1, ptr %x, align 4, !dbg !18
store ptr %a, ptr %x2, align 8
%2 = load ptr, ptr %x2, align 8, !dbg !23
%3 = load atomic volatile i32, ptr %2 monotonic, align 4, !dbg !23
store i32 %3, ptr %y, align 4, !dbg !23
%2 = load ptr, ptr %x2, align 8, !dbg !24
%3 = load atomic volatile i32, ptr %2 monotonic, align 4, !dbg !24
store i32 %3, ptr %y, align 4, !dbg !24
store ptr %a, ptr %x3, align 8
%4 = load i32, ptr %x, align 4, !dbg !26
%add = add i32 123, %4, !dbg !27
%4 = load i32, ptr %x, align 4, !dbg !27
%add = add i32 123, %4, !dbg !28
store i32 %add, ptr %value, align 4
%5 = load ptr, ptr %x3, align 8, !dbg !28
%6 = load i32, ptr %value, align 4, !dbg !28
store atomic i32 %6, ptr %5 seq_cst, align 4, !dbg !28
%5 = load ptr, ptr %x3, align 8, !dbg !29
%6 = load i32, ptr %value, align 4, !dbg !29
store atomic i32 %6, ptr %5 seq_cst, align 4, !dbg !29
store ptr %a, ptr %x4, align 8
%7 = load i32, ptr %y, align 4, !dbg !31
%add5 = add i32 33, %7, !dbg !32
%7 = load i32, ptr %y, align 4, !dbg !32
%add5 = add i32 33, %7, !dbg !33
store i32 %add5, ptr %value6, align 4
%8 = load ptr, ptr %x4, align 8, !dbg !33
%9 = load i32, ptr %value6, align 4, !dbg !33
store atomic volatile i32 %9, ptr %8 monotonic, align 4, !dbg !33
%10 = insertvalue %any undef, ptr %a, 0, !dbg !36
%11 = insertvalue %any %10, i64 ptrtoint (ptr @"$ct.int" to i64), 1, !dbg !36
store %any %11, ptr %varargslots, align 16, !dbg !36
%12 = call i64 @std.io.printfn(ptr %retparam, ptr @.str, i64 2, ptr %varargslots, i64 1), !dbg !37
ret void, !dbg !37
%8 = load ptr, ptr %x4, align 8, !dbg !34
%9 = load i32, ptr %value6, align 4, !dbg !34
store atomic volatile i32 %9, ptr %8 monotonic, align 4, !dbg !34
%10 = insertvalue %any undef, ptr %a, 0, !dbg !37
%11 = insertvalue %any %10, i64 ptrtoint (ptr @"$ct.int" to i64), 1, !dbg !37
store %any %11, ptr %varargslots, align 16, !dbg !37
%12 = call i64 @std.io.printfn(ptr %retparam, ptr @.str, i64 2, ptr %varargslots, i64 1), !dbg !38
ret void, !dbg !38
}

define i32 @main(i32 %0, ptr %1) #0 !dbg !38 {
define i32 @main(i32 %0, ptr %1) #0 !dbg !39 {
entry:
%.anon = alloca i32, align 4
%.anon1 = alloca ptr, align 8
Expand All @@ -81,65 +82,66 @@ entry:
store i32 %2, ptr %.anon2, align 4
%3 = load ptr, ptr %.anon1, align 8
store ptr %3, ptr %.anon3, align 8
call void @test.main(), !dbg !47
ret i32 0, !dbg !50
call void @test.main(), !dbg !48
ret i32 0, !dbg !51
}

declare extern_weak i64 @std.io.printfn(ptr, ptr, i64, ptr, i64) #0

declare i1 @llvm.expect.i1(i1, i1)
declare i1 @llvm.expect.i1(i1, i1) #2

!llvm.module.flags = !{!0, !1, !2, !3, !4}
!llvm.dbg.cu = !{!5}
!llvm.module.flags = !{!0, !1, !2, !3, !4, !5}
!llvm.dbg.cu = !{!6}

!0 = !{i32 4, !"PIC Level", i32 2}
!1 = !{i32 2, !"Dwarf Version", i32 4}
!2 = !{i32 2, !"Debug Info Version", i32 3}
!3 = !{i32 2, !"frame-pointer", i32 2}
!0 = !{i32 2, !"Dwarf Version", i32 4}
!1 = !{i32 2, !"Debug Info Version", i32 3}
!2 = !{i32 2, !"wchar_size", i32 4}
!3 = !{i32 4, !"PIC Level", i32 2}
!4 = !{i32 1, !"uwtable", i32 2}
!5 = distinct !DICompileUnit(language: DW_LANG_C11, file: !6, producer: "c3c", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false)
!6 = !DIFile(filename: "atomic_load_store_debug.c3"
!7 = distinct !DISubprogram(name: "main", linkageName: "test.main", scope: !6, file: !6, line: 10, type: !8, scopeLine: 10, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !10)
!8 = !DISubroutineType(types: !9)
!9 = !{null}
!10 = !{}
!11 = !DILocalVariable(name: "a", scope: !7, file: !6, line: 12, type: !12, align: 4)
!12 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!13 = !DILocation(line: 12, column: 6, scope: !7)
!14 = !DILocation(line: 12, column: 10, scope: !7)
!15 = !DILocalVariable(name: "x", scope: !7, file: !6, line: 13, type: !12, align: 4)
!16 = !DILocation(line: 13, column: 6, scope: !7)
!17 = !DILocation(
!18 = distinct !DISubprogram(name: "@atomic_load",
!19 = !DIFile(filename: "mem.c3",
!20 = !DILocation(line: 13, column: 10, scope: !7)
!21 = !DILocalVariable(name: "y", scope: !7, file: !6, line: 14, type: !12, align: 4)
!22 = !DILocation(line: 14, column: 6, scope: !7)
!23 = !DILocation(
!24 = distinct !DISubprogram(name: "@atomic_load", linkageName: "@atomic_load", scope: !19, file: !19, line: 225, scopeLine: 225, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !5)
!25 = !DILocation(line: 14, column: 10, scope: !7)
!26 = !DILocation(line: 15, column: 25, scope: !7)
!27 = !DILocation(line: 15, column: 19, scope: !7)
!28 = !DILocation(
!29 = distinct !DISubprogram(name: "@atomic_store", linkageName: "@atomic_store", scope: !19, file: !19, line: 240, scopeLine: 240, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !5)
!30 = !DILocation(line: 15, column: 2, scope: !7)
!31 = !DILocation(line: 16, column: 24, scope: !7)
!32 = !DILocation(line: 16, column: 19, scope: !7)
!33 = !DILocation(
!34 = distinct !DISubprogram(name: "@atomic_store", linkageName: "@atomic_store", scope: !19, file: !19, line: 240, scopeLine: 240, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !5)
!35 = !DILocation(line: 16, column: 2, scope: !7)
!36 = !DILocation(line: 17, column: 20, scope: !7)
!37 = !DILocation(line: 17, column: 6, scope: !7)
!38 = distinct !DISubprogram(name: "_$main", linkageName: "main", scope: !6, file: !6, line: 10, type: !39, scopeLine: 10, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !5, retainedNodes: !10)
!39 = !DISubroutineType(types: !40)
!40 = !{!12, !12, !41}
!41 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "char**", baseType: !42, size: 64, align: 64, dwarfAddressSpace: 0)
!42 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "char*", baseType: !43, size: 64, align: 64, dwarfAddressSpace: 0)
!43 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_unsigned_char)
!44 = !DILocalVariable(name: ".anon", arg: 1, scope: !38, file: !6, line: 10, type: !12)
!45 = !DILocation(line: 10, column: 9, scope: !38)
!46 = !DILocalVariable(name: ".anon", arg: 2, scope: !38, file: !6, line: 10, type: !41)
!47 = !DILocation(
!48 = distinct !DISubprogram(name: "@main_to_void_main", linkageName: "@main_to_void_main", scope: !49, file: !49, line: 16, scopeLine: 16, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !5)
!49 = !DIFile(filename: "main_stub.c3", directory:
!50 = !DILocation(
!5 = !{i32 2, !"frame-pointer", i32 2}
!6 = distinct !DICompileUnit(language: DW_LANG_C11, file: !7, producer: "c3c", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false)
!7 = !DIFile(filename: "atomic_load_store_debug.c3"
!8 = distinct !DISubprogram(name: "main", linkageName: "test.main", scope: !7, file: !7, line: 10, type: !9, scopeLine: 10, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !6, retainedNodes: !11)
!9 = !DISubroutineType(types: !10)
!10 = !{null}
!11 = !{}
!12 = !DILocalVariable(name: "a", scope: !8, file: !7, line: 12, type: !13, align: 4)
!13 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!14 = !DILocation(line: 12, column: 6, scope: !8)
!15 = !DILocation(line: 12, column: 10, scope: !8)
!16 = !DILocalVariable(name: "x", scope: !8, file: !7, line: 13, type: !13, align: 4)
!17 = !DILocation(line: 13, column: 6, scope: !8)
!18 = !DILocation(
!19 = distinct !DISubprogram(name: "@atomic_load",
!20 = !DIFile(filename: "mem.c3",
!21 = !DILocation(line: 13, column: 10, scope: !8)
!22 = !DILocalVariable(name: "y", scope: !8, file: !7, line: 14, type: !13, align: 4)
!23 = !DILocation(line: 14, column: 6, scope: !8)
!24 = !DILocation(
!25 = distinct !DISubprogram(name: "@atomic_load", linkageName: "@atomic_load", scope: !20, file: !20, line: 225, scopeLine: 225, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !6)
!26 = !DILocation(line: 14, column: 10, scope: !8)
!27 = !DILocation(line: 15, column: 25, scope: !8)
!28 = !DILocation(line: 15, column: 19, scope: !8)
!29 = !DILocation(
!30 = distinct !DISubprogram(name: "@atomic_store", linkageName: "@atomic_store", scope: !20, file: !20, line: 240, scopeLine: 240, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !6)
!31 = !DILocation(line: 15, column: 2, scope: !8)
!32 = !DILocation(line: 16, column: 24, scope: !8)
!33 = !DILocation(line: 16, column: 19, scope: !8)
!34 = !DILocation(
!35 = distinct !DISubprogram(name: "@atomic_store", linkageName: "@atomic_store", scope: !20, file: !20, line: 240, scopeLine: 240, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !6)
!36 = !DILocation(line: 16, column: 2, scope: !8)
!37 = !DILocation(line: 17, column: 20, scope: !8)
!38 = !DILocation(line: 17, column: 6, scope: !8)
!39 = distinct !DISubprogram(name: "_$main", linkageName: "main", scope: !7, file: !7, line: 10, type: !40, scopeLine: 10, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !6, retainedNodes: !11)
!40 = !DISubroutineType(types: !41)
!41 = !{!13, !13, !42}
!42 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "char**", baseType: !43, size: 64, align: 64, dwarfAddressSpace: 0)
!43 = !DIDerivedType(tag: DW_TAG_pointer_type, name: "char*", baseType: !44, size: 64, align: 64, dwarfAddressSpace: 0)
!44 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_unsigned_char)
!45 = !DILocalVariable(name: ".anon", arg: 1, scope: !39, file: !7, line: 10, type: !13)
!46 = !DILocation(line: 10, column: 9, scope: !39)
!47 = !DILocalVariable(name: ".anon", arg: 2, scope: !39, file: !7, line: 10, type: !42)
!48 = !DILocation(
!49 = distinct !DISubprogram(name: "@main_to_void_main", linkageName: "@main_to_void_main", scope: !50, file: !50, line: 16, scopeLine: 16, spFlags: DISPFlagLocalToUnit | DISPFlagDefinition, unit: !6)
!50 = !DIFile(filename: "main_stub.c3", directory:
!51 = !DILocation(
17 changes: 9 additions & 8 deletions test/test_suite/debug_symbols/constants.c3t
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ const FOO @private = ~(uint)(0);
@constants.CC = internal unnamed_addr constant i32 -1, align 4, !dbg !6
@constants.FOO = internal unnamed_addr constant i32 -1, align 4, !dbg !9

!llvm.module.flags = !{!11, !12, !13, !14, !15}
!llvm.dbg.cu = !{!16}
!llvm.module.flags = !{!11, !12, !13, !14, !15, !16}
!llvm.dbg.cu = !{!17}

!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(name: "AA", linkageName: "constants.AA", scope: !2
Expand All @@ -26,10 +26,11 @@ const FOO @private = ~(uint)(0);
!8 = !DIBasicType(name: "uint", size: 32, encoding: DW_ATE_unsigned)
!9 = !DIGlobalVariableExpression(var: !10, expr: !DIExpression())
!10 = distinct !DIGlobalVariable(name: "FOO", linkageName: "constants.FOO", scope: !2, file: !2, line: 4, type: !8, isLocal: true, isDefinition: true, align: 4)
!11 = !{i32 4, !"PIC Level", i32 2}
!12 = !{i32 2, !"Dwarf Version", i32 4}
!13 = !{i32 2, !"Debug Info Version", i32 3}
!14 = !{i32 2, !"frame-pointer", i32 2}
!11 = !{i32 2, !"Dwarf Version", i32 4}
!12 = !{i32 2, !"Debug Info Version", i32 3}
!13 = !{i32 2, !"wchar_size", i32 4}
!14 = !{i32 4, !"PIC Level", i32 2}
!15 = !{i32 1, !"uwtable", i32 2}
!16 = distinct !DICompileUnit(language: DW_LANG_C11, file: !2, producer: "c3c", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, globals: !17, splitDebugInlining: false)
!17 = !{!0, !4, !6, !9}
!16 = !{i32 2, !"frame-pointer", i32 2}
!17 = distinct !DICompileUnit(language: DW_LANG_C11, file: !2, producer: "c3c", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, globals: !18, splitDebugInlining: false)
!18 = !{!0, !4, !6, !9}
19 changes: 10 additions & 9 deletions test/test_suite/debug_symbols/constants_mingw.c3t
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ const FOO @private = ~(uint)(0);
@constants_mingw.CC = internal unnamed_addr constant i32 -1, align 4, !dbg !6
@constants_mingw.FOO = internal unnamed_addr constant i32 -1, align 4, !dbg !9

!llvm.module.flags = !{!11, !12, !13, !14, !15}
!llvm.dbg.cu = !{!16}
!llvm.module.flags = !{!11, !12, !13, !14, !15, !16}
!llvm.dbg.cu = !{!17}

!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
!1 = distinct !DIGlobalVariable(name: "AA", linkageName: "constants_mingw.AA", scope: !2, file: !2, line: 1, type: !3, isLocal: true, isDefinition: true, align: 1)
!2 = !DIFile(filename: "constants_mingw.c3", directory:
!2 = !DIFile(filename: "constants_mingw.c3", directory
!3 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_unsigned_char)
!4 = !DIGlobalVariableExpression(var: !5, expr: !DIExpression())
!5 = distinct !DIGlobalVariable(name: "BB", linkageName: "constants_mingw.BB", scope: !2, file: !2, line: 2, type: !3, isLocal: false, isDefinition: true, align: 1)
Expand All @@ -28,10 +28,11 @@ const FOO @private = ~(uint)(0);
!8 = !DIBasicType(name: "uint", size: 32, encoding: DW_ATE_unsigned)
!9 = !DIGlobalVariableExpression(var: !10, expr: !DIExpression())
!10 = distinct !DIGlobalVariable(name: "FOO", linkageName: "constants_mingw.FOO", scope: !2, file: !2, line: 4, type: !8, isLocal: true, isDefinition: true, align: 4)
!11 = !{i32 4, !"PIC Level", i32 2}
!12 = !{i32 2, !"Dwarf Version", i32 4}
!13 = !{i32 2, !"Debug Info Version", i32 3}
!14 = !{i32 2, !"frame-pointer", i32 2}
!11 = !{i32 2, !"Dwarf Version", i32 4}
!12 = !{i32 2, !"Debug Info Version", i32 3}
!13 = !{i32 2, !"wchar_size", i32 4}
!14 = !{i32 4, !"PIC Level", i32 2}
!15 = !{i32 1, !"uwtable", i32 2}
!16 = distinct !DICompileUnit(language: DW_LANG_C11, file: !2, producer: "c3c", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, globals: !17, splitDebugInlining: false)
!17 = !{!0, !4, !6, !9}
!16 = !{i32 2, !"frame-pointer", i32 2}
!17 = distinct !DICompileUnit(language: DW_LANG_C11, file: !2, producer: "c3c", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, globals: !18, splitDebugInlining: false)
!18 = !{!0, !4, !6, !9}
Loading

0 comments on commit 8099e7a

Please sign in to comment.