89ebbaeb6c
- support DICompileUnit
- support DIFIle
- support DISubroutine
- support DIBasicType
- support DILocation
- added gradle build
- debug info bindings are involved in kotlin build
- added binding to DIGetSubprogramLinkName
- added binding to LLVMBuilderGetCurrentFunction
- added reset location
- simple demo added (buildable with gradle)
produces folowing output:
Following pseudo code in sources.
0:123456789012345678901
1: fun main():Int {
2: {foo()}()
3: return 0
4: }
5 fun foo() {}
0:b-backend-dwarf:minamoto@unit-703(0)# ./demo
; ModuleID = 'test'
source_filename = "test"
define i32 @foo(i32) !dbg !3 {
entry:
ret i32 %0, !dbg !7
}
!llvm.dbg.cu = !{!0}
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "konanc", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
!1 = !DIFile(filename: "1.kt", directory: "src")
!2 = !{}
!3 = distinct !DISubprogram(name: "foo", linkageName: "foo:link", scope: null, file: !1, line: 66, type: !4, isLocal: false, isDefinition: true, isOptimized: false, unit: !0, variables: !2)
!4 = !DISubroutineType(types: !5)
!5 = !{!6}
!6 = !DIBasicType(name: "int", size: 32, align: 4)
!7 = !DILocation(line: 42, column: 15, scope: !3)
- demo sharing debug information between several bitcode artifacts
0:b-backend-dwarf:minamoto@unit-703(0)# llvmDebugInfoC/build/exe/demogenerated/demogenerated
; ModuleID = 'test'
source_filename = "test"
define void @foo() !dbg !3 {
entry:
ret void, !dbg !5
}
define void @"main$caller$foo"() !dbg !6 {
entry:
call void @foo(), !dbg !7
ret void
}
define void @main() !dbg !8 {
entry:
call void @"main$caller$foo"(), !dbg !9
ret void, !dbg !10
}
!llvm.dbg.cu = !{!0}
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "konanc", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
!1 = !DIFile(filename: "<stdin>", directory: "")
!2 = !{}
!3 = distinct !DISubprogram(name: "foo", linkageName: "foo", scope: null, file: !1, line: 5, type: !4, isLocal: false, isDefinition: true, isOptimized: false, unit: !0, variables: !2)
!4 = !DISubroutineType(types: !2)
!5 = !DILocation(line: 5, column: 14, scope: !3)
!6 = distinct !DISubprogram(name: "main$caller$foo", linkageName: "main$caller$foo", scope: null, file: !1, line: 2, type: !4, isLocal: false, isDefinition: true, isOptimized: false, unit: !0, variables: !2)
!7 = !DILocation(line: 5, column: 2, scope: !6)
!8 = distinct !DISubprogram(name: "main", linkageName: "main", scope: null, file: !1, line: 1, type: !4, isLocal: false, isDefinition: true, isOptimized: false, unit: !0, variables: !2)
!9 = !DILocation(line: 2, column: 12, scope: !8)
!10 = !DILocation(line: 3, column: 4, scope: !8)
- local variables support
- demo for local variable suppor (TBD some out put here).
; ModuleID = 'test'
source_filename = "test"
define i32 @main() !dbg !3 {
entry:
%0 = alloca i32
call void @llvm.dbg.declare(metadata i32* %0, metadata !5, metadata !7), !dbg !8
store i32 42, i32* %0, !dbg !8
%1 = load i32, i32* %0, !dbg !8
ret i32 %1, !dbg !8
}
; Function Attrs: nounwind readnone
declare void @llvm.dbg.declare(metadata, metadata, metadata) #0
attributes #0 = { nounwind readnone }
!llvm.dbg.cu = !{!0}
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "konanc", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
!1 = !DIFile(filename: "<stdin>", directory: "")
!2 = !{}
!3 = distinct !DISubprogram(name: "main", linkageName: "main", scope: null, file: !1, line: 1, type: !4, isLocal: false, isDefinition: true, isOptimized: false, unit: !0, variables: !2)
!4 = !DISubroutineType(types: !2)
!5 = !DILocalVariable(name: "a", scope: !3, file: !1, line: 2, type: !6)
!6 = !DIBasicType(name: "int", size: 32, align: 4)
!7 = !DIExpression()
!8 = !DILocation(line: 2, column: 1, scope: !3)
29 lines
916 B
Groovy
29 lines
916 B
Groovy
/*
|
|
* Copyright 2010-2017 JetBrains s.r.o.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
include ':dependencies'
|
|
include ':Interop:Indexer'
|
|
include ':Interop:StubGenerator'
|
|
include ':Interop:Runtime'
|
|
include ':InteropExample'
|
|
include ':llvmDebugInfoC'
|
|
include ':backend.native'
|
|
include ':runtime'
|
|
include ':common'
|
|
include ':backend.native:tests'
|
|
include ':tools:helpers'
|
|
include ':tools:gradle-plugin'
|