All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Ellerman <mpe@ellerman.id.au>
To: Petr Mladek <pmladek@suse.com>, Bagas Sanjaya <bagasdotme@gmail.com>
Cc: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org,
	Sergey Senozhatsky <senozhatsky@chromium.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	John Ogness <john.ogness@linutronix.de>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	David Howells <dhowells@redhat.com>,
	Jordan Niethe <jniethe5@gmail.com>
Subject: Re: dangling pointer to '__str' error on ppc64_defconfig, GCC 12.1.0
Date: Mon, 30 May 2022 20:53:01 +1000	[thread overview]
Message-ID: <87k0a3l2b6.fsf@mpe.ellerman.id.au> (raw)
In-Reply-To: <Yo9+fQ32Br9+NpUW@alley>

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

WARNING: multiple messages have this Message-ID (diff)
From: Michael Ellerman <mpe@ellerman.id.au>
To: Petr Mladek <pmladek@suse.com>, Bagas Sanjaya <bagasdotme@gmail.com>
Cc: John Ogness <john.ogness@linutronix.de>,
	linux-kernel@vger.kernel.org,
	Steven Rostedt <rostedt@goodmis.org>,
	David Howells <dhowells@redhat.com>,
	Sergey Senozhatsky <senozhatsky@chromium.org>,
	Paul Mackerras <paulus@samba.org>,
	Jordan Niethe <jniethe5@gmail.com>,
	linuxppc-dev@lists.ozlabs.org
Subject: Re: dangling pointer to '__str' error on ppc64_defconfig, GCC 12.1.0
Date: Mon, 30 May 2022 20:53:01 +1000	[thread overview]
Message-ID: <87k0a3l2b6.fsf@mpe.ellerman.id.au> (raw)
In-Reply-To: <Yo9+fQ32Br9+NpUW@alley>

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

  reply	other threads:[~2022-05-30 10:53 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-26  9:17 dangling pointer to '__str' error on ppc64_defconfig, GCC 12.1.0 Bagas Sanjaya
2022-05-26  9:17 ` Bagas Sanjaya
2022-05-26 13:19 ` Petr Mladek
2022-05-26 13:19   ` Petr Mladek
2022-05-30 10:53   ` Michael Ellerman [this message]
2022-05-30 10:53     ` Michael Ellerman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87k0a3l2b6.fsf@mpe.ellerman.id.au \
    --to=mpe@ellerman.id.au \
    --cc=bagasdotme@gmail.com \
    --cc=benh@kernel.crashing.org \
    --cc=dhowells@redhat.com \
    --cc=jniethe5@gmail.com \
    --cc=john.ogness@linutronix.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=paulus@samba.org \
    --cc=pmladek@suse.com \
    --cc=rostedt@goodmis.org \
    --cc=senozhatsky@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.