linux-user: improve print_fcntl()

Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
This commit is contained in:
Laurent Vivier 2012-12-31 21:00:11 +01:00 committed by Riku Voipio
parent ec00b51a6c
commit d95ec14fd2
1 changed files with 79 additions and 18 deletions

View File

@ -462,18 +462,6 @@ UNUSED static struct flags mmap_flags[] = {
FLAG_END,
};
UNUSED static struct flags fcntl_flags[] = {
FLAG_TARGET(F_DUPFD),
FLAG_TARGET(F_GETFD),
FLAG_TARGET(F_SETFD),
FLAG_TARGET(F_GETFL),
FLAG_TARGET(F_SETFL),
FLAG_TARGET(F_GETLK),
FLAG_TARGET(F_SETLK),
FLAG_TARGET(F_SETLKW),
FLAG_END,
};
UNUSED static struct flags clone_flags[] = {
FLAG_GENERIC(CLONE_VM),
FLAG_GENERIC(CLONE_FS),
@ -867,12 +855,85 @@ print_fcntl(const struct syscallname *name,
{
print_syscall_prologue(name);
print_raw_param("%d", arg0, 0);
print_flags(fcntl_flags, arg1, 0);
/*
* TODO: check flags and print following argument only
* when needed.
*/
print_pointer(arg2, 1);
switch(arg1) {
case TARGET_F_DUPFD:
gemu_log("F_DUPFD,");
print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
break;
case TARGET_F_GETFD:
gemu_log("F_GETFD");
break;
case TARGET_F_SETFD:
gemu_log("F_SETFD,");
print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
break;
case TARGET_F_GETFL:
gemu_log("F_GETFL");
break;
case TARGET_F_SETFL:
gemu_log("F_SETFL,");
print_open_flags(arg2, 1);
break;
case TARGET_F_GETLK:
gemu_log("F_GETLK,");
print_pointer(arg2, 1);
break;
case TARGET_F_SETLK:
gemu_log("F_SETLK,");
print_pointer(arg2, 1);
break;
case TARGET_F_SETLKW:
gemu_log("F_SETLKW,");
print_pointer(arg2, 1);
break;
case TARGET_F_GETOWN:
gemu_log("F_GETOWN");
break;
case TARGET_F_SETOWN:
gemu_log("F_SETOWN,");
print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
break;
case TARGET_F_GETSIG:
gemu_log("F_GETSIG");
break;
case TARGET_F_SETSIG:
gemu_log("F_SETSIG,");
print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
break;
#if TARGET_ABI_BITS == 32
case TARGET_F_GETLK64:
gemu_log("F_GETLK64,");
print_pointer(arg2, 1);
break;
case TARGET_F_SETLK64:
gemu_log("F_SETLK64,");
print_pointer(arg2, 1);
break;
case TARGET_F_SETLKW64:
gemu_log("F_SETLKW64,");
print_pointer(arg2, 1);
break;
#endif
case TARGET_F_SETLEASE:
gemu_log("F_SETLEASE,");
print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
break;
case TARGET_F_GETLEASE:
gemu_log("F_GETLEASE");
break;
case TARGET_F_DUPFD_CLOEXEC:
gemu_log("F_DUPFD_CLOEXEC,");
print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
break;
case TARGET_F_NOTIFY:
gemu_log("F_NOTIFY,");
print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
break;
default:
print_raw_param(TARGET_ABI_FMT_ld, arg1, 0);
print_pointer(arg2, 1);
break;
}
print_syscall_epilogue(name);
}
#define print_fcntl64 print_fcntl