@@ -85,47 +85,47 @@ var SyscallsLibrary = {
8585 } ,
8686#endif // SYSCALLS_REQUIRE_FILESYSTEM
8787
88- // arguments handling
89-
9088 varargs : undefined ,
9189
92- get ( ) {
93- #if ASSERTIONS
94- assert ( SYSCALLS . varargs != undefined ) ;
95- #endif
96- // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number.
97- var ret = { { { makeGetValue ( '+SYSCALLS.varargs' , 0 , 'i32' ) } } } ;
98- SYSCALLS . varargs += 4 ;
90+ getStr ( ptr ) {
91+ var ret = UTF8ToString ( ptr ) ;
9992#if SYSCALL_DEBUG
100- dbg ( ` (raw : "${ ret } ")` ) ;
93+ dbg ( ` (str : "${ ret } ")` ) ;
10194#endif
10295 return ret ;
10396 } ,
97+ } ,
10498
105- #if MEMORY64
106- getp ( ) {
99+ $syscallGetVarargI__internal : true ,
100+ $syscallGetVarargI : function ( ) {
107101#if ASSERTIONS
108- assert ( SYSCALLS . varargs != undefined ) ;
102+ assert ( SYSCALLS . varargs != undefined ) ;
109103#endif
110- var ret = { { { makeGetValue ( 'SYSCALLS.varargs' , 0 , '*' ) } } } ;
111- 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 ;
112107#if SYSCALL_DEBUG
113- dbg ( ` ( raw : "${ret}" ) `);
114- #endif
115- return ret;
116- },
117- #else
118- getp() { return SYSCALLS.get() },
108+ dbg ( ` (raw: "${ ret } ")` ) ;
119109#endif
110+ return ret ;
111+ } ,
120112
121- getStr(ptr) {
122- var ret = UTF8ToString(ptr);
113+ $syscallGetVarargP__internal: true ,
114+ #if MEMORY64
115+ $syscallGetVarargP: function ( ) {
116+ #if ASSERTIONS
117+ assert ( SYSCALLS . varargs != undefined ) ;
118+ #endif
119+ var ret = { { { makeGetValue ( 'SYSCALLS.varargs' , 0 , '*' ) } } } ;
120+ SYSCALLS . varargs += { { { POINTER_SIZE } } } ;
123121#if SYSCALL_DEBUG
124- dbg(` ( str : "${ret}" ) `);
122+ dbg ( ` ( raw : "${ret}" ) `);
125123#endif
126- return ret;
127- },
124+ return ret;
128125 },
126+ #else
127+ $syscallGetVarargP: '$syscallGetVarargI',
128+ #endif
129129
130130 _mmap_js__i53abi: true,
131131 _mmap_js__deps: ['$SYSCALLS',
@@ -196,6 +196,10 @@ var SyscallsLibrary = {
196196
197197 return 0;
198198 },
199+
200+ #if SYSCALLS_REQUIRE_FILESYSTEM
201+ __syscall_ioctl__deps: ['$syscallGetVarargP'],
202+ #endif
199203 __syscall_ioctl: (fd, op, varargs) => {
200204#if SYSCALLS_REQUIRE_FILESYSTEM == 0
201205#if SYSCALL_DEBUG
@@ -216,7 +220,7 @@ var SyscallsLibrary = {
216220 if (!stream.tty) return -{{{ cDefs.ENOTTY }}};
217221 if (stream.tty.ops.ioctl_tcgets) {
218222 var termios = stream.tty.ops.ioctl_tcgets(stream);
219- var argp = SYSCALLS.getp ();
223+ var argp = syscallGetVarargP ();
220224 {{{ makeSetValue('argp', C_STRUCTS.termios.c_iflag, 'termios.c_iflag || 0', 'i32') }}};
221225 {{{ makeSetValue('argp', C_STRUCTS.termios.c_oflag, 'termios.c_oflag || 0', 'i32') }}};
222226 {{{ makeSetValue('argp', C_STRUCTS.termios.c_cflag, 'termios.c_cflag || 0', 'i32') }}};
@@ -242,7 +246,7 @@ var SyscallsLibrary = {
242246 case {{{ cDefs.TCSETSF }}}: {
243247 if (!stream.tty) return -{{{ cDefs.ENOTTY }}};
244248 if (stream.tty.ops.ioctl_tcsets) {
245- var argp = SYSCALLS.getp ();
249+ var argp = syscallGetVarargP ();
246250 var c_iflag = {{{ makeGetValue('argp', C_STRUCTS.termios.c_iflag, 'i32') }}};
247251 var c_oflag = {{{ makeGetValue('argp', C_STRUCTS.termios.c_oflag, 'i32') }}};
248252 var c_cflag = {{{ makeGetValue('argp', C_STRUCTS.termios.c_cflag, 'i32') }}};
@@ -257,7 +261,7 @@ var SyscallsLibrary = {
257261 }
258262 case {{{ cDefs.TIOCGPGRP }}}: {
259263 if (!stream.tty) return -{{{ cDefs.ENOTTY }}};
260- var argp = SYSCALLS.getp ();
264+ var argp = syscallGetVarargP ();
261265 {{{ makeSetValue('argp', 0, 0, 'i32') }}};
262266 return 0;
263267 }
@@ -266,7 +270,7 @@ var SyscallsLibrary = {
266270 return -{{{ cDefs.EINVAL }}}; // not supported
267271 }
268272 case {{{ cDefs.FIONREAD }}}: {
269- var argp = SYSCALLS.getp ();
273+ var argp = syscallGetVarargP ();
270274 return FS.ioctl(stream, op, argp);
271275 }
272276 case {{{ cDefs.TIOCGWINSZ }}}: {
@@ -275,7 +279,7 @@ var SyscallsLibrary = {
275279 if (!stream.tty) return -{{{ cDefs.ENOTTY }}};
276280 if (stream.tty.ops.ioctl_tiocgwinsz) {
277281 var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty);
278- var argp = SYSCALLS.getp ();
282+ var argp = syscallGetVarargP ();
279283 {{{ makeSetValue('argp', 0, 'winsize[0]', 'i16') }}};
280284 {{{ makeSetValue('argp', 2, 'winsize[1]', 'i16') }}};
281285 }
@@ -740,6 +744,9 @@ var SyscallsLibrary = {
740744 FS.llseek(stream, idx * struct_size, {{{ cDefs.SEEK_SET }}});
741745 return pos;
742746 },
747+ #if SYSCALLS_REQUIRE_FILESYSTEM
748+ __syscall_fcntl64__deps: ['$syscallGetVarargP', '$syscallGetVarargI'],
749+ #endif
743750 __syscall_fcntl64: (fd, cmd, varargs) => {
744751#if SYSCALLS_REQUIRE_FILESYSTEM == 0
745752#if SYSCALL_DEBUG
@@ -750,7 +757,7 @@ var SyscallsLibrary = {
750757 var stream = SYSCALLS.getStreamFromFD(fd);
751758 switch (cmd) {
752759 case {{{ cDefs.F_DUPFD }}}: {
753- var arg = SYSCALLS.get ();
760+ var arg = syscallGetVarargI ();
754761 if (arg < 0) {
755762 return -{{{ cDefs.EINVAL }}};
756763 }
@@ -767,12 +774,12 @@ var SyscallsLibrary = {
767774 case {{{ cDefs.F_GETFL }}}:
768775 return stream.flags;
769776 case {{{ cDefs.F_SETFL }}}: {
770- var arg = SYSCALLS.get ();
777+ var arg = syscallGetVarargI ();
771778 stream.flags |= arg;
772779 return 0;
773780 }
774781 case {{{ cDefs.F_GETLK }}}: {
775- var arg = SYSCALLS.getp ();
782+ var arg = syscallGetVarargP ();
776783 var offset = {{{ C_STRUCTS.flock.l_type }}};
777784 // We're always unlocked.
778785 {{{ makeSetValue('arg', 'offset', cDefs.F_UNLCK, 'i16') }}};
@@ -823,10 +830,11 @@ var SyscallsLibrary = {
823830 __syscall_fadvise64: (fd, offset, len, advice) => {
824831 return 0; // your advice is important to us (but we can't use it)
825832 },
833+ __syscall_openat__deps: ['$syscallGetVarargI'],
826834 __syscall_openat: (dirfd, path, flags, varargs) => {
827835 path = SYSCALLS.getStr(path);
828836 path = SYSCALLS.calculateAt(dirfd, path);
829- var mode = varargs ? SYSCALLS.get () : 0;
837+ var mode = varargs ? syscallGetVarargI () : 0;
830838 return FS.open(path, flags, mode).fd;
831839 },
832840 __syscall_mkdirat: (dirfd, path, mode) => {
0 commit comments