This does add some extra superfluous whitespace (eg: "int *") intended to make the Simplified Template Names work easier - this makes the DIE-based names match more exactly the clang-generated names, so it's easier to identify cases that don't generate matching names. (arguably we could change clang to skip that whitespace or add some fuzzy matching to accommodate differences in certain whitespace - but this seemed easier and fairly low-impact)
153 lines
7.6 KiB
LLVM
153 lines
7.6 KiB
LLVM
; RUN: llc -filetype=obj %s -o - | llvm-dwarfdump - | FileCheck %s
|
|
; RUN: llc -filetype=obj --split-dwarf-file=%t.dwo --split-dwarf-output=%t.dwo %s -o %t.o
|
|
; RUN: llvm-dwarfdump %t.dwo | FileCheck %s -check-prefix=SPLIT
|
|
|
|
; CHECK: .debug_info contents:
|
|
; CHECK-NEXT: 0x00000000: Compile Unit: length = 0x0000006e, format = DWARF32, version = 0x0004, abbr_offset = 0x0000, addr_size = 0x04 (next unit at 0x00000072)
|
|
|
|
; CHECK: 0x0000000b: DW_TAG_compile_unit
|
|
; CHECK-NEXT: DW_AT_producer ("clang version 6.0.0 (trunk 315924) (llvm/trunk 315960)")
|
|
; CHECK-NEXT: DW_AT_language (DW_LANG_C99)
|
|
; CHECK-NEXT: DW_AT_name ("test.c")
|
|
; CHECK-NEXT: DW_AT_stmt_list (0x00000000)
|
|
; CHECK-NEXT: DW_AT_comp_dir ("/usr/local/google/home/sbc/dev/wasm/simple")
|
|
; CHECK-NEXT: DW_AT_GNU_pubnames (true)
|
|
; CHECK-NEXT: DW_AT_low_pc (0x00000002)
|
|
; CHECK-NEXT: DW_AT_high_pc (0x00000004)
|
|
|
|
; CHECK: 0x00000026: DW_TAG_variable
|
|
; CHECK-NEXT: DW_AT_name ("foo")
|
|
; CHECK-NEXT: DW_AT_type (0x00000037 "int *")
|
|
; CHECK-NEXT: DW_AT_external (true)
|
|
; CHECK-NEXT: DW_AT_decl_file ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c")
|
|
; CHECK-NEXT: DW_AT_decl_line (4)
|
|
; CHECK-NEXT: DW_AT_location (DW_OP_addr 0x0)
|
|
|
|
; CHECK: 0x00000037: DW_TAG_pointer_type
|
|
; CHECK-NEXT: DW_AT_type (0x0000003c "int")
|
|
|
|
; CHECK: 0x0000003c: DW_TAG_base_type
|
|
; CHECK-NEXT: DW_AT_name ("int")
|
|
; CHECK-NEXT: DW_AT_encoding (DW_ATE_signed)
|
|
; CHECK-NEXT: DW_AT_byte_size (0x04)
|
|
|
|
; CHECK: 0x00000043: DW_TAG_variable
|
|
; CHECK-NEXT: DW_AT_name ("ptr2")
|
|
; CHECK-NEXT: DW_AT_type (0x00000054 "void (*)()")
|
|
; CHECK-NEXT: DW_AT_external (true)
|
|
; CHECK-NEXT: DW_AT_decl_file ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c")
|
|
; CHECK-NEXT: DW_AT_decl_line (5)
|
|
; CHECK-NEXT: DW_AT_location (DW_OP_addr 0x4)
|
|
|
|
; CHECK: 0x00000054: DW_TAG_pointer_type
|
|
; CHECK-NEXT: DW_AT_type (0x00000059 "void ()")
|
|
|
|
; CHECK: 0x00000059: DW_TAG_subroutine_type
|
|
; CHECK-NEXT: DW_AT_prototyped (true)
|
|
|
|
; CHECK: 0x0000005a: DW_TAG_subprogram
|
|
; CHECK-NEXT: DW_AT_low_pc (0x00000002)
|
|
; CHECK-NEXT: DW_AT_high_pc (0x00000004)
|
|
; CHECK-NEXT: DW_AT_frame_base (DW_OP_WASM_location 0x3 0x0, DW_OP_stack_value)
|
|
; CHECK-NEXT: DW_AT_name ("f2")
|
|
; CHECK-NEXT: DW_AT_decl_file ("/usr/local/google/home/sbc/dev/wasm/simple{{[/\\]}}test.c")
|
|
; CHECK-NEXT: DW_AT_decl_line (2)
|
|
; CHECK-NEXT: DW_AT_prototyped (true)
|
|
; CHECK-NEXT: DW_AT_external (true)
|
|
|
|
; CHECK: 0x00000071: NULL
|
|
|
|
|
|
; SPLIT: .debug_info.dwo contents:
|
|
; SPLIT-NEXT: 0x00000000: Compile Unit: length = 0x0000004c, format = DWARF32, version = 0x0004, abbr_offset = 0x0000, addr_size = 0x04 (next unit at 0x00000050)
|
|
|
|
; SPLIT: 0x0000000b: DW_TAG_compile_unit
|
|
; SPLIT-NEXT: DW_AT_producer ("clang version 6.0.0 (trunk 315924) (llvm/trunk 315960)")
|
|
; SPLIT-NEXT: DW_AT_language (DW_LANG_C99)
|
|
; SPLIT-NEXT: DW_AT_name ("test.c")
|
|
; SPLIT-NEXT: DW_AT_GNU_dwo_name ("{{.*}}dwarfdump.ll.tmp.dwo")
|
|
; SPLIT-NEXT: DW_AT_GNU_dwo_id (0xad3151f12153fa17)
|
|
|
|
; SPLIT: 0x00000019: DW_TAG_variable
|
|
; SPLIT-NEXT: DW_AT_name ("foo")
|
|
; SPLIT-NEXT: DW_AT_type (0x00000024 "int *")
|
|
; SPLIT-NEXT: DW_AT_external (true)
|
|
; SPLIT-NEXT: DW_AT_decl_file (0x01)
|
|
; SPLIT-NEXT: DW_AT_decl_line (4)
|
|
; SPLIT-NEXT: DW_AT_location (DW_OP_GNU_addr_index 0x0)
|
|
|
|
; SPLIT: 0x00000024: DW_TAG_pointer_type
|
|
; SPLIT-NEXT: DW_AT_type (0x00000029 "int")
|
|
|
|
; SPLIT: 0x00000029: DW_TAG_base_type
|
|
; SPLIT-NEXT: DW_AT_name ("int")
|
|
; SPLIT-NEXT: DW_AT_encoding (DW_ATE_signed)
|
|
; SPLIT-NEXT: DW_AT_byte_size (0x04)
|
|
|
|
; SPLIT: 0x0000002d: DW_TAG_variable
|
|
; SPLIT-NEXT: DW_AT_name ("ptr2")
|
|
; SPLIT-NEXT: DW_AT_type (0x00000038 "void (*)()")
|
|
; SPLIT-NEXT: DW_AT_external (true)
|
|
; SPLIT-NEXT: DW_AT_decl_file (0x01)
|
|
; SPLIT-NEXT: DW_AT_decl_line (5)
|
|
; SPLIT-NEXT: DW_AT_location (DW_OP_GNU_addr_index 0x1)
|
|
|
|
; SPLIT: 0x00000038: DW_TAG_pointer_type
|
|
; SPLIT-NEXT: DW_AT_type (0x0000003d "void ()")
|
|
|
|
; SPLIT: 0x0000003d: DW_TAG_subroutine_type
|
|
; SPLIT-NEXT: DW_AT_prototyped (true)
|
|
|
|
; SPLIT: 0x0000003e: DW_TAG_subprogram
|
|
; SPLIT-NEXT: DW_AT_low_pc (indexed (00000002) address = <unresolved>)
|
|
; SPLIT-NEXT: DW_AT_high_pc (0x00000002)
|
|
; SPLIT-NEXT: DW_AT_frame_base (DW_OP_WASM_location 0x3 0x0, DW_OP_stack_value)
|
|
; SPLIT-NEXT: DW_AT_name ("f2")
|
|
; SPLIT-NEXT: DW_AT_decl_file (0x01)
|
|
; SPLIT-NEXT: DW_AT_decl_line (2)
|
|
; SPLIT-NEXT: DW_AT_prototyped (true)
|
|
; SPLIT-NEXT: DW_AT_external (true)
|
|
|
|
; SPLIT: 0x0000004f: NULL
|
|
|
|
|
|
target triple = "wasm32-unknown-unknown"
|
|
|
|
source_filename = "test.c"
|
|
|
|
@myextern = external global i32, align 4
|
|
@foo = hidden global i32* @myextern, align 4, !dbg !0
|
|
@ptr2 = hidden global void ()* @f2, align 4, !dbg !6
|
|
|
|
; Function Attrs: noinline nounwind optnone
|
|
define hidden void @f2() #0 !dbg !17 {
|
|
entry:
|
|
ret void, !dbg !18
|
|
}
|
|
|
|
attributes #0 = { noinline nounwind optnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="none" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="generic" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
|
|
|
!llvm.dbg.cu = !{!2}
|
|
!llvm.module.flags = !{!13, !14, !15}
|
|
!llvm.ident = !{!16}
|
|
|
|
!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
|
|
!1 = distinct !DIGlobalVariable(name: "foo", scope: !2, file: !3, line: 4, type: !11, isLocal: false, isDefinition: true)
|
|
!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 6.0.0 (trunk 315924) (llvm/trunk 315960)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5)
|
|
!3 = !DIFile(filename: "test.c", directory: "/usr/local/google/home/sbc/dev/wasm/simple")
|
|
!4 = !{}
|
|
!5 = !{!0, !6}
|
|
!6 = !DIGlobalVariableExpression(var: !7, expr: !DIExpression())
|
|
!7 = distinct !DIGlobalVariable(name: "ptr2", scope: !2, file: !3, line: 5, type: !8, isLocal: false, isDefinition: true)
|
|
!8 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !9, size: 32)
|
|
!9 = !DISubroutineType(types: !10)
|
|
!10 = !{null}
|
|
!11 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !12, size: 32)
|
|
!12 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
|
!13 = !{i32 2, !"Dwarf Version", i32 4}
|
|
!14 = !{i32 2, !"Debug Info Version", i32 3}
|
|
!15 = !{i32 1, !"wchar_size", i32 4}
|
|
!16 = !{!"clang version 6.0.0 (trunk 315924) (llvm/trunk 315960)"}
|
|
!17 = distinct !DISubprogram(name: "f2", scope: !3, file: !3, line: 2, type: !9, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: false, unit: !2, retainedNodes: !4)
|
|
!18 = !DILocation(line: 2, column: 16, scope: !17)
|