[PATCH v3 4/4] kernel/trace: remove calling regs_* when compiling HEXAGON

From: Song Chen
Date: Mon Dec 05 2022 - 03:23:43 EST


kernel test robot reports below errors:

In file included from kernel/trace/trace_events_synth.c:22:
>> kernel/trace/trace_probe_kernel.h:203:9: error: call to
undeclared function 'regs_get_register'; ISO C99 and later
do not support implicit function declarations
[-Wimplicit-function-declaration]
val = regs_get_register(regs, code->param);

HEXAGON doesn't define and implement those reg_* functions
underneath arch/hexagon as well as other archs. To remove
those errors, i have to include those function calls in
"CONFIG_HEXAGON"

It looks ugly, but i don't know any other way to fix it,
this patch can be reverted after reg_* have been in place
in arch/hexagon.

Signed-off-by: Song Chen <chensong_2000@xxxxxx>
Reported-by: kernel test robot <lkp@xxxxxxxxx>
---
kernel/trace/trace_probe_kernel.h | 21 +++++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/kernel/trace/trace_probe_kernel.h b/kernel/trace/trace_probe_kernel.h
index 8c42abe0dacf..7e958b7f07e5 100644
--- a/kernel/trace/trace_probe_kernel.h
+++ b/kernel/trace/trace_probe_kernel.h
@@ -130,8 +130,7 @@ probe_mem_read(void *dest, void *src, size_t size)
return copy_from_kernel_nofault(dest, src, size);
}

-static nokprobe_inline unsigned long
-get_event_field(struct fetch_insn *code, void *rec)
+static unsigned long get_event_field(struct fetch_insn *code, void *rec)
{
struct ftrace_event_field *field = code->data;
unsigned long val;
@@ -194,23 +193,41 @@ static int
process_fetch_insn(struct fetch_insn *code, void *rec, void *dest,
void *base)
{
+#ifndef CONFIG_HEXAGON
struct pt_regs *regs = rec;
+#endif
unsigned long val;

retry:
/* 1st stage: get value from context */
switch (code->op) {
case FETCH_OP_REG:
+#ifdef CONFIG_HEXAGON
+ val = 0;
+#else
val = regs_get_register(regs, code->param);
+#endif
break;
case FETCH_OP_STACK:
+#ifdef CONFIG_HEXAGON
+ val = 0;
+#else
val = regs_get_kernel_stack_nth(regs, code->param);
+#endif
break;
case FETCH_OP_STACKP:
+#ifdef CONFIG_HEXAGON
+ val = 0;
+#else
val = kernel_stack_pointer(regs);
+#endif
break;
case FETCH_OP_RETVAL:
+#ifdef CONFIG_HEXAGON
+ val = 0;
+#else
val = regs_return_value(regs);
+#endif
break;
case FETCH_OP_IMM:
val = code->immediate;
--
2.25.1