Skip to content

Commit

Permalink
riscv: ptrace: add argn syntax
Browse files Browse the repository at this point in the history
This enables ftrace kprobe events to access kernel function
arguments via $argN syntax.

Signed-off-by: Jeff Xie <[email protected]>
Signed-off-by: Palmer Dabbelt <[email protected]>
  • Loading branch information
Jeff Xie authored and palmer-dabbelt committed Jul 6, 2021
1 parent 9eb4fcf commit 70eee55
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
1 change: 1 addition & 0 deletions arch/riscv/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ config RISCV
select HAVE_PERF_REGS
select HAVE_PERF_USER_STACK_DUMP
select HAVE_REGS_AND_STACK_ACCESS_API
select HAVE_FUNCTION_ARG_ACCESS_API
select HAVE_STACKPROTECTOR
select HAVE_SYSCALL_TRACEPOINTS
select IRQ_DOMAIN
Expand Down
31 changes: 31 additions & 0 deletions arch/riscv/include/asm/ptrace.h
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,37 @@ static inline unsigned long regs_get_register(struct pt_regs *regs,

return *(unsigned long *)((unsigned long)regs + offset);
}

/**
* regs_get_kernel_argument() - get Nth function argument in kernel
* @regs: pt_regs of that context
* @n: function argument number (start from 0)
*
* regs_get_argument() returns @n th argument of the function call.
*
* Note you can get the parameter correctly if the function has no
* more than eight arguments.
*/
static inline unsigned long regs_get_kernel_argument(struct pt_regs *regs,
unsigned int n)
{
static const int nr_reg_arguments = 8;
static const unsigned int argument_offs[] = {
offsetof(struct pt_regs, a0),
offsetof(struct pt_regs, a1),
offsetof(struct pt_regs, a2),
offsetof(struct pt_regs, a3),
offsetof(struct pt_regs, a4),
offsetof(struct pt_regs, a5),
offsetof(struct pt_regs, a6),
offsetof(struct pt_regs, a7),
};

if (n < nr_reg_arguments)
return regs_get_register(regs, argument_offs[n]);
return 0;
}

#endif /* __ASSEMBLY__ */

#endif /* _ASM_RISCV_PTRACE_H */

0 comments on commit 70eee55

Please sign in to comment.