Skip to content

Commit

Permalink
linux-user: improve print_fcntl()
Browse files Browse the repository at this point in the history
Signed-off-by: Laurent Vivier <[email protected]>
Signed-off-by: Riku Voipio <[email protected]>
  • Loading branch information
vivier authored and Riku Voipio committed Mar 11, 2013
1 parent ec00b51 commit d95ec14
Showing 1 changed file with 79 additions and 18 deletions.
97 changes: 79 additions & 18 deletions linux-user/strace.c
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit d95ec14

Please sign in to comment.