Skip to content

Commit 1bb702c

Browse files
committed
Split out syscall vararg handling into seperate functions. NFC
This means we only include these function when they are needed. As part of a seperate change I was having issue with closure compiler when `SYSCALLS.varargs` are used by never assigned to.
1 parent 70060de commit 1bb702c

File tree

4 files changed

+46
-38
lines changed

4 files changed

+46
-38
lines changed

src/library_syscall.js

Lines changed: 43 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -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) => {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
55910
1+
55598
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
31746
1+
31481
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
54797
1+
54485

0 commit comments

Comments
 (0)