diff mbox series

powerpc/xmon: avoid warnings about variables that might be clobbered by ‘longjmp’

Message ID 20180622192718.24242-1-malat@debian.org (mailing list archive)
State Changes Requested
Headers show
Series powerpc/xmon: avoid warnings about variables that might be clobbered by ‘longjmp’ | expand

Commit Message

Mathieu Malaterre June 22, 2018, 7:27 p.m. UTC
Move initialization of variables after data definitions. This silence
warnings treated as error with W=1:

  arch/powerpc/xmon/xmon.c:3389:14: error: variable ‘name’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Werror=clobbered]
  arch/powerpc/xmon/xmon.c:3100:22: error: variable ‘tsk’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Werror=clobbered]

Signed-off-by: Mathieu Malaterre <malat@debian.org>
---
 arch/powerpc/xmon/xmon.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Christophe Leroy June 23, 2018, 4:59 p.m. UTC | #1
Le 22/06/2018 à 21:27, Mathieu Malaterre a écrit :
> Move initialization of variables after data definitions. This silence
> warnings treated as error with W=1:
> 
>    arch/powerpc/xmon/xmon.c:3389:14: error: variable ‘name’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Werror=clobbered]
>    arch/powerpc/xmon/xmon.c:3100:22: error: variable ‘tsk’ might be clobbered by ‘longjmp’ or ‘vfork’ [-Werror=clobbered]

Is that an invalid warning ?

If so, please explain in the commit log.

Otherwise, I'd expect one to fix the warning, not just cheat on GCC.

Christophe


> 
> Signed-off-by: Mathieu Malaterre <malat@debian.org>
> ---
>   arch/powerpc/xmon/xmon.c | 6 ++++--
>   1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
> index 47166ad2a669..982848c784ff 100644
> --- a/arch/powerpc/xmon/xmon.c
> +++ b/arch/powerpc/xmon/xmon.c
> @@ -3097,10 +3097,11 @@ static void show_pte(unsigned long addr)
>   static void show_tasks(void)
>   {
>   	unsigned long tskv;
> -	struct task_struct *tsk = NULL;
> +	struct task_struct *tsk;
>   
>   	printf("     task_struct     ->thread.ksp    PID   PPID S  P CMD\n");
>   
> +	tsk = NULL;
>   	if (scanhex(&tskv))
>   		tsk = (struct task_struct *)tskv;
>   
> @@ -3386,10 +3387,11 @@ static void xmon_print_symbol(unsigned long address, const char *mid,
>   			      const char *after)
>   {
>   	char *modname;
> -	const char *name = NULL;
> +	const char *name;
>   	unsigned long offset, size;
>   
>   	printf(REG, address);
> +	name = NULL;
>   	if (setjmp(bus_error_jmp) == 0) {
>   		catch_memory_errors = 1;
>   		sync();
> 

---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Segher Boessenkool June 23, 2018, 7:47 p.m. UTC | #2
On Sat, Jun 23, 2018 at 06:59:27PM +0200, christophe leroy wrote:
> 
> 
> Le 22/06/2018 à 21:27, Mathieu Malaterre a écrit :
> >Move initialization of variables after data definitions. This silence
> >warnings treated as error with W=1:
> >
> >   arch/powerpc/xmon/xmon.c:3389:14: error: variable ‘name’ might be 
> >   clobbered by ‘longjmp’ or ‘vfork’ [-Werror=clobbered]
> >   arch/powerpc/xmon/xmon.c:3100:22: error: variable ‘tsk’ might be 
> >   clobbered by ‘longjmp’ or ‘vfork’ [-Werror=clobbered]
> 
> Is that an invalid warning ?

No, both are correct warnings.  GCC can not see which functions it only
has a declaration of can call longjmp.

> Otherwise, I'd expect one to fix the warning, not just cheat on GCC.

Yes, the patch seems to change the code in such a way that some versions
of GCC will no longer warn.  Which does not make to code any more correct.

Either restructure the code, or make the var non-automatic, or make it
volatile.


Segher
Mathieu Malaterre June 26, 2018, 6:27 a.m. UTC | #3
On Sat, Jun 23, 2018 at 9:47 PM Segher Boessenkool
<segher@kernel.crashing.org> wrote:
>
> On Sat, Jun 23, 2018 at 06:59:27PM +0200, christophe leroy wrote:
> >
> >
> > Le 22/06/2018 à 21:27, Mathieu Malaterre a écrit :
> > >Move initialization of variables after data definitions. This silence
> > >warnings treated as error with W=1:
> > >
> > >   arch/powerpc/xmon/xmon.c:3389:14: error: variable ‘name’ might be
> > >   clobbered by ‘longjmp’ or ‘vfork’ [-Werror=clobbered]
> > >   arch/powerpc/xmon/xmon.c:3100:22: error: variable ‘tsk’ might be
> > >   clobbered by ‘longjmp’ or ‘vfork’ [-Werror=clobbered]
> >
> > Is that an invalid warning ?
>
> No, both are correct warnings.  GCC can not see which functions it only
> has a declaration of can call longjmp.

I assumed those were false positive warnings, given how easy it was to
defeat them. Let give it another try.

> > Otherwise, I'd expect one to fix the warning, not just cheat on GCC.
>
> Yes, the patch seems to change the code in such a way that some versions
> of GCC will no longer warn.  Which does not make to code any more correct.
>
> Either restructure the code, or make the var non-automatic, or make it
> volatile.
>
>
> Segher
diff mbox series

Patch

diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index 47166ad2a669..982848c784ff 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -3097,10 +3097,11 @@  static void show_pte(unsigned long addr)
 static void show_tasks(void)
 {
 	unsigned long tskv;
-	struct task_struct *tsk = NULL;
+	struct task_struct *tsk;
 
 	printf("     task_struct     ->thread.ksp    PID   PPID S  P CMD\n");
 
+	tsk = NULL;
 	if (scanhex(&tskv))
 		tsk = (struct task_struct *)tskv;
 
@@ -3386,10 +3387,11 @@  static void xmon_print_symbol(unsigned long address, const char *mid,
 			      const char *after)
 {
 	char *modname;
-	const char *name = NULL;
+	const char *name;
 	unsigned long offset, size;
 
 	printf(REG, address);
+	name = NULL;
 	if (setjmp(bus_error_jmp) == 0) {
 		catch_memory_errors = 1;
 		sync();