aboutsummaryrefslogtreecommitdiff
path: root/src/boot/llvm/llabi.ml
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2010-12-29 16:27:13 -0800
committerGraydon Hoare <[email protected]>2010-12-29 16:27:19 -0800
commit454bf428efa6f581f94f817d9f044d6934af1a0f (patch)
treee8726997e920a608d80526ea06fa7db9bd599594 /src/boot/llvm/llabi.ml
parentrustc: Make parametric return types go through an out pointer (diff)
downloadrust-454bf428efa6f581f94f817d9f044d6934af1a0f.tar.xz
rust-454bf428efa6f581f94f817d9f044d6934af1a0f.zip
Remove LLVM rustboot backend.
Diffstat (limited to 'src/boot/llvm/llabi.ml')
-rw-r--r--src/boot/llvm/llabi.ml94
1 files changed, 0 insertions, 94 deletions
diff --git a/src/boot/llvm/llabi.ml b/src/boot/llvm/llabi.ml
deleted file mode 100644
index 5ff63ba5..00000000
--- a/src/boot/llvm/llabi.ml
+++ /dev/null
@@ -1,94 +0,0 @@
-(*
- * LLVM integration with the Rust runtime.
- *)
-
-type abi = {
- crate_ty: Llvm.lltype;
- task_ty: Llvm.lltype;
- word_ty: Llvm.lltype;
- tydesc_ty: Llvm.lltype;
- rust_start: Llvm.llvalue;
-};;
-
-let declare_abi (llctx:Llvm.llcontext) (llmod:Llvm.llmodule) : abi =
- let i32 = Llvm.i32_type llctx in
- (* FIXME: Use Llvm_target.intptr_type for more platform support. *)
- let word_ty = i32 in
- let p ty = Llvm.pointer_type ty in
-
- let crate_ty =
- (* TODO: other architectures besides x86 *)
- let crate_opaque_ty = Llvm.opaque_type llctx in
- let crate_tyhandle = Llvm.handle_to_type (Llvm.struct_type llctx [|
- i32; (* ptrdiff_t image_base_off *)
- Llvm.pointer_type crate_opaque_ty;(* uintptr_t self_addr *)
- i32; (* ptrdiff_t debug_abbrev_off *)
- i32; (* size_t debug_abbrev_sz *)
- i32; (* ptrdiff_t debug_info_off *)
- i32; (* size_t debug_info_sz *)
- i32; (* size_t activate_glue_off *)
- i32; (* size_t yield_glue_off *)
- i32; (* size_t unwind_glue_off *)
- i32; (* size_t gc_glue_off *)
- i32; (* size_t main_exit_task_glue_off *)
- i32; (* int n_rust_syms *)
- i32; (* int n_c_syms *)
- i32 (* int n_libs *)
- |])
- in
- Llvm.refine_type crate_opaque_ty (Llvm.type_of_handle crate_tyhandle);
- Llvm.type_of_handle crate_tyhandle
- in
- ignore (Llvm.define_type_name "rust_crate" crate_ty llmod);
-
- let task_ty =
- (* TODO: other architectures besides x86 *)
- Llvm.struct_type llctx [|
- i32; (* size_t refcnt *)
- Llvm.pointer_type i32; (* rust_task *_delegate *)
- Llvm.pointer_type i32; (* stk_seg *stk *)
- Llvm.pointer_type i32; (* uintptr_t runtime_sp *)
- Llvm.pointer_type i32; (* uintptr_t rust_sp *)
- Llvm.pointer_type i32; (* rust_rt *rt *)
- Llvm.pointer_type i32 (* rust_crate_cache *cache *)
- |]
- in
- ignore (Llvm.define_type_name "rust_task" task_ty llmod);
-
- (* This is the type_desc struct in rust_internal.h *)
- let tydesc_ty =
- (* TODO: other architectures besides x86 *)
- let tydesc_opaque_ty = Llvm.opaque_type llctx in
- let tydesc_tyhandle = Llvm.handle_to_type (Llvm.struct_type llctx [|
- p (p tydesc_opaque_ty); (* const type_desc **first_param *)
- word_ty; (* size_t size *)
- word_ty; (* size_t align *)
- word_ty; (* uintptr_t copy_glue_off *)
- word_ty; (* uintptr_t drop_glue_off *)
- word_ty; (* uintptr_t free_glue_off *)
- word_ty; (* uintptr_t sever_glue_off *)
- word_ty; (* uintptr_t mark_glue_off *)
- word_ty; (* uintptr_t obj_drop_glue_off *)
- |])
- in
- Llvm.refine_type tydesc_opaque_ty (Llvm.type_of_handle tydesc_tyhandle);
- Llvm.type_of_handle tydesc_tyhandle
- in
- ignore (Llvm.define_type_name "type_desc" tydesc_ty llmod);
-
- let rust_start_ty =
- (* Rust's main function can have several types, so we cast them
- all to uintptr_t. *)
- let main_ty = word_ty in
- let args_ty = [| main_ty; Llvm.pointer_type crate_ty; i32; i32 |] in
- Llvm.function_type i32 args_ty
- in
- {
- crate_ty = crate_ty;
- task_ty = task_ty;
- word_ty = word_ty;
- tydesc_ty = tydesc_ty;
- rust_start = Llvm.declare_function "rust_start" rust_start_ty llmod
- }
-;;
-