From 2a5b8f53fe7cb7a4261b765020f9342005046b63 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 31 Oct 2021 12:47:50 +0000 Subject: Add `memmove` and `memset` support for `wasm` --- src/llvm_backend.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'src/llvm_backend.cpp') diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 27914efb2..d21ff8e5a 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -771,6 +771,8 @@ lbProcedure *lb_create_main_procedure(lbModule *m, lbProcedure *startup_runtime) Type *results = alloc_type_tuple(); Type *t_ptr_cstring = alloc_type_pointer(t_cstring); + + bool call_cleanup = true; bool has_args = false; bool is_dll_main = false; @@ -782,10 +784,12 @@ lbProcedure *lb_create_main_procedure(lbModule *m, lbProcedure *startup_runtime) params->Tuple.variables[0] = alloc_entity_param(nullptr, make_token_ident("hinstDLL"), t_rawptr, false, true); params->Tuple.variables[1] = alloc_entity_param(nullptr, make_token_ident("fdwReason"), t_u32, false, true); params->Tuple.variables[2] = alloc_entity_param(nullptr, make_token_ident("lpReserved"), t_rawptr, false, true); + call_cleanup = false; } else if (build_context.metrics.os == TargetOs_windows && build_context.metrics.arch == TargetArch_386) { name = str_lit("mainCRTStartup"); } else if (build_context.metrics.os == TargetOs_wasi) { name = str_lit("_start"); + call_cleanup = false; } else { has_args = true; slice_init(¶ms->Tuple.variables, permanent_allocator(), 2); @@ -876,8 +880,10 @@ lbProcedure *lb_create_main_procedure(lbModule *m, lbProcedure *startup_runtime) } - lbValue cleanup_runtime_value = lb_find_runtime_value(m, str_lit("_cleanup_runtime")); - lb_emit_call(p, cleanup_runtime_value, {}, ProcInlining_none, false); + if (call_cleanup) { + lbValue cleanup_runtime_value = lb_find_runtime_value(m, str_lit("_cleanup_runtime")); + lb_emit_call(p, cleanup_runtime_value, {}, ProcInlining_none, false); + } if (is_dll_main) { @@ -890,7 +896,7 @@ lbProcedure *lb_create_main_procedure(lbModule *m, lbProcedure *startup_runtime) if (build_context.metrics.os == TargetOs_wasi) { - LLVMSetLinkage(p->value, LLVMDLLExportLinkage); + LLVMSetLinkage(p->value, LLVMDLLExportLinkage); } else { LLVMSetLinkage(p->value, LLVMExternalLinkage); } -- cgit v1.2.3