From ab392bf9ed34bb8273ff705be8767c5106585ca1 Mon Sep 17 00:00:00 2001 From: Vasily Levchenko Date: Wed, 26 Apr 2017 15:35:07 +0300 Subject: [PATCH] LINK: return occasionally deleted in 7d111c4d extracting debug info on MacOS. This code generates .dSYM folder containing debug info in dwarf format, it is place where debuger lookup symbols and type declarations. --- .../jetbrains/kotlin/backend/konan/LinkStage.kt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt index 337435f3057..e5aec0011ac 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/LinkStage.kt @@ -69,6 +69,7 @@ internal open class MacOSBasedPlatform(distribution: Distribution) : PlatformFlags(distribution) { override val linker = "${distribution.sysRoot}/usr/bin/ld" + private val dsymutil = "${distribution.llvmBin}/llvm-dsymutil" open val osVersionMin = listOf( propertyTargetString("osVersionMinFlagLd"), @@ -90,6 +91,14 @@ internal open class MacOSBasedPlatform(distribution: Distribution) linkerKonanFlags + listOf("-lSystem") } + + open fun dsymutilCommand(executable: ExecutableFile): List { + return listOf(dsymutil, executable) + } + + open fun dsymutilDryRunVerboseCommand(executable: ExecutableFile): List { + return listOf(dsymutil, "-dump-debug-map" ,executable) + } } internal open class LinuxBasedPlatform(distribution: Distribution) @@ -222,6 +231,11 @@ internal class LinkStage(val context: Context) { entryPointSelector runTool(*linkCommand.toTypedArray()) + if (platform is MacOSBasedPlatform && context.shouldContainDebugInfo()) { + if (context.phase?.verbose ?: false) + runTool(*platform.dsymutilDryRunVerboseCommand(executable).toTypedArray()) + runTool(*platform.dsymutilCommand(executable).toTypedArray()) + } return executable }