static int
print_fcntl(struct tcb *tcp)
{
- switch (tcp->u_arg[1]) {
+ const unsigned int cmd = tcp->u_arg[1];
+
+ switch (cmd) {
case F_SETFD:
tprints(", ");
printflags(fdflags, tcp->u_arg[2], "FD_???");
if (entering(tcp)) {
printfd(tcp, tcp->u_arg[0]);
tprints(", ");
- const char *str =
- xlookup(fcntlcmds, (unsigned long) tcp->u_arg[1]);
+ const unsigned int cmd = tcp->u_arg[1];
+ const char *str = xlookup(fcntlcmds, cmd);
if (str) {
tprints(str);
} else {
* constants, but we would like to show them
* for better debugging experience.
*/
- printxval(fcntl64cmds, tcp->u_arg[1], "F_???");
+ printxval(fcntl64cmds, cmd, "F_???");
}
}
return print_fcntl(tcp);
SYS_FUNC(fcntl64)
{
+ const unsigned int cmd = tcp->u_arg[1];
if (entering(tcp)) {
printfd(tcp, tcp->u_arg[0]);
tprints(", ");
- const char *str =
- xlookup(fcntl64cmds, (unsigned long) tcp->u_arg[1]);
+ const char *str = xlookup(fcntl64cmds, cmd);
if (str) {
tprints(str);
} else {
- printxval(fcntlcmds, tcp->u_arg[1], "F_???");
+ printxval(fcntlcmds, cmd, "F_???");
}
}
- switch (tcp->u_arg[1]) {
+ switch (cmd) {
case F_SETLK64:
case F_SETLKW64:
tprints(", ");
.l_start = 0xdefaced1facefeed,
.l_len = 0xdefaced2cafef00d
};
- syscall(TEST_SYSCALL_NR, 0, cmd, &fl);
+ invoke_test_syscall(cmd, &fl);
printf("%s(0, %s, %p) = %s\n",
TEST_SYSCALL_STR, name, &fl, EINVAL_STR);
}
.l_start = 0xdefaced1facefeed,
.l_len = 0xdefaced2cafef00d
};
- syscall(TEST_SYSCALL_NR, 0, cmd, &fl);
+ invoke_test_syscall(cmd, &fl);
printf("%s(0, %s, {l_type=F_RDLCK, l_whence=SEEK_SET"
", l_start=%jd, l_len=%jd}) = %s\n", TEST_SYSCALL_STR, name,
(intmax_t) fl.l_start, (intmax_t) fl.l_len, EINVAL_STR);
.l_type = F_RDLCK,
.l_len = FILE_LEN
};
- int rc = syscall(TEST_SYSCALL_NR, 0, F_SETLK64, &fl);
+ long rc = invoke_test_syscall(F_SETLK64, &fl);
printf("%s(0, F_SETLK64, {l_type=F_RDLCK, l_whence=SEEK_SET"
", l_start=0, l_len=%d}) = %s\n",
TEST_SYSCALL_STR, FILE_LEN, rc ? EINVAL_STR : "0");
if (rc)
return;
- syscall(TEST_SYSCALL_NR, 0, F_GETLK64, &fl);
+ invoke_test_syscall(F_GETLK64, &fl);
printf("%s(0, F_GETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET"
", l_start=0, l_len=%d, l_pid=0}) = 0\n",
TEST_SYSCALL_STR, FILE_LEN);
- syscall(TEST_SYSCALL_NR, 0, F_SETLK64, &fl);
+ invoke_test_syscall(F_SETLK64, &fl);
printf("%s(0, F_SETLK64, {l_type=F_UNLCK, l_whence=SEEK_SET"
", l_start=0, l_len=%d}) = 0\n",
TEST_SYSCALL_STR, FILE_LEN);
# define TYPEOF_FLOCK_OFF_T off_t
#endif
+static long
+invoke_test_syscall(const unsigned int cmd, void *const p)
+{
+ const unsigned long op = (unsigned long) 0xffffffff00000000 | cmd;
+
+ return syscall(TEST_SYSCALL_NR, 0, op, (unsigned long) p);
+}
+
static void
test_flock_einval(const int cmd, const char *name)
{
.l_start = (TYPEOF_FLOCK_OFF_T) 0xdefaced1facefeed,
.l_len = (TYPEOF_FLOCK_OFF_T) 0xdefaced2cafef00d
};
- syscall(TEST_SYSCALL_NR, 0, cmd, &fl);
+ invoke_test_syscall(cmd, &fl);
printf("%s(0, %s, {l_type=F_RDLCK, l_whence=SEEK_SET"
", l_start=%jd, l_len=%jd}) = %s\n", TEST_SYSCALL_STR, name,
(intmax_t) fl.l_start, (intmax_t) fl.l_len, EINVAL_STR);
.l_type = F_RDLCK,
.l_len = FILE_LEN
};
- int rc = syscall(TEST_SYSCALL_NR, 0, F_SETLK, &fl);
+ long rc = invoke_test_syscall(F_SETLK, &fl);
printf("%s(0, F_SETLK, {l_type=F_RDLCK, l_whence=SEEK_SET"
", l_start=0, l_len=%d}) = %s\n",
TEST_SYSCALL_STR, FILE_LEN, rc ? EINVAL_STR : "0");
if (rc)
return;
- syscall(TEST_SYSCALL_NR, 0, F_GETLK, &fl);
+ invoke_test_syscall(F_GETLK, &fl);
printf("%s(0, F_GETLK, {l_type=F_UNLCK, l_whence=SEEK_SET"
", l_start=0, l_len=%d, l_pid=0}) = 0\n",
TEST_SYSCALL_STR, FILE_LEN);
- syscall(TEST_SYSCALL_NR, 0, F_SETLK, &fl);
+ invoke_test_syscall(F_SETLK, &fl);
printf("%s(0, F_SETLK, {l_type=F_UNLCK, l_whence=SEEK_SET"
", l_start=0, l_len=%d}) = 0\n",
TEST_SYSCALL_STR, FILE_LEN);