authorgravatar for shritesh@shritesh.comShritesh Bhattarai <shritesh@shritesh.com> 2019-04-13 22:28:58-05:00
committergravatar for shritesh@shritesh.comShritesh Bhattarai <shritesh@shritesh.com> 2019-04-13 22:28:58-05:00
loga2d8f03092419853b6bbcee45ea759ae994cc2d5
treebf8ede52d1c3dd6cc2eb7148d8945321fc81ea82
parent93528be6b19d608b4a02944e7e599554fc9f1378

support extern "wasi" functions


2 files changed, 11 insertions(+), 4 deletions(-)

src/ir.cpp+8-1
...@@ -15836,6 +15836,13 @@ static void add_link_lib_symbol(IrAnalyze *ira, Buf *lib_name, Buf *symbol_name,...@@ -15836,6 +15836,13 @@ static void add_link_lib_symbol(IrAnalyze *ira, Buf *lib_name, Buf *symbol_name,
15836 ira->codegen->reported_bad_link_libc_error = true;15836 ira->codegen->reported_bad_link_libc_error = true;
15837 }15837 }
1583815838
15839 bool is_wasi = ira->codegen->zig_target->os == OsWASI;
15840 if (!is_wasi && buf_eql_str(lib_name, "wasi")) {
15841 ir_add_error_node(ira, source_node,
15842 buf_sprintf("linking against wasi libarry"));
15843 ira->codegen->reported_bad_link_libc_error = true;
15844 }
15845
15839 LinkLib *link_lib = add_link_lib(ira->codegen, lib_name);15846 LinkLib *link_lib = add_link_lib(ira->codegen, lib_name);
15840 for (size_t i = 0; i < link_lib->symbols.length; i += 1) {15847 for (size_t i = 0; i < link_lib->symbols.length; i += 1) {
15841 Buf *existing_symbol_name = link_lib->symbols.at(i);15848 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,...@@ -15844,7 +15851,7 @@ static void add_link_lib_symbol(IrAnalyze *ira, Buf *lib_name, Buf *symbol_name,
15844 }15851 }
15845 }15852 }
1584615853
15847 if (!is_libc && !ira->codegen->have_pic && !ira->codegen->reported_bad_link_libc_error) {15854 if (!is_libc && !ira->codegen->have_pic && !ira->codegen->reported_bad_link_libc_error && !is_wasi) {
15848 ErrorMsg *msg = ir_add_error_node(ira, source_node,15855 ErrorMsg *msg = ir_add_error_node(ira, source_node,
15849 buf_sprintf("dependency on dynamic library '%s' requires enabling Position Independent Code",15856 buf_sprintf("dependency on dynamic library '%s' requires enabling Position Independent Code",
15850 buf_ptr(lib_name)));15857 buf_ptr(lib_name)));
std/os/wasi/core.zig+3-3
...@@ -10,8 +10,8 @@ pub const __wasi_ciovec_t = extern struct {...@@ -10,8 +10,8 @@ pub const __wasi_ciovec_t = extern struct {
1010
11pub const __WASI_SIGABRT: __wasi_signal_t = 6;11pub const __WASI_SIGABRT: __wasi_signal_t = 6;
1212
13pub extern fn __wasi_proc_raise(sig: __wasi_signal_t) __wasi_errno_t;13pub extern "wasi" fn __wasi_proc_raise(sig: __wasi_signal_t) __wasi_errno_t;
1414
15pub extern fn __wasi_proc_exit(rval: __wasi_exitcode_t) noreturn;15pub extern "wasi" fn __wasi_proc_exit(rval: __wasi_exitcode_t) noreturn;
1616
17pub extern fn __wasi_fd_write(fd: __wasi_fd_t, iovs: *const __wasi_ciovec_t, iovs_len: usize, nwritten: *usize) __wasi_errno_t;17pub extern "wasi" fn __wasi_fd_write(fd: __wasi_fd_t, iovs: *const __wasi_ciovec_t, iovs_len: usize, nwritten: *usize) __wasi_errno_t;