Skip to content

Commit a8b489d

Browse files
authored
Split out syscall vararg handling into seperate functions. NFC (emscripten-core#21649)
* Merge two `SYSCALLS_REQUIRE_FILESYSTEM` blocks. NFC * 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 59cd5e5 commit a8b489d

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)