linux-user: Implement stracing madvise()
The default implementation has several problems: the first argument is not displayed as a pointer, making it harder to grep; the third argument is not symbolized; and there are several extra unused arguments. Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20220906000839.1672934-4-iii@linux.ibm.com> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
parent
8655b4c709
commit
375ce49be2
@ -18,6 +18,7 @@
|
||||
#include "user-internals.h"
|
||||
#include "strace.h"
|
||||
#include "signal-common.h"
|
||||
#include "target_mman.h"
|
||||
|
||||
struct syscallname {
|
||||
int nr;
|
||||
@ -3019,6 +3020,46 @@ print_stat(CPUArchState *cpu_env, const struct syscallname *name,
|
||||
#define print_lstat64 print_stat
|
||||
#endif
|
||||
|
||||
#if defined(TARGET_NR_madvise)
|
||||
static struct enums madvise_advice[] = {
|
||||
ENUM_TARGET(MADV_NORMAL),
|
||||
ENUM_TARGET(MADV_RANDOM),
|
||||
ENUM_TARGET(MADV_SEQUENTIAL),
|
||||
ENUM_TARGET(MADV_WILLNEED),
|
||||
ENUM_TARGET(MADV_DONTNEED),
|
||||
ENUM_TARGET(MADV_FREE),
|
||||
ENUM_TARGET(MADV_REMOVE),
|
||||
ENUM_TARGET(MADV_DONTFORK),
|
||||
ENUM_TARGET(MADV_DOFORK),
|
||||
ENUM_TARGET(MADV_MERGEABLE),
|
||||
ENUM_TARGET(MADV_UNMERGEABLE),
|
||||
ENUM_TARGET(MADV_HUGEPAGE),
|
||||
ENUM_TARGET(MADV_NOHUGEPAGE),
|
||||
ENUM_TARGET(MADV_DONTDUMP),
|
||||
ENUM_TARGET(MADV_DODUMP),
|
||||
ENUM_TARGET(MADV_WIPEONFORK),
|
||||
ENUM_TARGET(MADV_KEEPONFORK),
|
||||
ENUM_TARGET(MADV_COLD),
|
||||
ENUM_TARGET(MADV_PAGEOUT),
|
||||
ENUM_TARGET(MADV_POPULATE_READ),
|
||||
ENUM_TARGET(MADV_POPULATE_WRITE),
|
||||
ENUM_TARGET(MADV_DONTNEED_LOCKED),
|
||||
ENUM_END,
|
||||
};
|
||||
|
||||
static void
|
||||
print_madvise(CPUArchState *cpu_env, const struct syscallname *name,
|
||||
abi_long arg0, abi_long arg1, abi_long arg2,
|
||||
abi_long arg3, abi_long arg4, abi_long arg5)
|
||||
{
|
||||
print_syscall_prologue(name);
|
||||
print_pointer(arg0, 0);
|
||||
print_raw_param("%d", arg1, 0);
|
||||
print_enums(madvise_advice, arg2, 1);
|
||||
print_syscall_epilogue(name);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(TARGET_NR_fstat) || defined(TARGET_NR_fstat64)
|
||||
static void
|
||||
print_fstat(CPUArchState *cpu_env, const struct syscallname *name,
|
||||
|
@ -542,7 +542,7 @@
|
||||
{ TARGET_NR_lstat64, "lstat64" , NULL, print_lstat64, NULL },
|
||||
#endif
|
||||
#ifdef TARGET_NR_madvise
|
||||
{ TARGET_NR_madvise, "madvise" , NULL, NULL, NULL },
|
||||
{ TARGET_NR_madvise, "madvise" , NULL, print_madvise, NULL },
|
||||
#endif
|
||||
#ifdef TARGET_NR_madvise1
|
||||
{ TARGET_NR_madvise1, "madvise1" , NULL, NULL, NULL },
|
||||
|
Loading…
Reference in New Issue
Block a user