From bebede9e4f748dd4a48f2dd7e67576c9442c4253 Mon Sep 17 00:00:00 2001 From: Vasily Levchenko Date: Mon, 31 May 2021 13:09:41 +0200 Subject: [PATCH] [codegeneration][debug info] enchance debugger behaviour for paramterless when - generates tramboline like a11b07f6c37 on -Xg-generate-when-marker=enable - fixes issue KT-33364 --- .../cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt | 9 +++++++++ .../jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.kt | 6 ++++++ .../org/jetbrains/kotlin/backend/konan/KonanConfig.kt | 1 + .../kotlin/backend/konan/KonanConfigurationKeys.kt | 2 ++ .../jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt | 6 ++++++ 5 files changed, 24 insertions(+) diff --git a/kotlin-native/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt b/kotlin-native/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt index 44986012856..69fd25137ab 100644 --- a/kotlin-native/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt +++ b/kotlin-native/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2Native.kt @@ -178,6 +178,15 @@ class K2Native : CLICompiler() { null } }) + putIfNotNull(GENERATE_WHEN_MARKER, when (val it = arguments.generateWhenMarkerString) { + "enable" -> true + "disable" -> false + null -> null + else -> { + configuration.report(ERROR, "Unsupported -Xg-generate-when-marker= value: $it. Possible values are 'enable'/'disable'") + null + } + }) put(STATIC_FRAMEWORK, selectFrameworkType(configuration, arguments, outputKind)) put(OVERRIDE_CLANG_OPTIONS, arguments.clangOptions.toNonNullList()) put(ALLOCATION_MODE, arguments.allocator) diff --git a/kotlin-native/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.kt b/kotlin-native/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.kt index e6422a60f71..68857495adf 100644 --- a/kotlin-native/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.kt +++ b/kotlin-native/backend.native/cli.bc/src/org/jetbrains/kotlin/cli/bc/K2NativeCompilerArguments.kt @@ -171,6 +171,12 @@ class K2NativeCompilerArguments : CommonCompilerArguments() { description = """generates marker of inlined function body on call site to make debugger breakpoint resolution more accurate""" ) var generateInlinedFunctionMarkerString: String? = null + @Argument( + value = "-Xg-generate-when-marker", + valueDescription = "{disable|enable}", + description = """generates marker of when to make debugger breakpoint resolution more accurate""" + ) + var generateWhenMarkerString: String? = null @Argument( diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt index e4b4943c7e9..8ce4424d8a2 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfig.kt @@ -44,6 +44,7 @@ class KonanConfig(val project: Project, val configuration: CompilerConfiguration val lightDebug: Boolean = configuration.get(KonanConfigKeys.LIGHT_DEBUG) ?: target.family.isAppleFamily // Default is true for Apple targets. val generateInlinedBodyTrampoline = debug && configuration.get(KonanConfigKeys.GENERATE_INLINED_FUNCTION_BODY_MARKER) ?: false + val generateWhenTrampoline = debug && configuration.get(KonanConfigKeys.GENERATE_WHEN_MARKER) ?: false val memoryModel: MemoryModel get() = configuration.get(KonanConfigKeys.MEMORY_MODEL)!! val destroyRuntimeMode: DestroyRuntimeMode get() = configuration.get(KonanConfigKeys.DESTROY_RUNTIME_MODE)!! diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfigurationKeys.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfigurationKeys.kt index c72e1adb0ee..f3e3ca773ee 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfigurationKeys.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/KonanConfigurationKeys.kt @@ -58,6 +58,8 @@ class KonanConfigKeys { = CompilerConfigurationKey.create("add light debug information") val GENERATE_INLINED_FUNCTION_BODY_MARKER: CompilerConfigurationKey = CompilerConfigurationKey.create("generates inlined function body marker on call site") + val GENERATE_WHEN_MARKER: CompilerConfigurationKey + = CompilerConfigurationKey.create("generates when marker on call site") val LINKER_ARGS: CompilerConfigurationKey> = CompilerConfigurationKey.create("additional linker arguments") val LIST_PHASES: CompilerConfigurationKey diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt index 4f655aa2318..f4957c8adb4 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/IrToBitcode.kt @@ -1177,6 +1177,12 @@ internal class CodeGeneratorVisitor(val context: Context, val lifetimes: Map