e2k: Add systrace print for access_hw_stacks.

Signed-off-by: Denis Drakhnya <numas13@gmail.com>
This commit is contained in:
Denis Drakhnia 2021-02-12 19:12:43 +02:00 committed by Denis Drakhnia
parent 774f31dd0e
commit 62637ca653
4 changed files with 51 additions and 21 deletions

View File

@ -72,16 +72,16 @@ struct target_pt_regs {
/* modes for sys_access_hw_stacks */
enum {
E2K_READ_CHAIN_STACK,
E2K_READ_PROCEDURE_STACK,
E2K_WRITE_PROCEDURE_STACK,
E2K_GET_CHAIN_STACK_OFFSET,
E2K_GET_CHAIN_STACK_SIZE,
E2K_GET_PROCEDURE_STACK_SIZE,
E2K_READ_CHAIN_STACK_EX,
E2K_READ_PROCEDURE_STACK_EX,
E2K_WRITE_PROCEDURE_STACK_EX,
E2K_WRITE_CHAIN_STACK_EX,
READ_CHAIN_STACK,
READ_PROCEDURE_STACK,
WRITE_PROCEDURE_STACK,
GET_CHAIN_STACK_OFFSET,
GET_CHAIN_STACK_SIZE,
GET_PROCEDURE_STACK_SIZE,
READ_CHAIN_STACK_EX,
READ_PROCEDURE_STACK_EX,
WRITE_PROCEDURE_STACK_EX,
WRITE_CHAIN_STACK_EX,
};
#endif /* E2K_TARGET_SYSCALL_H */

View File

@ -1414,6 +1414,20 @@ UNUSED static struct enums itimer_types[] = {
ENUM_END,
};
UNUSED static struct enums access_hw_stacks_reqs[] = {
ENUM_GENERIC(READ_CHAIN_STACK),
ENUM_GENERIC(READ_PROCEDURE_STACK),
ENUM_GENERIC(WRITE_PROCEDURE_STACK),
ENUM_GENERIC(GET_CHAIN_STACK_OFFSET),
ENUM_GENERIC(GET_CHAIN_STACK_SIZE),
ENUM_GENERIC(GET_PROCEDURE_STACK_SIZE),
ENUM_GENERIC(READ_CHAIN_STACK_EX),
ENUM_GENERIC(READ_PROCEDURE_STACK_EX),
ENUM_GENERIC(WRITE_PROCEDURE_STACK_EX),
ENUM_GENERIC(WRITE_CHAIN_STACK_EX),
ENUM_END,
};
/*
* print_xxx utility functions. These are used to print syscall
* parameters in certain format. All of these have parameter
@ -3761,15 +3775,18 @@ print_ioctl(CPUArchState *cpu_env, const struct syscallname *name,
}
#endif
#ifdef TARGET_NR_e2k_longjmp2
#ifdef TARGET_NR_access_hw_stacks
static void
print_e2k_jmp_info(void *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_access_hw_stacks(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, 1);
print_enums(access_hw_stacks_reqs, arg0, 0);
print_pointer(arg1, 0);
print_pointer(arg2, 0);
print_raw_param("%d", arg3, 0);
print_pointer(arg4, 1);
print_syscall_epilogue(name);
}
#endif

View File

@ -127,8 +127,11 @@
{ TARGET_NR_dup3, "dup3" , "%s(%d,%d,%d)", NULL, NULL },
#endif
#ifdef TARGET_NR_e2k_longjmp2
{ TARGET_NR_e2k_longjmp2, "e2k_longjmp2", "%s(%p, %d)",
print_e2k_jmp_info, NULL },
{ TARGET_NR_e2k_longjmp2, "e2k_longjmp2", "%s(%p, %d)", NULL, NULL },
#endif
#ifdef TARGET_NR_access_hw_stacks
{ TARGET_NR_access_hw_stacks, "access_hw_stacks", NULL,
print_access_hw_stacks, NULL },
#endif
#ifdef TARGET_NR_epoll_create
{ TARGET_NR_epoll_create, "epoll_create", "%s(%d)", NULL, NULL },

View File

@ -11989,7 +11989,8 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
return ret;
#endif
#ifdef TARGET_NR_e2k_longjmp2
case TARGET_NR_e2k_longjmp2: {
case TARGET_NR_e2k_longjmp2:
{
E2KCPU *e2k_cpu = E2K_CPU(cpu);
CPUE2KState *env = &e2k_cpu->env;
struct target_jmp_info ji;
@ -12003,9 +12004,18 @@ static abi_long do_syscall1(CPUArchState *cpu_env, int num, abi_long arg1,
#endif
#ifdef TARGET_NR_access_hw_stacks
case TARGET_NR_access_hw_stacks:
{
#if 0
abi_ulong mode = arg2;
abi_ulong frame_ptr = arg3; // __user (abi_ullong *)
abi_ulong buf = arg4; // __user (char *)
abi_ulong buf_size = arg5;
abi_ulong real_size = arg6; // __user (void *)
#endif
// TODO: e2k_sys_access_hw_stacks
qemu_log_mask(LOG_UNIMP, "syscall access_hw_stacks is not implemented yet\n");
return -TARGET_EPERM;
return -TARGET_ENOSYS;
}
#endif
#ifdef CONFIG_ATTR
#ifdef TARGET_NR_setxattr