mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-12 13:30:51 +00:00
[C API] Expose LLVMGetGlobalValueAddress and LLVMGetFunctionAddress.
Patch by Ramkumar Ramachandra <artagnon@gmail.com> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224720 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7b88565334
commit
7bfc61dfe3
@ -170,6 +170,10 @@ void LLVMAddGlobalMapping(LLVMExecutionEngineRef EE, LLVMValueRef Global,
|
||||
|
||||
void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global);
|
||||
|
||||
uint64_t LLVMGetGlobalValueAddress(LLVMExecutionEngineRef EE, const char *Name);
|
||||
|
||||
uint64_t LLVMGetFunctionAddress(LLVMExecutionEngineRef EE, const char *Name);
|
||||
|
||||
/*===-- Operations on memory managers -------------------------------------===*/
|
||||
|
||||
typedef uint8_t *(*LLVMMemoryManagerAllocateCodeSectionCallback)(
|
||||
|
@ -328,6 +328,14 @@ void *LLVMGetPointerToGlobal(LLVMExecutionEngineRef EE, LLVMValueRef Global) {
|
||||
return unwrap(EE)->getPointerToGlobal(unwrap<GlobalValue>(Global));
|
||||
}
|
||||
|
||||
uint64_t LLVMGetGlobalValueAddress(LLVMExecutionEngineRef EE, const char *Name) {
|
||||
return unwrap(EE)->getGlobalValueAddress(Name);
|
||||
}
|
||||
|
||||
uint64_t LLVMGetFunctionAddress(LLVMExecutionEngineRef EE, const char *Name) {
|
||||
return unwrap(EE)->getFunctionAddress(Name);
|
||||
}
|
||||
|
||||
/*===-- Operations on memory managers -------------------------------------===*/
|
||||
|
||||
namespace {
|
||||
|
@ -347,6 +347,44 @@ TEST_F(MCJITCAPITest, simple_function) {
|
||||
EXPECT_EQ(42, functionPointer.usable());
|
||||
}
|
||||
|
||||
TEST_F(MCJITCAPITest, gva) {
|
||||
SKIP_UNSUPPORTED_PLATFORM;
|
||||
|
||||
Module = LLVMModuleCreateWithName("simple_module");
|
||||
LLVMSetTarget(Module, HostTriple.c_str());
|
||||
LLVMValueRef GlobalVar = LLVMAddGlobal(Module, LLVMInt32Type(), "simple_value");
|
||||
LLVMSetInitializer(GlobalVar, LLVMConstInt(LLVMInt32Type(), 42, 0));
|
||||
|
||||
buildMCJITOptions();
|
||||
buildMCJITEngine();
|
||||
buildAndRunPasses();
|
||||
|
||||
union {
|
||||
uint64_t raw;
|
||||
int32_t *usable;
|
||||
} valuePointer;
|
||||
valuePointer.raw = LLVMGetGlobalValueAddress(Engine, "simple_value");
|
||||
|
||||
EXPECT_EQ(42, *valuePointer.usable);
|
||||
}
|
||||
|
||||
TEST_F(MCJITCAPITest, gfa) {
|
||||
SKIP_UNSUPPORTED_PLATFORM;
|
||||
|
||||
buildSimpleFunction();
|
||||
buildMCJITOptions();
|
||||
buildMCJITEngine();
|
||||
buildAndRunPasses();
|
||||
|
||||
union {
|
||||
uint64_t raw;
|
||||
int (*usable)();
|
||||
} functionPointer;
|
||||
functionPointer.raw = LLVMGetFunctionAddress(Engine, "simple_function");
|
||||
|
||||
EXPECT_EQ(42, functionPointer.usable());
|
||||
}
|
||||
|
||||
TEST_F(MCJITCAPITest, custom_memory_manager) {
|
||||
SKIP_UNSUPPORTED_PLATFORM;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user