1#[cfg(unix)]
2mod unix;
3
4#[cfg(windows)]
5mod windows;
6
7#[cfg(unix)]
8pub use self::unix::*;
9
10#[cfg(windows)]
11pub use self::windows::*;
12
13use crate::{
14 utils::{copy_stat_into_wasm, get_cstr_path, get_current_directory},
15 EmEnv,
16};
17
18use super::varargs::VarArgs;
19use byteorder::{ByteOrder, LittleEndian};
20use libc::{
23 c_int,
24 c_void,
25 chdir,
26 close,
28 dup2,
29 exit,
30 fstat,
31 getpid,
32 lseek,
35 read,
37 rename,
38 rmdir,
41 stat,
43 write,
44 };
46
47use super::env;
48#[allow(unused_imports)]
49use std::io::Error;
50use std::slice;
51use wasmer::{FunctionEnvMut, WasmPtr};
52
53pub fn ___syscall1(ctx: FunctionEnvMut<EmEnv>, _which: c_int, mut varargs: VarArgs) {
55 debug!("emscripten::___syscall1 (exit) {}", _which);
56 let status: i32 = varargs.get(&ctx);
57 unsafe {
58 exit(status);
59 }
60}
61
62pub fn ___syscall3(ctx: FunctionEnvMut<EmEnv>, _which: i32, mut varargs: VarArgs) -> i32 {
64 debug!("emscripten::___syscall3 (read) {}", _which);
66 let fd: i32 = varargs.get(&ctx);
67 let buf: u32 = varargs.get(&ctx);
68 let count: i32 = varargs.get(&ctx);
69 debug!("=> fd: {}, buf_offset: {}, count: {}", fd, buf, count);
70 let memory = ctx.data().memory(0);
71 let buf_addr = emscripten_memory_pointer!(memory.view(&ctx), buf) as *mut c_void;
72 let ret = unsafe { read(fd, buf_addr, count as _) };
73 debug!("=> ret: {}", ret);
74 ret as _
75}
76
77pub fn ___syscall4(ctx: FunctionEnvMut<EmEnv>, _which: c_int, mut varargs: VarArgs) -> c_int {
79 debug!("emscripten::___syscall4 (write) {}", _which);
80 let fd: i32 = varargs.get(&ctx);
81 let buf: i32 = varargs.get(&ctx);
82 let count: i32 = varargs.get(&ctx);
83 debug!("=> fd: {}, buf: {}, count: {}", fd, buf, count);
84 let memory = ctx.data().memory(0);
85 let buf_addr = emscripten_memory_pointer!(memory.view(&ctx), buf) as *const c_void;
86 unsafe { write(fd, buf_addr, count as _) as i32 }
87}
88
89pub fn ___syscall6(ctx: FunctionEnvMut<EmEnv>, _which: c_int, mut varargs: VarArgs) -> c_int {
91 debug!("emscripten::___syscall6 (close) {}", _which);
92 let fd: i32 = varargs.get(&ctx);
93 debug!("fd: {}", fd);
94 unsafe { close(fd) }
95}
96
97pub fn ___syscall12(ctx: FunctionEnvMut<EmEnv>, _which: c_int, mut varargs: VarArgs) -> c_int {
99 debug!("emscripten::___syscall12 (chdir) {}", _which);
100 let path_ptr = varargs.get_str(&ctx);
101 let real_path_owned = get_cstr_path(ctx, path_ptr as *const _);
102 let real_path = if let Some(ref rp) = real_path_owned {
103 rp.as_c_str().as_ptr()
104 } else {
105 path_ptr
106 };
107 let ret = unsafe { chdir(real_path) };
108 debug!(
109 "=> path: {:?}, ret: {}",
110 unsafe { std::ffi::CStr::from_ptr(real_path) },
111 ret
112 );
113 ret
114}
115
116pub fn ___syscall10(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
117 debug!("emscripten::___syscall10");
118 -1
119}
120
121pub fn ___syscall14(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
122 debug!("emscripten::___syscall14");
123 -1
124}
125
126pub fn ___syscall15(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
127 debug!("emscripten::___syscall15");
128 -1
129}
130
131pub fn ___syscall20(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
133 debug!("emscripten::___syscall20 (getpid)");
134 unsafe { getpid() }
135}
136
137pub fn ___syscall21(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
138 debug!("emscripten::___syscall21");
139 -1
140}
141
142pub fn ___syscall25(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
143 debug!("emscripten::___syscall25");
144 -1
145}
146
147pub fn ___syscall29(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
148 debug!("emscripten::___syscall29");
149 -1
150}
151
152pub fn ___syscall32(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
153 debug!("emscripten::___syscall32");
154 -1
155}
156
157pub fn ___syscall33(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
158 debug!("emscripten::___syscall33");
159 -1
160}
161
162pub fn ___syscall36(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
163 debug!("emscripten::___syscall36");
164 -1
165}
166
167pub fn ___syscall38(mut ctx: FunctionEnvMut<EmEnv>, _which: c_int, mut varargs: VarArgs) -> i32 {
169 debug!("emscripten::___syscall38 (rename)");
170 let old_path = varargs.get_str(&ctx);
171 let new_path = varargs.get_str(&ctx);
172 let real_old_path_owned = get_cstr_path(ctx.as_mut(), old_path as *const _);
173 let real_old_path = if let Some(ref rp) = real_old_path_owned {
174 rp.as_c_str().as_ptr()
175 } else {
176 old_path
177 };
178 let real_new_path_owned = get_cstr_path(ctx, new_path as *const _);
179 let real_new_path = if let Some(ref rp) = real_new_path_owned {
180 rp.as_c_str().as_ptr()
181 } else {
182 new_path
183 };
184 let result = unsafe { rename(real_old_path, real_new_path) };
185 debug!(
186 "=> old_path: {}, new_path: {}, result: {}",
187 unsafe { std::ffi::CStr::from_ptr(real_old_path).to_str().unwrap() },
188 unsafe { std::ffi::CStr::from_ptr(real_new_path).to_str().unwrap() },
189 result
190 );
191 result
192}
193
194pub fn ___syscall40(ctx: FunctionEnvMut<EmEnv>, _which: c_int, mut varargs: VarArgs) -> c_int {
196 debug!("emscripten::___syscall40 (rmdir)");
197 let pathname_addr = varargs.get_str(&ctx);
198 let real_path_owned = get_cstr_path(ctx, pathname_addr as *const _);
199 let real_path = if let Some(ref rp) = real_path_owned {
200 rp.as_c_str().as_ptr()
201 } else {
202 pathname_addr
203 };
204 unsafe { rmdir(real_path) }
205}
206
207pub fn ___syscall42(ctx: FunctionEnvMut<EmEnv>, _which: c_int, mut varargs: VarArgs) -> c_int {
209 debug!("emscripten::___syscall42 (pipe)");
210 let fd_offset: u32 = varargs.get(&ctx);
212
213 let memory = ctx.data().memory(0);
214 let emscripten_memory = memory.view(&ctx);
215
216 let mut fd_vec: [c_int; 2] = WasmPtr::<[c_int; 2]>::new(fd_offset)
218 .deref(&emscripten_memory)
219 .read()
220 .unwrap();
221
222 let fd_ptr = fd_vec.as_mut_ptr();
224
225 #[cfg(target_os = "windows")]
227 let result: c_int = unsafe { libc::pipe(fd_ptr, 2048, 0) };
228 #[cfg(not(target_os = "windows"))]
229 let result: c_int = unsafe { libc::pipe(fd_ptr) };
230 if result == -1 {
231 debug!("=> os error: {}", Error::last_os_error());
232 }
233 result
234}
235
236pub fn ___syscall51(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
237 debug!("emscripten::___syscall51");
238 -1
239}
240
241pub fn ___syscall52(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
242 debug!("emscripten::___syscall52");
243 -1
244}
245
246pub fn ___syscall53(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
247 debug!("emscripten::___syscall53");
248 -1
249}
250
251pub fn ___syscall60(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
252 debug!("emscripten::___syscall60");
253 -1
254}
255
256pub fn ___syscall63(ctx: FunctionEnvMut<EmEnv>, _which: c_int, mut varargs: VarArgs) -> c_int {
258 debug!("emscripten::___syscall63 (dup2) {}", _which);
259
260 let src: i32 = varargs.get(&ctx);
261 let dst: i32 = varargs.get(&ctx);
262
263 unsafe { dup2(src, dst) }
264}
265
266pub fn ___syscall64(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
268 debug!("emscripten::___syscall64 (getppid)");
269 unsafe { getpid() }
270}
271
272pub fn ___syscall66(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
273 debug!("emscripten::___syscall66");
274 -1
275}
276
277pub fn ___syscall75(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
278 debug!("emscripten::___syscall75");
279 -1
280}
281
282pub fn ___syscall91(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
283 debug!("emscripten::___syscall91 - stub");
284 0
285}
286
287pub fn ___syscall96(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
288 debug!("emscripten::___syscall96");
289 -1
290}
291
292pub fn ___syscall97(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
293 debug!("emscripten::___syscall97");
294 -1
295}
296
297pub fn ___syscall110(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
298 debug!("emscripten::___syscall110");
299 -1
300}
301
302pub fn ___syscall121(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
303 debug!("emscripten::___syscall121");
304 -1
305}
306
307pub fn ___syscall125(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
308 debug!("emscripten::___syscall125");
309 -1
310}
311
312pub fn ___syscall133(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
313 debug!("emscripten::___syscall133");
314 -1
315}
316
317pub fn ___syscall144(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
318 debug!("emscripten::___syscall144");
319 -1
320}
321
322pub fn ___syscall147(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
323 debug!("emscripten::___syscall147");
324 -1
325}
326
327pub fn ___syscall150(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
328 debug!("emscripten::___syscall150");
329 -1
330}
331
332pub fn ___syscall151(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
333 debug!("emscripten::___syscall151");
334 -1
335}
336
337pub fn ___syscall152(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
338 debug!("emscripten::___syscall152");
339 -1
340}
341
342pub fn ___syscall153(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
343 debug!("emscripten::___syscall153");
344 -1
345}
346
347pub fn ___syscall163(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
348 debug!("emscripten::___syscall163");
349 -1
350}
351
352pub fn ___syscall183(mut ctx: FunctionEnvMut<EmEnv>, _which: c_int, mut varargs: VarArgs) -> i32 {
354 debug!("emscripten::___syscall183");
355 let buf_offset: WasmPtr<libc::c_char> = varargs.get(&ctx);
356 let _size: c_int = varargs.get(&ctx);
357 let path = get_current_directory(ctx.as_mut());
358 let path_string = path.unwrap().display().to_string();
359 let len = path_string.len();
360 let memory = ctx.data().memory(0);
361 let memory = memory.view(&ctx);
362
363 let buf_writer = buf_offset.slice(&memory, len as u32 + 1).unwrap();
364 for (i, byte) in path_string.bytes().enumerate() {
365 buf_writer.index(i as u64).write(byte as _).unwrap();
366 }
367 buf_writer.index(len as u64).write(0).unwrap();
368 buf_offset.offset() as i32
369}
370
371pub fn ___syscall192(mut ctx: FunctionEnvMut<EmEnv>, _which: c_int, mut varargs: VarArgs) -> c_int {
373 debug!("emscripten::___syscall192 (mmap2) {}", _which);
374 let _addr: i32 = varargs.get(&ctx);
375 let len: u32 = varargs.get(&ctx);
376 let _prot: i32 = varargs.get(&ctx);
377 let _flags: i32 = varargs.get(&ctx);
378 let fd: i32 = varargs.get(&ctx);
379 let _off: i32 = varargs.get(&ctx);
380 debug!(
381 "=> addr: {}, len: {}, prot: {}, flags: {}, fd: {}, off: {}",
382 _addr, len, _prot, _flags, fd, _off
383 );
384
385 if fd == -1 {
386 let ptr = env::call_memalign(&mut ctx, 16384, len);
387 if ptr == 0 {
388 return -12;
390 }
391 let memory = ctx.data().memory(0);
392 let real_ptr = emscripten_memory_pointer!(memory.view(&ctx), ptr) as *const u8;
393 env::call_memset(&mut ctx, ptr, 0, len);
394 for i in 0..(len as usize) {
395 unsafe {
396 assert_eq!(*real_ptr.add(i), 0);
397 }
398 }
399 debug!("=> ptr: {}", ptr);
400 ptr as i32
401 } else {
402 -19
404 }
405}
406
407pub fn ___syscall140(ctx: FunctionEnvMut<EmEnv>, _which: i32, mut varargs: VarArgs) -> i32 {
409 debug!("emscripten::___syscall140 (lseek) {}", _which);
411 let fd: i32 = varargs.get(&ctx);
412 let _offset_high: u32 = varargs.get(&ctx); let offset_low: u32 = varargs.get(&ctx);
414 let result_ptr_value: WasmPtr<i64> = varargs.get(&ctx);
415 let whence: i32 = varargs.get(&ctx);
416 let offset = offset_low;
417 let ret = unsafe { lseek(fd, offset as _, whence) as i64 };
418 let memory = ctx.data().memory(0);
419 let memory = memory.view(&ctx);
420
421 let result_ptr = result_ptr_value.deref(&memory);
422 result_ptr.write(ret).unwrap();
423
424 debug!(
425 "=> fd: {}, offset: {}, result: {}, whence: {} = {}\nlast os error: {}",
426 fd,
427 offset,
428 ret,
429 whence,
430 0,
431 Error::last_os_error(),
432 );
433 0
434}
435
436#[allow(clippy::cast_ptr_alignment)]
438pub fn ___syscall145(ctx: FunctionEnvMut<EmEnv>, _which: c_int, mut varargs: VarArgs) -> i32 {
439 debug!("emscripten::___syscall145 (readv) {}", _which);
441
442 let fd: i32 = varargs.get(&ctx);
443 let iov: i32 = varargs.get(&ctx);
444 let iovcnt: i32 = varargs.get(&ctx);
445
446 #[repr(C)]
447 struct GuestIovec {
448 iov_base: i32,
449 iov_len: i32,
450 }
451
452 debug!("=> fd: {}, iov: {}, iovcnt = {}", fd, iov, iovcnt);
453 let mut ret = 0;
454 unsafe {
455 for i in 0..iovcnt {
456 let memory = ctx.data().memory(0);
457 let guest_iov_addr =
458 emscripten_memory_pointer!(memory.view(&ctx), (iov + i * 8)) as *mut GuestIovec;
459 let iov_base = emscripten_memory_pointer!(memory.view(&ctx), (*guest_iov_addr).iov_base)
460 as *mut c_void;
461 let iov_len = (*guest_iov_addr).iov_len as _;
462 let curr = read(fd, iov_base, iov_len);
464 if curr < 0 {
465 return -1;
466 }
467 ret += curr;
468 }
469 ret as _
471 }
472}
473
474#[allow(clippy::cast_ptr_alignment)]
476pub fn ___syscall146(ctx: FunctionEnvMut<EmEnv>, _which: i32, mut varargs: VarArgs) -> i32 {
477 debug!("emscripten::___syscall146 (writev) {}", _which);
479 let fd: i32 = varargs.get(&ctx);
480 let iov: i32 = varargs.get(&ctx);
481 let iovcnt: i32 = varargs.get(&ctx);
482
483 #[repr(C)]
484 struct GuestIovec {
485 iov_base: i32,
486 iov_len: i32,
487 }
488
489 debug!("=> fd: {}, iov: {}, iovcnt = {}", fd, iov, iovcnt);
490 let mut ret = 0;
491 for i in 0..iovcnt {
492 unsafe {
493 let memory = ctx.data().memory(0);
494 let guest_iov_addr =
495 emscripten_memory_pointer!(memory.view(&ctx), (iov + i * 8)) as *mut GuestIovec;
496 let iov_base = emscripten_memory_pointer!(memory.view(&ctx), (*guest_iov_addr).iov_base)
497 as *const c_void;
498 let iov_len = (*guest_iov_addr).iov_len as _;
499 let curr = write(fd, iov_base, iov_len);
501 debug!(
502 "=> iov_base: {}, iov_len: {}, curr = {}",
503 (*guest_iov_addr).iov_base,
504 iov_len,
505 curr
506 );
507 if curr < 0 {
508 debug!("=> os error: {}", Error::last_os_error());
509 return -1;
510 }
511 ret += curr;
512 }
513 }
514 debug!(" => ret: {}", ret);
515 ret as _
516}
517
518pub fn ___syscall191(ctx: FunctionEnvMut<EmEnv>, _which: i32, mut varargs: VarArgs) -> i32 {
519 let _resource: i32 = varargs.get(&ctx);
520 debug!(
521 "emscripten::___syscall191 - mostly stub, resource: {}",
522 _resource
523 );
524 let rlim_emptr: i32 = varargs.get(&ctx);
525 let memory = ctx.data().memory(0);
526 let rlim_ptr = emscripten_memory_pointer!(memory.view(&ctx), rlim_emptr) as *mut u8;
527 let rlim = unsafe { slice::from_raw_parts_mut(rlim_ptr, 16) };
528
529 LittleEndian::write_i64(&mut *rlim, -1);
531 LittleEndian::write_i64(&mut rlim[8..], -1);
532
533 0
534}
535
536pub fn ___syscall193(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
537 debug!("emscripten::___syscall193");
538 -1
539}
540
541pub fn ___syscall195(mut ctx: FunctionEnvMut<EmEnv>, _which: c_int, mut varargs: VarArgs) -> c_int {
543 debug!("emscripten::___syscall195 (stat64) {}", _which);
544 let pathname_addr = varargs.get_str(&ctx);
545 let buf: u32 = varargs.get(&ctx);
546
547 let real_path_owned = get_cstr_path(ctx.as_mut(), pathname_addr as *const _);
548 let real_path = if let Some(ref rp) = real_path_owned {
549 rp.as_c_str().as_ptr()
550 } else {
551 pathname_addr
552 };
553
554 unsafe {
555 let mut _stat: stat = std::mem::zeroed();
556 let ret = stat(real_path, &mut _stat);
557 debug!(
558 "=> pathname: {}, buf: {} = {}",
559 std::ffi::CStr::from_ptr(real_path).to_str().unwrap(),
560 buf,
561 ret
562 );
563 if ret != 0 {
564 debug!("=> os error: {}", Error::last_os_error());
565 return ret;
566 }
567 copy_stat_into_wasm(ctx, buf, &_stat);
568 }
569 0
570}
571
572pub fn ___syscall197(ctx: FunctionEnvMut<EmEnv>, _which: c_int, mut varargs: VarArgs) -> c_int {
574 debug!("emscripten::___syscall197 (fstat64) {}", _which);
575
576 let fd: c_int = varargs.get(&ctx);
577 let buf: u32 = varargs.get(&ctx);
578
579 unsafe {
580 let mut stat = std::mem::zeroed();
581 let ret = fstat(fd, &mut stat);
582 debug!("=> fd: {}, buf: {} = {}", fd, buf, ret);
583 if ret != 0 {
584 debug!("=> os error: {}", Error::last_os_error());
585 return ret;
586 }
587 copy_stat_into_wasm(ctx, buf, &stat);
588 }
589 0
590}
591
592pub fn ___syscall209(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
593 debug!("emscripten::___syscall209");
594 -1
595}
596
597pub fn ___syscall211(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
598 debug!("emscripten::___syscall211");
599 -1
600}
601
602pub fn ___syscall218(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
603 debug!("emscripten::___syscall218");
604 -1
605}
606
607pub fn ___syscall268(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
608 debug!("emscripten::___syscall268");
609 -1
610}
611
612pub fn ___syscall269(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
613 debug!("emscripten::___syscall269");
614 -1
615}
616
617pub fn ___syscall272(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
618 debug!("emscripten::___syscall272");
619 -1
620}
621
622pub fn ___syscall295(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
623 debug!("emscripten::___syscall295");
624 -1
625}
626
627pub fn ___syscall296(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
628 debug!("emscripten::___syscall296");
629 -1
630}
631
632pub fn ___syscall297(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
633 debug!("emscripten::___syscall297");
634 -1
635}
636
637pub fn ___syscall298(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
638 debug!("emscripten::___syscall298");
639 -1
640}
641
642pub fn ___syscall300(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
643 debug!("emscripten::___syscall300");
644 -1
645}
646
647pub fn ___syscall301(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
648 debug!("emscripten::___syscall301");
649 -1
650}
651
652pub fn ___syscall302(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
653 debug!("emscripten::___syscall302");
654 -1
655}
656
657pub fn ___syscall303(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
658 debug!("emscripten::___syscall303");
659 -1
660}
661
662pub fn ___syscall304(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
663 debug!("emscripten::___syscall304");
664 -1
665}
666
667pub fn ___syscall305(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
668 debug!("emscripten::___syscall305");
669 -1
670}
671
672pub fn ___syscall306(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
673 debug!("emscripten::___syscall306");
674 -1
675}
676
677pub fn ___syscall307(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
678 debug!("emscripten::___syscall307");
679 -1
680}
681
682pub fn ___syscall308(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
683 debug!("emscripten::___syscall308");
684 -1
685}
686
687pub fn ___syscall320(_ctx: FunctionEnvMut<EmEnv>, _which: c_int, mut _varargs: VarArgs) -> c_int {
689 debug!("emscripten::___syscall320 (utimensat), {}", _which);
690 0
691}
692
693pub fn ___syscall331(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
694 debug!("emscripten::___syscall331");
695 -1
696}
697
698pub fn ___syscall333(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
699 debug!("emscripten::___syscall333");
700 -1
701}
702
703pub fn ___syscall334(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
704 debug!("emscripten::___syscall334");
705 -1
706}
707
708pub fn ___syscall337(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
709 debug!("emscripten::___syscall337");
710 -1
711}
712
713pub fn ___syscall340(ctx: FunctionEnvMut<EmEnv>, _which: c_int, mut varargs: VarArgs) -> c_int {
715 debug!("emscripten::___syscall340 (prlimit64), {}", _which);
716 let _pid: i32 = varargs.get(&ctx);
718 let resource: i32 = varargs.get(&ctx);
719 let _new_limit: u32 = varargs.get(&ctx);
720 let old_limit: u32 = varargs.get(&ctx);
721
722 let val = match resource {
723 7 => 1024,
725 _ => -1, };
727
728 if old_limit != 0 {
729 let memory = ctx.data().memory(0);
731 let buf_ptr = emscripten_memory_pointer!(memory.view(&ctx), old_limit) as *mut u8;
732 let buf = unsafe { slice::from_raw_parts_mut(buf_ptr, 16) };
733
734 LittleEndian::write_i64(&mut *buf, val);
735 LittleEndian::write_i64(&mut buf[8..], val);
736 }
737
738 0
739}
740
741pub fn ___syscall345(_ctx: FunctionEnvMut<EmEnv>, _one: i32, _two: i32) -> i32 {
742 debug!("emscripten::___syscall345");
743 -1
744}