The `DebugObjectManagerPlugin` implements debugger support for ELF platforms with the GDB JIT Interface. It emits a separate debug object allocation in addition to the LinkGraph's own allocation. This used to happen in the plugin's `notifyEmitted()` callback, i.e. after the LinkGraph's allocation was finalized. In the meantime, it had to block finalization of the corresponding materialization unit to make sure that the debugger can register the object before the code runs. This patch switches the plugin to use an allocation action instead. We can remove the `notifyEmitted()` hook and implement all steps as JITLink passes.
95 lines
4.1 KiB
C++
95 lines
4.1 KiB
C++
//===------ OrcRTBridge.cpp - Executor functions for bootstrap -----===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/ExecutionEngine/Orc/Shared/OrcRTBridge.h"
|
|
|
|
namespace llvm {
|
|
namespace orc {
|
|
namespace rt {
|
|
|
|
const char *SimpleExecutorDylibManagerInstanceName =
|
|
"__llvm_orc_SimpleExecutorDylibManager_Instance";
|
|
const char *SimpleExecutorDylibManagerOpenWrapperName =
|
|
"__llvm_orc_SimpleExecutorDylibManager_open_wrapper";
|
|
const char *SimpleExecutorDylibManagerResolveWrapperName =
|
|
"__llvm_orc_SimpleExecutorDylibManager_resolve_wrapper";
|
|
|
|
const char *SimpleExecutorMemoryManagerInstanceName =
|
|
"__llvm_orc_SimpleExecutorMemoryManager_Instance";
|
|
const char *SimpleExecutorMemoryManagerReserveWrapperName =
|
|
"__llvm_orc_SimpleExecutorMemoryManager_reserve_wrapper";
|
|
const char *SimpleExecutorMemoryManagerInitializeWrapperName =
|
|
"__llvm_orc_SimpleExecutorMemoryManager_initialize_wrapper";
|
|
const char *SimpleExecutorMemoryManagerDeinitializeWrapperName =
|
|
"__llvm_orc_SimpleExecutorMemoryManager_deinitialize_wrapper";
|
|
const char *SimpleExecutorMemoryManagerReleaseWrapperName =
|
|
"__llvm_orc_SimpleExecutorMemoryManager_release_wrapper";
|
|
|
|
const char *ExecutorSharedMemoryMapperServiceInstanceName =
|
|
"__llvm_orc_ExecutorSharedMemoryMapperService_Instance";
|
|
const char *ExecutorSharedMemoryMapperServiceReserveWrapperName =
|
|
"__llvm_orc_ExecutorSharedMemoryMapperService_Reserve";
|
|
const char *ExecutorSharedMemoryMapperServiceInitializeWrapperName =
|
|
"__llvm_orc_ExecutorSharedMemoryMapperService_Initialize";
|
|
const char *ExecutorSharedMemoryMapperServiceDeinitializeWrapperName =
|
|
"__llvm_orc_ExecutorSharedMemoryMapperService_Deinitialize";
|
|
const char *ExecutorSharedMemoryMapperServiceReleaseWrapperName =
|
|
"__llvm_orc_ExecutorSharedMemoryMapperService_Release";
|
|
|
|
const char *MemoryWriteUInt8sWrapperName =
|
|
"__llvm_orc_bootstrap_mem_write_uint8s_wrapper";
|
|
const char *MemoryWriteUInt16sWrapperName =
|
|
"__llvm_orc_bootstrap_mem_write_uint16s_wrapper";
|
|
const char *MemoryWriteUInt32sWrapperName =
|
|
"__llvm_orc_bootstrap_mem_write_uint32s_wrapper";
|
|
const char *MemoryWriteUInt64sWrapperName =
|
|
"__llvm_orc_bootstrap_mem_write_uint64s_wrapper";
|
|
const char *MemoryWritePointersWrapperName =
|
|
"__llvm_orc_bootstrap_mem_write_pointers_wrapper";
|
|
const char *MemoryWriteBuffersWrapperName =
|
|
"__llvm_orc_bootstrap_mem_write_buffers_wrapper";
|
|
|
|
const char *MemoryReadUInt8sWrapperName =
|
|
"__llvm_orc_bootstrap_mem_read_uint8s_wrapper";
|
|
const char *MemoryReadUInt16sWrapperName =
|
|
"__llvm_orc_bootstrap_mem_read_uint16s_wrapper";
|
|
const char *MemoryReadUInt32sWrapperName =
|
|
"__llvm_orc_bootstrap_mem_read_uint32s_wrapper";
|
|
const char *MemoryReadUInt64sWrapperName =
|
|
"__llvm_orc_bootstrap_mem_read_uint64s_wrapper";
|
|
const char *MemoryReadPointersWrapperName =
|
|
"__llvm_orc_bootstrap_mem_read_pointers_wrapper";
|
|
const char *MemoryReadBuffersWrapperName =
|
|
"__llvm_orc_bootstrap_mem_read_buffers_wrapper";
|
|
const char *MemoryReadStringsWrapperName =
|
|
"__llvm_orc_bootstrap_mem_read_strings_wrapper";
|
|
|
|
const char *RegisterEHFrameSectionAllocActionName =
|
|
"llvm_orc_registerEHFrameAllocAction";
|
|
const char *DeregisterEHFrameSectionAllocActionName =
|
|
"llvm_orc_deregisterEHFrameAllocAction";
|
|
|
|
const char *RegisterJITLoaderGDBAllocActionName =
|
|
"llvm_orc_registerJITLoaderGDBAllocAction";
|
|
|
|
const char *RunAsMainWrapperName = "__llvm_orc_bootstrap_run_as_main_wrapper";
|
|
const char *RunAsVoidFunctionWrapperName =
|
|
"__llvm_orc_bootstrap_run_as_void_function_wrapper";
|
|
const char *RunAsIntFunctionWrapperName =
|
|
"__llvm_orc_bootstrap_run_as_int_function_wrapper";
|
|
|
|
} // end namespace rt
|
|
namespace rt_alt {
|
|
const char *UnwindInfoManagerRegisterActionName =
|
|
"orc_rt_alt_UnwindInfoManager_register";
|
|
const char *UnwindInfoManagerDeregisterActionName =
|
|
"orc_rt_alt_UnwindInfoManager_deregister";
|
|
} // end namespace rt_alt
|
|
} // end namespace orc
|
|
} // end namespace llvm
|