Re: [PATCH][next] ftrace: Fix -Wcast-function-type warnings on powerpc64

From: Gustavo A. R. Silva
Date: Tue Oct 05 2021 - 12:46:28 EST


On Tue, Oct 05, 2021 at 12:35:22PM -0400, Steven Rostedt wrote:
> On Tue, 5 Oct 2021 11:18:12 -0500
> "Gustavo A. R. Silva" <gustavoars@xxxxxxxxxx> wrote:
>
> > On Tue, Oct 05, 2021 at 11:17:14AM -0400, Steven Rostedt wrote:
> > > On Tue, 5 Oct 2021 00:39:22 -0500
> > > "Gustavo A. R. Silva" <gustavoars@xxxxxxxxxx> wrote:
> > >
> > > > In order to make sure new function cast mismatches are not introduced
> > > > in the kernel (to avoid tripping CFI checking), the kernel should be
> > > > globally built with -Wcast-function-type.
> > > >
> > > > So, fix the following -Wcast-function-type warnings on powerpc64
> > > > (ppc64_defconfig):
> > >
> > > I think I'll go back and add my linker magic.
> > >
> > > https://lore.kernel.org/all/20200617165616.52241bde@xxxxxxxxxxxxxxxx/
> > >
> > > I'll clean it up a bit too. I'll have a patch in a bit.
> >
> > Awesome. :)
> >
> > Thanks
> > --
>
> Does this fix it for you?

Nop; there are still some warnings (ppc64_defconfig):

kernel/trace/ftrace.c: In function ‘ftrace_ops_get_list_func’:
kernel/trace/ftrace.c:171:10: error: returning ‘void (*)(long unsigned int, long unsigned int, struct ftrace_ops *, struct ftrace_regs *)’ from a function with incompatible return type ‘ftrace_func_t’ {aka ‘void (*)(long unsigned int, long unsigned int)’} [-Werror=incompatible-pointer-types]
171 | return ftrace_ops_list_func;
| ^~~~~~~~~~~~~~~~~~~~
kernel/trace/ftrace.c: In function ‘update_ftrace_function’:
kernel/trace/ftrace.c:204:8: error: assignment to ‘ftrace_func_t’ {aka ‘void (*)(long unsigned int, long unsigned int)’} from incompatible pointer type ‘void (*)(long unsigned int, long unsigned int, struct ftrace_ops *, struct ftrace_regs *)’ [-Werror=incompatible-pointer-types]
204 | func = ftrace_ops_list_func;
| ^
kernel/trace/ftrace.c:217:11: warning: comparison of distinct pointer types lacks a cast
217 | if (func == ftrace_ops_list_func) {
| ^~
kernel/trace/ftrace.c: In function ‘ftrace_modify_all_code’:
kernel/trace/ftrace.c:2695:35: error: passing argument 1 of ‘ftrace_update_ftrace_func’ from incompatible pointer type [-Werror=incompatible-pointer-types]
2695 | err = ftrace_update_ftrace_func(ftrace_ops_list_func);
| ^~~~~~~~~~~~~~~~~~~~
| |
| void (*)(long unsigned int, long unsigned int, struct ftrace_ops *, struct ftrace_regs *)
In file included from kernel/trace/ftrace.c:29:
./include/linux/ftrace.h:585:52: note: expected ‘ftrace_func_t’ {aka ‘void (*)(long unsigned int, long unsigned int)’} but argument is of type ‘void (*)(long unsigned int, long unsigned int, struct ftrace_ops *, struct ftrace_regs *)’
585 | extern int ftrace_update_ftrace_func(ftrace_func_t func);
| ~~~~~~~~~~~~~~^~~~
kernel/trace/ftrace.c:2705:38: warning: comparison of distinct pointer types lacks a cast
2705 | if (update && ftrace_trace_function != ftrace_ops_list_func) {
| ^~

--
Gustavo