diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2022-03-20 11:40:34 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2022-06-04 11:58:51 +0000 |
| commit | 4b6eb0e63c698094db5506763df44cc83c19f643 (patch) | |
| tree | f1d30b8c10bc6db323b91538745ae8ab8b593910 /contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/TargetProcess/JITLoaderGDB.cpp | |
| parent | 76886853f03395abb680824bcc74e98f83bd477a (diff) | |
Diffstat (limited to 'contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/TargetProcess/JITLoaderGDB.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/TargetProcess/JITLoaderGDB.cpp | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/TargetProcess/JITLoaderGDB.cpp b/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/TargetProcess/JITLoaderGDB.cpp index 43c2a44835fd..4c15e25b1d89 100644 --- a/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/TargetProcess/JITLoaderGDB.cpp +++ b/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/TargetProcess/JITLoaderGDB.cpp @@ -10,6 +10,7 @@ #include "llvm/ExecutionEngine/JITSymbol.h" #include "llvm/Support/BinaryStreamReader.h" +#include "llvm/Support/FormatVariadic.h" #include "llvm/Support/ManagedStatic.h" #include <cstdint> @@ -64,14 +65,23 @@ LLVM_ATTRIBUTE_NOINLINE void __jit_debug_register_code() { } using namespace llvm; +using namespace llvm::orc; // Serialize rendezvous with the debugger as well as access to shared data. ManagedStatic<std::mutex> JITDebugLock; // Register debug object, return error message or null for success. -static void registerJITLoaderGDBImpl(JITTargetAddress Addr, uint64_t Size) { +static void registerJITLoaderGDBImpl(const char *ObjAddr, size_t Size) { + LLVM_DEBUG({ + dbgs() << "Registering debug object with GDB JIT interface " + << formatv("([{0:x16} -- {1:x16}])", + reinterpret_cast<uintptr_t>(ObjAddr), + reinterpret_cast<uintptr_t>(ObjAddr + Size)) + << "\n"; + }); + jit_code_entry *E = new jit_code_entry; - E->symfile_addr = jitTargetAddressToPointer<const char *>(Addr); + E->symfile_addr = ObjAddr; E->symfile_size = Size; E->prev_entry = nullptr; @@ -92,10 +102,26 @@ static void registerJITLoaderGDBImpl(JITTargetAddress Addr, uint64_t Size) { __jit_debug_register_code(); } -extern "C" orc::shared::detail::CWrapperFunctionResult +extern "C" orc::shared::CWrapperFunctionResult +llvm_orc_registerJITLoaderGDBAllocAction(const char *Data, size_t Size) { + using namespace orc::shared; + return WrapperFunction<SPSError()>::handle(nullptr, 0, + [=]() -> Error { + registerJITLoaderGDBImpl(Data, + Size); + return Error::success(); + }) + .release(); +} + +extern "C" orc::shared::CWrapperFunctionResult llvm_orc_registerJITLoaderGDBWrapper(const char *Data, uint64_t Size) { using namespace orc::shared; - return WrapperFunction<void(SPSExecutorAddress, uint64_t)>::handle( - Data, Size, registerJITLoaderGDBImpl) + return WrapperFunction<void(SPSExecutorAddrRange)>::handle( + Data, Size, + [](ExecutorAddrRange R) { + registerJITLoaderGDBImpl(R.Start.toPtr<char *>(), + R.size().getValue()); + }) .release(); } |
