From ee116b1a91693a937153a5adf3f514e3e01eed2d Mon Sep 17 00:00:00 2001 From: Vasily Levchenko Date: Wed, 19 Apr 2017 15:56:53 +0300 Subject: [PATCH] CODEGEN: conversion IR line/column numbering to dwarf one --- .../kotlin/backend/konan/llvm/DebugUtils.kt | 14 ++++++++++++++ .../kotlin/backend/konan/llvm/IrToBitcode.kt | 14 ++------------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/DebugUtils.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/DebugUtils.kt index e224d704e18..9dfd6271a0c 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/DebugUtils.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/DebugUtils.kt @@ -23,6 +23,7 @@ import llvm.LLVMAddNamedMetadataOperand import org.jetbrains.kotlin.backend.konan.Context import org.jetbrains.kotlin.backend.konan.KonanConfigKeys import org.jetbrains.kotlin.backend.konan.KonanVersion +import org.jetbrains.kotlin.ir.SourceManager.FileEntry internal object DWARF { @@ -36,6 +37,19 @@ internal object DWARF { val debugInfoVersion = 3 /* TODO: configurable? */ } + +/** + * File entry starts offsets from zero while dwarf number lines/column starting from 1. + */ +private fun FileEntry.location(offset:Int, offsetToNumber:(Int) -> Int):Int { + return if (offset < 0) -1 + else offsetToNumber(offset) + 1 +} + +internal fun FileEntry.line(offset: Int) = location(offset, this::getLineNumber) + +internal fun FileEntry.column(offset: Int) = location(offset, this::getColumnNumber) + internal fun generateDebugInfoHeader(context: Context) { if (context.shouldContainDebugInfo()) { context.debugInfo.module = DICreateModule( diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt index 2c7cf7b5948..5d0a254ea14 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt @@ -1643,20 +1643,10 @@ internal class CodeGeneratorVisitor(val context: Context) : IrElementVisitorVoid } //-------------------------------------------------------------------------// - private fun IrElement.line(): Int { - return if (this.startOffset < 0) - -1 - else - file().fileEntry.getLineNumber(this.startOffset) - } + private fun IrElement.line() = file().fileEntry.line(this.startOffset) //-------------------------------------------------------------------------// - private fun IrElement.column(): Int { - return if (this.startOffset < 0) - -1 - else - file().fileEntry.getColumnNumber(this.startOffset) - } + private fun IrElement.column() = file().fileEntry.column(this.startOffset) //-------------------------------------------------------------------------// private inline fun debugInfo(element: IrElement, body:() -> T): T {