1
0
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:
Erick Tryzelaar 2008-03-27 00:27:14 +00:00
parent 76d6e4baff
commit 0efea4df76
6 changed files with 24 additions and 2 deletions

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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
} }

View File

@ -187,3 +187,7 @@ int LLVMFindFunction(LLVMExecutionEngineRef EE, const char *Name,
} }
return 1; return 1;
} }
LLVMTargetDataRef LLVMGetExecutionEngineTargetData(LLVMExecutionEngineRef EE) {
return wrap(unwrap(EE)->getTargetData());
}

View File

@ -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