mirror of
https://github.com/fluencelabs/wasmer
synced 2025-06-25 22:51:32 +00:00
Add some syscalls
This commit is contained in:
@ -150,7 +150,7 @@
|
|||||||
```
|
```
|
||||||
- <a name="exit"></a>exit - _[__syscall1](#__syscall1)_ [:top:](#emscripten-syscalls)
|
- <a name="exit"></a>exit - _[__syscall1](#__syscall1)_ [:top:](#emscripten-syscalls)
|
||||||
```rust
|
```rust
|
||||||
fn exit(error_code: usize)
|
fn exit(status: c_int)
|
||||||
```
|
```
|
||||||
- <a name="faccessat"></a>faccessat - _[__syscall307](#__syscall307)_ [:top:](#emscripten-syscalls)
|
- <a name="faccessat"></a>faccessat - _[__syscall307](#__syscall307)_ [:top:](#emscripten-syscalls)
|
||||||
```rust
|
```rust
|
||||||
@ -289,7 +289,7 @@ fn exit(error_code: usize)
|
|||||||
```
|
```
|
||||||
- <a name="open"></a>open - _[__syscall5](#__syscall5)_ [:top:](#emscripten-syscalls)
|
- <a name="open"></a>open - _[__syscall5](#__syscall5)_ [:top:](#emscripten-syscalls)
|
||||||
```rust
|
```rust
|
||||||
fn open(pathname: *const char, flags: usize, mode: usize) -> usize
|
fn open(path: *const c_char, oflag: c_int, ...) -> c_int
|
||||||
```
|
```
|
||||||
- <a name="openat"></a>openat - _[__syscall295](#__syscall295)_ [:top:](#emscripten-syscalls)
|
- <a name="openat"></a>openat - _[__syscall295](#__syscall295)_ [:top:](#emscripten-syscalls)
|
||||||
```rust
|
```rust
|
||||||
|
@ -3,6 +3,7 @@ use crate::webassembly::{ImportObject, ImportValue};
|
|||||||
mod abort;
|
mod abort;
|
||||||
mod printf;
|
mod printf;
|
||||||
mod putchar;
|
mod putchar;
|
||||||
|
mod syscalls;
|
||||||
|
|
||||||
pub fn generate_emscripten_env<'a, 'b>() -> ImportObject<&'a str, &'b str> {
|
pub fn generate_emscripten_env<'a, 'b>() -> ImportObject<&'a str, &'b str> {
|
||||||
let mut import_object = ImportObject::new();
|
let mut import_object = ImportObject::new();
|
||||||
@ -10,6 +11,10 @@ pub fn generate_emscripten_env<'a, 'b>() -> ImportObject<&'a str, &'b str> {
|
|||||||
import_object.set("env", "putchar", ImportValue::Func(putchar::putchar as *const u8));
|
import_object.set("env", "putchar", ImportValue::Func(putchar::putchar as *const u8));
|
||||||
import_object.set("env", "abort", ImportValue::Func(abort::abort as *const u8));
|
import_object.set("env", "abort", ImportValue::Func(abort::abort as *const u8));
|
||||||
import_object.set("env", "_abort", ImportValue::Func(abort::abort as *const u8));
|
import_object.set("env", "_abort", ImportValue::Func(abort::abort as *const u8));
|
||||||
|
// SYSCALLS
|
||||||
|
import_object.set("env", "__syscall1", ImportValue::Func(syscalls::__syscall1 as *const u8));
|
||||||
|
import_object.set("env", "__syscall3", ImportValue::Func(syscalls::__syscall3 as *const u8));
|
||||||
|
import_object.set("env", "__syscall5", ImportValue::Func(syscalls::__syscall5 as *const u8));
|
||||||
import_object
|
import_object
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1
src/linkers/emscripten/syscalls/darwin/mod.rs
Normal file
1
src/linkers/emscripten/syscalls/darwin/mod.rs
Normal file
@ -0,0 +1 @@
|
|||||||
|
pub mod syscalls;
|
25
src/linkers/emscripten/syscalls/darwin/syscalls.rs
Normal file
25
src/linkers/emscripten/syscalls/darwin/syscalls.rs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
use libc::{
|
||||||
|
c_int,
|
||||||
|
c_void,
|
||||||
|
c_char,
|
||||||
|
size_t,
|
||||||
|
ssize_t,
|
||||||
|
open,
|
||||||
|
exit,
|
||||||
|
read,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// exit
|
||||||
|
pub extern "C" fn __syscall1(status: c_int) {
|
||||||
|
unsafe { exit(status); }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// read
|
||||||
|
pub extern "C" fn __syscall3(fd: c_int, buf: *mut c_void, count: size_t) -> ssize_t {
|
||||||
|
unsafe { read(fd, buf, count) }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// open
|
||||||
|
pub extern "C" fn __syscall5(path: *const c_char, oflag: c_int) -> c_int {
|
||||||
|
unsafe { open(path, oflag) }
|
||||||
|
}
|
3
src/linkers/emscripten/syscalls/mod.rs
Normal file
3
src/linkers/emscripten/syscalls/mod.rs
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
mod darwin;
|
||||||
|
|
||||||
|
pub use self::darwin::syscalls::*;
|
Reference in New Issue
Block a user