In DWARF v5 the Line Number Program Header is extensible, allowing values with new content types. In this extension a content type is added, DW_LNCT_LLVM_source, which contains the embedded source code of the file. Add new optional attribute for !DIFile IR metadata called source which contains source text. Use this to output the source to the DWARF line table of code objects. Analogously extend METADATA_FILE in Bitcode and .file directive in ASM to support optional source. Teach llvm-dwarfdump and llvm-objdump about the new values. Update the output format of llvm-dwarfdump to make room for the new attribute on file_names entries, and support embedded sources for the -source option in llvm-objdump. Differential Revision: https://reviews.llvm.org/D42765 llvm-svn: 325970
67 lines
3.3 KiB
LLVM
67 lines
3.3 KiB
LLVM
; RUN: llc -O2 -march=bpfel %s -o %t -filetype=obj
|
|
; RUN: llvm-dwarfdump -debug-line %t | FileCheck %s
|
|
; RUN: llc -O2 -march=bpfeb %s -o %t -filetype=obj
|
|
; RUN: llvm-dwarfdump -debug-line %t | FileCheck %s
|
|
|
|
source_filename = "testprog.c"
|
|
target datalayout = "e-m:e-p:64:64-i64:64-n32:64-S128"
|
|
target triple = "bpf"
|
|
|
|
@testprog.myvar_c = internal unnamed_addr global i32 0, align 4, !dbg !0
|
|
|
|
; Function Attrs: nounwind
|
|
define i32 @testprog(i32, i32) local_unnamed_addr #0 !dbg !2 {
|
|
tail call void @llvm.dbg.value(metadata i32 %0, i64 0, metadata !11, metadata !16), !dbg !17
|
|
tail call void @llvm.dbg.value(metadata i32 %1, i64 0, metadata !12, metadata !16), !dbg !18
|
|
%3 = load i32, i32* @testprog.myvar_c, align 4, !dbg !19, !tbaa !20
|
|
%4 = add i32 %1, %0, !dbg !24
|
|
%5 = add i32 %4, %3, !dbg !25
|
|
store i32 %5, i32* @testprog.myvar_c, align 4, !dbg !26, !tbaa !20
|
|
ret i32 %5, !dbg !27
|
|
}
|
|
|
|
; Function Attrs: nounwind readnone
|
|
declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #1
|
|
|
|
attributes #0 = { nounwind "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "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" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
|
attributes #1 = { nounwind readnone }
|
|
|
|
!llvm.dbg.cu = !{!7}
|
|
!llvm.module.flags = !{!13, !14}
|
|
!llvm.ident = !{!15}
|
|
|
|
!0 = distinct !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
|
|
!1 = !DIGlobalVariable(name: "myvar_c", scope: !2, file: !3, line: 3, type: !6, isLocal: true, isDefinition: true)
|
|
!2 = distinct !DISubprogram(name: "testprog", scope: !3, file: !3, line: 1, type: !4, isLocal: false, isDefinition: true, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: true, unit: !7, variables: !10)
|
|
!3 = !DIFile(filename: "testprog.c", directory: "/w/llvm/bld")
|
|
!4 = !DISubroutineType(types: !5)
|
|
!5 = !{!6, !6, !6}
|
|
!6 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
|
!7 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 4.0.0 (trunk 287518) (llvm/trunk 287520)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !8, globals: !9)
|
|
!8 = !{}
|
|
!9 = !{!0}
|
|
!10 = !{!11, !12}
|
|
!11 = !DILocalVariable(name: "myvar_a", arg: 1, scope: !2, file: !3, line: 1, type: !6)
|
|
!12 = !DILocalVariable(name: "myvar_b", arg: 2, scope: !2, file: !3, line: 1, type: !6)
|
|
!13 = !{i32 2, !"Dwarf Version", i32 4}
|
|
!14 = !{i32 2, !"Debug Info Version", i32 3}
|
|
!15 = !{!"clang version 4.0.0 (trunk 287518) (llvm/trunk 287520)"}
|
|
!16 = !DIExpression()
|
|
!17 = !DILocation(line: 1, column: 18, scope: !2)
|
|
!18 = !DILocation(line: 1, column: 31, scope: !2)
|
|
!19 = !DILocation(line: 5, column: 19, scope: !2)
|
|
!20 = !{!21, !21, i64 0}
|
|
!21 = !{!"int", !22, i64 0}
|
|
!22 = !{!"omnipotent char", !23, i64 0}
|
|
!23 = !{!"Simple C/C++ TBAA"}
|
|
!24 = !DILocation(line: 5, column: 27, scope: !2)
|
|
!25 = !DILocation(line: 7, column: 27, scope: !2)
|
|
!26 = !DILocation(line: 7, column: 17, scope: !2)
|
|
!27 = !DILocation(line: 9, column: 9, scope: !2)
|
|
|
|
; CHECK: file_names[ 1]:
|
|
; CHECK-NEXT: name: "testprog.c"
|
|
; CHECK-NEXT: dir_index: 0
|
|
; CHECK: 0x0000000000000000 2
|
|
; CHECK: 0x0000000000000028 7
|