Do not print too many arguments of socketcall syscall

* socketcall.c (SYS_FUNC(socketcall)): Print just "call" and "args"
syscall arguments.
* tests/socketcall.c (test_socketcall): Update expected output.
* tests/socketcall.test: Likewise.
This commit is contained in:
Дмитрий Левин 2016-07-21 11:47:20 +00:00
parent 3b6bc9b40d
commit b7844f8b4a
3 changed files with 8 additions and 18 deletions

View File

@ -38,9 +38,8 @@ SYS_FUNC(socketcall)
else
tprintf("%d", call);
unsigned int i;
for (i = 1; i < MAX_ARGS; ++i)
tprintf(", %#lx", tcp->u_arg[i]);
tprints(", ");
printaddr(tcp->u_arg[1]);
return RVAL_DECODED;
}

View File

@ -54,28 +54,19 @@ static void *efault;
static void
test_socketcall(const int i, const void *const addr)
{
static const unsigned long a[] = {
(unsigned long) 0xface2fedbadc2ded,
(unsigned long) 0xface3fedbadc3ded,
(unsigned long) 0xface4fedbadc4ded,
(unsigned long) 0xface5fedbadc5ded
};
const unsigned long call =
(unsigned long) 0xfacefeed00000000 | (unsigned int) i;
long rc = syscall(__NR_socketcall, call, addr,
a[0], a[1], a[2], a[3]);
long rc = syscall(__NR_socketcall, call, addr);
if (i < sc_min || i > sc_max) {
printf("socketcall(%d, %p, %#lx, %#lx, %#lx, %#lx)"
" = %ld %s (%m)\n", (int) call, addr,
a[0], a[1], a[2], a[3], rc, errno2name());
printf("socketcall(%d, %p) = %ld %s (%m)\n",
(int) call, addr, rc, errno2name());
} else if (addr == efault) {
const char *const str = xlookup_uint(socketcalls, i);
assert(str);
printf("socketcall(%s, %p, %#lx, %#lx, %#lx, %#lx)"
" = %ld %s (%m)\n", str, addr, a[0], a[1], a[2], a[3],
rc, errno2name());
printf("socketcall(%s, %p) = %ld %s (%m)\n",
str, addr, rc, errno2name());
}
}
int

View File

@ -3,4 +3,4 @@
# Check decoding of socketcall syscall.
. "${srcdir=.}/init.sh"
run_strace_match_diff
run_strace_match_diff -a20