zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit a2d8f03092419853b6bbcee45ea759ae994cc2d5 (tree)
parent 93528be6b19d608b4a02944e7e599554fc9f1378
Author: Shritesh Bhattarai <shritesh@shritesh.com>
Date:   Sat, 13 Apr 2019 22:28:58 -0500

support extern "wasi" functions

Diffstat:
Msrc/ir.cpp | 9++++++++-
Mstd/os/wasi/core.zig | 6+++---
2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/ir.cpp b/src/ir.cpp @@ -15836,6 +15836,13 @@ static void add_link_lib_symbol(IrAnalyze *ira, Buf *lib_name, Buf *symbol_name, ira->codegen->reported_bad_link_libc_error = true; } + bool is_wasi = ira->codegen->zig_target->os == OsWASI; + if (!is_wasi && buf_eql_str(lib_name, "wasi")) { + ir_add_error_node(ira, source_node, + buf_sprintf("linking against wasi libarry")); + ira->codegen->reported_bad_link_libc_error = true; + } + LinkLib *link_lib = add_link_lib(ira->codegen, lib_name); for (size_t i = 0; i < link_lib->symbols.length; i += 1) { Buf *existing_symbol_name = link_lib->symbols.at(i); @@ -15844,7 +15851,7 @@ static void add_link_lib_symbol(IrAnalyze *ira, Buf *lib_name, Buf *symbol_name, } } - if (!is_libc && !ira->codegen->have_pic && !ira->codegen->reported_bad_link_libc_error) { + if (!is_libc && !ira->codegen->have_pic && !ira->codegen->reported_bad_link_libc_error && !is_wasi) { ErrorMsg *msg = ir_add_error_node(ira, source_node, buf_sprintf("dependency on dynamic library '%s' requires enabling Position Independent Code", buf_ptr(lib_name))); diff --git a/std/os/wasi/core.zig b/std/os/wasi/core.zig @@ -10,8 +10,8 @@ pub const __wasi_ciovec_t = extern struct { pub const __WASI_SIGABRT: __wasi_signal_t = 6; -pub extern fn __wasi_proc_raise(sig: __wasi_signal_t) __wasi_errno_t; +pub extern "wasi" fn __wasi_proc_raise(sig: __wasi_signal_t) __wasi_errno_t; -pub extern fn __wasi_proc_exit(rval: __wasi_exitcode_t) noreturn; +pub extern "wasi" fn __wasi_proc_exit(rval: __wasi_exitcode_t) noreturn; -pub extern fn __wasi_fd_write(fd: __wasi_fd_t, iovs: *const __wasi_ciovec_t, iovs_len: usize, nwritten: *usize) __wasi_errno_t; +pub extern "wasi" fn __wasi_fd_write(fd: __wasi_fd_t, iovs: *const __wasi_ciovec_t, iovs_len: usize, nwritten: *usize) __wasi_errno_t;