From 65bebd305846ebcf70381031913614ba297ff5e2 Mon Sep 17 00:00:00 2001 From: Pavel Kunyavskiy Date: Thu, 17 Jun 2021 18:07:22 +0300 Subject: [PATCH] [K/N] Support AddressToSymbol using dladdr, if availible --- .../runtime/src/main/cpp/ExecFormat.cpp | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/kotlin-native/runtime/src/main/cpp/ExecFormat.cpp b/kotlin-native/runtime/src/main/cpp/ExecFormat.cpp index d9f71f54417..7a2ddcc6617 100644 --- a/kotlin-native/runtime/src/main/cpp/ExecFormat.cpp +++ b/kotlin-native/runtime/src/main/cpp/ExecFormat.cpp @@ -324,6 +324,26 @@ extern "C" bool AddressToSymbol(const void* address, char* resultBuffer, size_t return theExeSymbolTable->functionAddressToSymbol(address, resultBuffer, resultBufferSize); } +#elif __has_include("dlfcn.h") + +#include + +extern "C" bool AddressToSymbol(const void* address, char* resultBuffer, size_t resultBufferSize) { + if (address == nullptr) return false; + const char *result = nullptr; + Dl_info info; + if (dladdr(address, &info) != 0 && info.dli_sname != nullptr) { + result = info.dli_sname; + } + if (result == nullptr) { + return false; + } else { + strncpy(resultBuffer, result, resultBufferSize); + resultBuffer[resultBufferSize - 1] = '\0'; + return true; + } +} + #else extern "C" bool AddressToSymbol(const void* address, char* resultBuffer, size_t resultBufferSize) {