mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 12:43:36 +01:00
Expose ExecutionEngine::getTargetData() to c and ocaml bindings.
llvm-svn: 48851
This commit is contained in:
parent
76d6e4baff
commit
0efea4df76
@ -15,6 +15,6 @@ LEVEL := ../../..
|
|||||||
LIBRARYNAME := llvm_executionengine
|
LIBRARYNAME := llvm_executionengine
|
||||||
DONT_BUILD_RELINKED := 1
|
DONT_BUILD_RELINKED := 1
|
||||||
UsedComponents := executionengine jit interpreter native
|
UsedComponents := executionengine jit interpreter native
|
||||||
UsedOcamlInterfaces := llvm
|
UsedOcamlInterfaces := llvm llvm_target
|
||||||
|
|
||||||
include ../Makefile.ocaml
|
include ../Makefile.ocaml
|
||||||
|
@ -82,6 +82,9 @@ module ExecutionEngine = struct
|
|||||||
= "llvm_ee_run_function_as_main"
|
= "llvm_ee_run_function_as_main"
|
||||||
external free_machine_code: Llvm.llvalue -> t -> unit
|
external free_machine_code: Llvm.llvalue -> t -> unit
|
||||||
= "llvm_ee_free_machine_code"
|
= "llvm_ee_free_machine_code"
|
||||||
|
|
||||||
|
external target_data: t -> Llvm_target.TargetData.t
|
||||||
|
= "LLVMGetExecutionEngineTargetData"
|
||||||
|
|
||||||
(* The following are not bound. Patches are welcome.
|
(* The following are not bound. Patches are welcome.
|
||||||
|
|
||||||
|
@ -147,4 +147,8 @@ module ExecutionEngine: sig
|
|||||||
(** [free_machine_code f ee] releases the memory in the execution engine [ee]
|
(** [free_machine_code f ee] releases the memory in the execution engine [ee]
|
||||||
used to store the machine code for the function [f]. *)
|
used to store the machine code for the function [f]. *)
|
||||||
val free_machine_code: Llvm.llvalue -> t -> unit
|
val free_machine_code: Llvm.llvalue -> t -> unit
|
||||||
|
|
||||||
|
(** [target_data ee] is the target data owned by the execution engine
|
||||||
|
[ee]. *)
|
||||||
|
val target_data: t -> Llvm_target.TargetData.t
|
||||||
end
|
end
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#define LLVM_C_EXECUTIONENGINE_H
|
#define LLVM_C_EXECUTIONENGINE_H
|
||||||
|
|
||||||
#include "llvm-c/Core.h"
|
#include "llvm-c/Core.h"
|
||||||
|
#include "llvm-c/Target.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@ -88,6 +89,8 @@ int LLVMRemoveModuleProvider(LLVMExecutionEngineRef EE,
|
|||||||
int LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name,
|
int LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name,
|
||||||
LLVMValueRef *OutFn);
|
LLVMValueRef *OutFn);
|
||||||
|
|
||||||
|
LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,3 +187,7 @@ int LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name,
|
|||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE) {
|
||||||
|
return wrap(unwrap(EE)->getTargetData());
|
||||||
|
}
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
(* RUN: %ocamlc -warn-error A llvm.cma llvm_executionengine.cma %s -o %t
|
(* RUN: %ocamlc -warn-error A llvm.cma llvm_target.cma llvm_executionengine.cma %s -o %t
|
||||||
* RUN: ./%t %t.bc
|
* RUN: ./%t %t.bc
|
||||||
*)
|
*)
|
||||||
|
|
||||||
open Llvm
|
open Llvm
|
||||||
open Llvm_executionengine
|
open Llvm_executionengine
|
||||||
|
open Llvm_target
|
||||||
|
|
||||||
(* Note that this takes a moment to link, so it's best to keep the number of
|
(* Note that this takes a moment to link, so it's best to keep the number of
|
||||||
individual tests low. *)
|
individual tests low. *)
|
||||||
@ -92,6 +93,13 @@ let test_executionengine () =
|
|||||||
|
|
||||||
(* run_static_dtors *)
|
(* run_static_dtors *)
|
||||||
ExecutionEngine.run_static_dtors ee;
|
ExecutionEngine.run_static_dtors ee;
|
||||||
|
|
||||||
|
(* Show that the target data binding links and runs.*)
|
||||||
|
let td = ExecutionEngine.target_data ee in
|
||||||
|
|
||||||
|
(* Demonstrate that a garbage pointer wasn't returned. *)
|
||||||
|
let ty = intptr_type td in
|
||||||
|
if ty != i32_type && ty != i64_type then bomb "target_data did not work";
|
||||||
|
|
||||||
(* dispose *)
|
(* dispose *)
|
||||||
ExecutionEngine.dispose ee
|
ExecutionEngine.dispose ee
|
||||||
|
Loading…
Reference in New Issue
Block a user