@@ -75,59 +75,57 @@ var SyscallsLibrary = {
7575 var buffer = HEAPU8 . slice ( addr , addr + len ) ;
7676 FS . msync ( stream , buffer , offset , len , flags ) ;
7777 } ,
78+ // Just like `FS.getStream` but will throw EBADF if stream is undefined.
79+ getStreamFromFD ( fd ) {
80+ var stream = FS . getStreamChecked ( fd ) ;
81+ #if SYSCALL_DEBUG
82+ dbg ( ` (stream: "${ stream . path } ")` ) ;
7883#endif
79-
80- // arguments handling
84+ return stream ;
85+ } ,
86+ #endif // SYSCALLS_REQUIRE_FILESYSTEM
8187
8288 varargs : undefined ,
8389
84- get ( ) {
85- #if ASSERTIONS
86- assert ( SYSCALLS . varargs != undefined ) ;
87- #endif
88- // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number.
89- var ret = { { { makeGetValue ( '+SYSCALLS.varargs' , 0 , 'i32' ) } } } ;
90- SYSCALLS . varargs += 4 ;
90+ getStr ( ptr ) {
91+ var ret = UTF8ToString ( ptr ) ;
9192#if SYSCALL_DEBUG
92- dbg ( ` (raw : "${ ret } ")` ) ;
93+ dbg ( ` (str : "${ ret } ")` ) ;
9394#endif
9495 return ret ;
9596 } ,
97+ } ,
9698
97- #if MEMORY64
98- getp ( ) {
99+ $syscallGetVarargI__internal : true ,
100+ $syscallGetVarargI : function ( ) {
99101#if ASSERTIONS
100- assert ( SYSCALLS . varargs != undefined ) ;
102+ assert ( SYSCALLS . varargs != undefined ) ;
101103#endif
102- var ret = { { { makeGetValue ( 'SYSCALLS.varargs' , 0 , '*' ) } } } ;
103- SYSCALLS . varargs += { { { POINTER_SIZE } } } ;
104+ // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number.
105+ var ret = { { { makeGetValue ( '+SYSCALLS.varargs' , 0 , 'i32' ) } } } ;
106+ SYSCALLS . varargs += 4 ;
104107#if SYSCALL_DEBUG
105- dbg ( ` ( raw : "${ret}" ) `);
106- #endif
107- return ret;
108- },
109- #else
110- getp() { return SYSCALLS.get() },
108+ dbg ( ` (raw: "${ ret } ")` ) ;
111109#endif
110+ return ret ;
111+ } ,
112112
113- getStr(ptr) {
114- var ret = UTF8ToString(ptr);
115- #if SYSCALL_DEBUG
116- dbg(` ( str : "${ret}" ) `);
113+ $syscallGetVarargP__internal: true ,
114+ #if MEMORY64
115+ $syscallGetVarargP: function ( ) {
116+ #if ASSERTIONS
117+ assert ( SYSCALLS . varargs != undefined ) ;
117118#endif
118- return ret;
119- },
120- #if SYSCALLS_REQUIRE_FILESYSTEM
121- // Just like ` FS . getStream ` but will throw EBADF if stream is undefined.
122- getStreamFromFD(fd) {
123- var stream = FS.getStreamChecked(fd);
119+ var ret = { { { makeGetValue ( 'SYSCALLS.varargs' , 0 , '*' ) } } } ;
120+ SYSCALLS . varargs += { { { POINTER_SIZE } } } ;
124121#if SYSCALL_DEBUG
125- dbg(` ( stream : "${stream.path }" ) `);
122+ dbg ( ` ( raw : "${ret }" ) `);
126123#endif
127- return stream;
128- },
129- #endif // SYSCALLS_REQUIRE_FILESYSTEM
124+ return ret;
130125 },
126+ #else
127+ $syscallGetVarargP: '$syscallGetVarargI',
128+ #endif
131129
132130 _mmap_js__i53abi: true,
133131 _mmap_js__deps: ['$SYSCALLS',
@@ -198,6 +196,10 @@ var SyscallsLibrary = {
198196
199197 return 0;
200198 },
199+
200+ #if SYSCALLS_REQUIRE_FILESYSTEM
201+ __syscall_ioctl__deps: ['$syscallGetVarargP'],
202+ #endif
201203 __syscall_ioctl: (fd, op, varargs) => {
202204#if SYSCALLS_REQUIRE_FILESYSTEM == 0
203205#if SYSCALL_DEBUG
@@ -218,7 +220,7 @@ var SyscallsLibrary = {
218220 if (!stream.tty) return -{{{ cDefs.ENOTTY }}};
219221 if (stream.tty.ops.ioctl_tcgets) {
220222 var termios = stream.tty.ops.ioctl_tcgets(stream);
221- var argp = SYSCALLS.getp ();
223+ var argp = syscallGetVarargP ();
222224 {{{ makeSetValue('argp', C_STRUCTS.termios.c_iflag, 'termios.c_iflag || 0', 'i32') }}};
223225 {{{ makeSetValue('argp', C_STRUCTS.termios.c_oflag, 'termios.c_oflag || 0', 'i32') }}};
224226 {{{ makeSetValue('argp', C_STRUCTS.termios.c_cflag, 'termios.c_cflag || 0', 'i32') }}};
@@ -244,7 +246,7 @@ var SyscallsLibrary = {
244246 case {{{ cDefs.TCSETSF }}}: {
245247 if (!stream.tty) return -{{{ cDefs.ENOTTY }}};
246248 if (stream.tty.ops.ioctl_tcsets) {
247- var argp = SYSCALLS.getp ();
249+ var argp = syscallGetVarargP ();
248250 var c_iflag = {{{ makeGetValue('argp', C_STRUCTS.termios.c_iflag, 'i32') }}};
249251 var c_oflag = {{{ makeGetValue('argp', C_STRUCTS.termios.c_oflag, 'i32') }}};
250252 var c_cflag = {{{ makeGetValue('argp', C_STRUCTS.termios.c_cflag, 'i32') }}};
@@ -259,7 +261,7 @@ var SyscallsLibrary = {
259261 }
260262 case {{{ cDefs.TIOCGPGRP }}}: {
261263 if (!stream.tty) return -{{{ cDefs.ENOTTY }}};
262- var argp = SYSCALLS.getp ();
264+ var argp = syscallGetVarargP ();
263265 {{{ makeSetValue('argp', 0, 0, 'i32') }}};
264266 return 0;
265267 }
@@ -268,7 +270,7 @@ var SyscallsLibrary = {
268270 return -{{{ cDefs.EINVAL }}}; // not supported
269271 }
270272 case {{{ cDefs.FIONREAD }}}: {
271- var argp = SYSCALLS.getp ();
273+ var argp = syscallGetVarargP ();
272274 return FS.ioctl(stream, op, argp);
273275 }
274276 case {{{ cDefs.TIOCGWINSZ }}}: {
@@ -277,7 +279,7 @@ var SyscallsLibrary = {
277279 if (!stream.tty) return -{{{ cDefs.ENOTTY }}};
278280 if (stream.tty.ops.ioctl_tiocgwinsz) {
279281 var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty);
280- var argp = SYSCALLS.getp ();
282+ var argp = syscallGetVarargP ();
281283 {{{ makeSetValue('argp', 0, 'winsize[0]', 'i16') }}};
282284 {{{ makeSetValue('argp', 2, 'winsize[1]', 'i16') }}};
283285 }
@@ -742,6 +744,9 @@ var SyscallsLibrary = {
742744 FS.llseek(stream, idx * struct_size, {{{ cDefs.SEEK_SET }}});
743745 return pos;
744746 },
747+ #if SYSCALLS_REQUIRE_FILESYSTEM
748+ __syscall_fcntl64__deps: ['$syscallGetVarargP', '$syscallGetVarargI'],
749+ #endif
745750 __syscall_fcntl64: (fd, cmd, varargs) => {
746751#if SYSCALLS_REQUIRE_FILESYSTEM == 0
747752#if SYSCALL_DEBUG
@@ -752,7 +757,7 @@ var SyscallsLibrary = {
752757 var stream = SYSCALLS.getStreamFromFD(fd);
753758 switch (cmd) {
754759 case {{{ cDefs.F_DUPFD }}}: {
755- var arg = SYSCALLS.get ();
760+ var arg = syscallGetVarargI ();
756761 if (arg < 0) {
757762 return -{{{ cDefs.EINVAL }}};
758763 }
@@ -769,12 +774,12 @@ var SyscallsLibrary = {
769774 case {{{ cDefs.F_GETFL }}}:
770775 return stream.flags;
771776 case {{{ cDefs.F_SETFL }}}: {
772- var arg = SYSCALLS.get ();
777+ var arg = syscallGetVarargI ();
773778 stream.flags |= arg;
774779 return 0;
775780 }
776781 case {{{ cDefs.F_GETLK }}}: {
777- var arg = SYSCALLS.getp ();
782+ var arg = syscallGetVarargP ();
778783 var offset = {{{ C_STRUCTS.flock.l_type }}};
779784 // We're always unlocked.
780785 {{{ makeSetValue('arg', 'offset', cDefs.F_UNLCK, 'i16') }}};
@@ -825,10 +830,11 @@ var SyscallsLibrary = {
825830 __syscall_fadvise64: (fd, offset, len, advice) => {
826831 return 0; // your advice is important to us (but we can't use it)
827832 },
833+ __syscall_openat__deps: ['$syscallGetVarargI'],
828834 __syscall_openat: (dirfd, path, flags, varargs) => {
829835 path = SYSCALLS.getStr(path);
830836 path = SYSCALLS.calculateAt(dirfd, path);
831- var mode = varargs ? SYSCALLS.get () : 0;
837+ var mode = varargs ? syscallGetVarargI () : 0;
832838 return FS.open(path, flags, mode).fd;
833839 },
834840 __syscall_mkdirat: (dirfd, path, mode) => {
0 commit comments