Messages in this thread | | | From | Michael Ellerman <> | Subject | Re: dangling pointer to '__str' error on ppc64_defconfig, GCC 12.1.0 | Date | Mon, 30 May 2022 20:53:01 +1000 |
| |
Petr Mladek <pmladek@suse.com> writes: > On Thu 2022-05-26 16:17:15, Bagas Sanjaya wrote: >> Hi everyone, >> >> Attempting to build ppc64_defconfig kernel with powerpc64-unknown-linux-gnu >> (GCC 12.1.0) on v5.18, I got build error on ftrace.o: >> >> CC arch/powerpc/kernel/trace/ftrace.o >> CC init/init_task.o >> In file included from ./include/asm-generic/bug.h:22, >> from ./arch/powerpc/include/asm/bug.h:156, >> from ./include/linux/bug.h:5, >> from ./include/linux/thread_info.h:13, >> from ./include/asm-generic/preempt.h:5, >> from ./arch/powerpc/include/generated/asm/preempt.h:1, >> from ./include/linux/preempt.h:78, >> from ./include/linux/spinlock.h:55, >> from arch/powerpc/kernel/trace/ftrace.c:16: >> arch/powerpc/kernel/trace/ftrace.c: In function 'ftrace_modify_code': >> ./include/linux/printk.h:446:44: error: using a dangling pointer to '__str' [-Werror=dangling-pointer=] >> 446 | #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__) >> | ^ >> ./include/linux/printk.h:418:17: note: in definition of macro 'printk_index_wrap' >> 418 | _p_func(_fmt, ##__VA_ARGS__); \ >> | ^~~~~~~ >> ./include/linux/printk.h:489:9: note: in expansion of macro 'printk' >> 489 | printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__) >> | ^~~~~~ >> arch/powerpc/kernel/trace/ftrace.c:75:17: note: in expansion of macro 'pr_err' >> 75 | pr_err("%p: replaced (%s) != old (%s)", >> | ^~~~~~ >> In file included from ./arch/powerpc/include/asm/code-patching.h:14, >> from arch/powerpc/kernel/trace/ftrace.c:26: >> ./arch/powerpc/include/asm/inst.h:156:14: note: '__str' declared here >> 156 | char __str[PPC_INST_STR_LEN]; \ >> | ^~~~~ > > IMHO, the problem is in the macro: > > #define ppc_inst_as_str(x) \ > ({ \ > char __str[PPC_INST_STR_LEN]; \ > __ppc_inst_as_str(__str, x); \ > __str; \ > }) > > The buffer __str is defined inside the code block {} and > the macro passes the pointer to the buffer outside. > IMHO, from the compiler POV, the buffer does not exist > outside of the code block.
This warning seems kind of incompatible with statement expressions. But I guess the compiler is happy as long as the value returned is not a pointer. So I'm not sure I agree with the compiler here, but too bad for me I guess.
This macro has always been a bit awkward, I think I'm inclined to just get rid of it completely, and print the ulong value. I'll send a patch.
Anyway it's definitely not your problem, sorry you ended up on Cc.
cheers
| |