2011-06-07 14:46:33

by Jesper Juhl

[permalink] [raw]
Subject: [PATCH][RFC] Sparc: Remove trigraph in die_if_kernel() message.

In arch/sparc/kernel/traps_32.c::do_priv_instruction() we have this:

die_if_kernel("Penguin instruction from Penguin mode??!?!", regs);

If I'm not mistaken, that "??!" will be taken as a trigraph for "|" by the
preprocessor, so the final string will end up either as
"Penguin instruction from Penguin mode|?!"
which I assume is not what we want, or as the correct string but with a
warning about an ignored trigraph which I assume we don't want either. So,
in order to elliminate the trigraph but keep the original string intact I
changed it to

die_if_kernel("Penguin instruction from Penguin mode?""?!?!", regs);

I've tested with a small test program on my x86-64 host and it behaves as
I would expect, but I've not tested the actual code in
arch/sparc/kernel/traps_32.c since I have no way to compile for sparc
(which is why I submit this as a [RFC] patch).

Please take a look and apply if you agree :-)

Signed-off-by: Jesper Juhl <[email protected]>
---
traps_32.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/sparc/kernel/traps_32.c b/arch/sparc/kernel/traps_32.c
index c0490c7..d99ca40 100644
--- a/arch/sparc/kernel/traps_32.c
+++ b/arch/sparc/kernel/traps_32.c
@@ -137,7 +137,7 @@ void do_priv_instruction(struct pt_regs *regs, unsigned long pc, unsigned long n
siginfo_t info;

if(psr & PSR_PS)
- die_if_kernel("Penguin instruction from Penguin mode??!?!", regs);
+ die_if_kernel("Penguin instruction from Penguin mode?""?!?!", regs);
info.si_signo = SIGILL;
info.si_errno = 0;
info.si_code = ILL_PRVOPC;


--
Jesper Juhl <[email protected]> http://www.chaosbits.net/
Don't top-post http://www.catb.org/jargon/html/T/top-post.html
Plain text mails only, please.


2011-06-09 22:59:48

by David Miller

[permalink] [raw]
Subject: Re: [PATCH][RFC] Sparc: Remove trigraph in die_if_kernel() message.

From: Jesper Juhl <[email protected]>
Date: Tue, 7 Jun 2011 16:38:19 +0200 (CEST)

> In arch/sparc/kernel/traps_32.c::do_priv_instruction() we have this:
>
> die_if_kernel("Penguin instruction from Penguin mode??!?!", regs);
>
> If I'm not mistaken, that "??!" will be taken as a trigraph for "|" by the
> preprocessor, so the final string will end up either as
> "Penguin instruction from Penguin mode|?!"
> which I assume is not what we want, or as the correct string but with a
> warning about an ignored trigraph which I assume we don't want either. So,
> in order to elliminate the trigraph but keep the original string intact I
> changed it to
>
> die_if_kernel("Penguin instruction from Penguin mode?""?!?!", regs);
>
> I've tested with a small test program on my x86-64 host and it behaves as
> I would expect, but I've not tested the actual code in
> arch/sparc/kernel/traps_32.c since I have no way to compile for sparc
> (which is why I submit this as a [RFC] patch).
>
> Please take a look and apply if you agree :-)
>
> Signed-off-by: Jesper Juhl <[email protected]>

Applied, thanks Jesper :-)

2011-06-09 23:03:28

by Al Viro

[permalink] [raw]
Subject: Re: [PATCH][RFC] Sparc: Remove trigraph in die_if_kernel() message.

On Thu, Jun 09, 2011 at 03:59:43PM -0700, David Miller wrote:
> > If I'm not mistaken, that "??!" will be taken as a trigraph for "|" by the
> > preprocessor, so the final string will end up either as
> > "Penguin instruction from Penguin mode|?!"

Not without -trigraphs, which is not on by default...

> Applied, thanks Jesper :-)

BTW, idiomatic way to deal with those is to use \? instead of string concat...

2011-06-09 23:06:16

by David Miller

[permalink] [raw]
Subject: Re: [PATCH][RFC] Sparc: Remove trigraph in die_if_kernel() message.

From: Al Viro <[email protected]>
Date: Fri, 10 Jun 2011 00:03:22 +0100

> On Thu, Jun 09, 2011 at 03:59:43PM -0700, David Miller wrote:
>> > If I'm not mistaken, that "??!" will be taken as a trigraph for "|" by the
>> > preprocessor, so the final string will end up either as
>> > "Penguin instruction from Penguin mode|?!"
>
> Not without -trigraphs, which is not on by default...

Oh, in that case I'll rever this.

Thanks Al.

2011-06-10 07:59:44

by Jesper Juhl

[permalink] [raw]
Subject: Re: [PATCH][RFC] Sparc: Remove trigraph in die_if_kernel() message.

On Thu, 9 Jun 2011, David Miller wrote:

> From: Al Viro <[email protected]>
> Date: Fri, 10 Jun 2011 00:03:22 +0100
>
> > On Thu, Jun 09, 2011 at 03:59:43PM -0700, David Miller wrote:
> >> > If I'm not mistaken, that "??!" will be taken as a trigraph for "|" by the
> >> > preprocessor, so the final string will end up either as
> >> > "Penguin instruction from Penguin mode|?!"
> >
> > Not without -trigraphs, which is not on by default...
>
> Oh, in that case I'll rever this.
>

Well, my gcc warns about it. It seems that -Wtrigraphs is enabled by
default:

[jj@dragon src]$ gcc --version
gcc (GCC) 4.6.0 20110603 (prerelease)
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.

[jj@dragon src]$ cat test.c
#include <stdio.h>

int main()
{
printf("Penguin instruction from Penguin mode??!?!");
return 0;
}
[jj@dragon src]$ gcc test.c
test.c: In function ?main?:
test.c:5:48: warning: trigraph ??! ignored, use -trigraphs to enable [-Wtrigraphs]


Which was why I wrote in my original submission mail :

"... which I assume is not what we want, or as the correct string but with
a warning about an ignored trigraph which I assume we don't want either."

So either we get the wrong string (if someone enables -trigraphs) or we
get a warning (at least with newer gcc's). Which is why I felt the patch
made sense as a way to avoid both unfortunate results.

--
Jesper Juhl <[email protected]> http://www.chaosbits.net/
Don't top-post http://www.catb.org/jargon/html/T/top-post.html
Plain text mails only, please.

2011-06-12 07:24:47

by Daniel K.

[permalink] [raw]
Subject: Re: [PATCH][RFC] Sparc: Remove trigraph in die_if_kernel() message.

Jesper Juhl wrote:
> On Thu, 9 Jun 2011, David Miller wrote:
>
>> From: Al Viro <[email protected]>
>> Date: Fri, 10 Jun 2011 00:03:22 +0100
>>
>>> On Thu, Jun 09, 2011 at 03:59:43PM -0700, David Miller wrote:
>>>>> If I'm not mistaken, that "??!" will be taken as a trigraph for "|" by the
>>>>> preprocessor, so the final string will end up either as
>>>>> "Penguin instruction from Penguin mode|?!"
>>> Not without -trigraphs, which is not on by default...
>> Oh, in that case I'll rever this.
>>
>
> Well, my gcc warns about it. It seems that -Wtrigraphs is enabled by
> default:

Perhaps the _real_ fix is just to remove all the interrobanging going on here,
and be in line with all the other die_if_kernel() calls in the file.

Something like this?

(Yeah, I shamelessly snarfed the patch from Jesper, and deleted all the excess
?'s and !'s. I haven't cared enough figure out the proper *-by: attribution
magic to credit Jesper, so someone just add whatever is necessary if they feel
so inclined. I can't pretend to care much about my contribution in this.)

Signed-off-by: Daniel K. <[email protected]>
---
diff --git a/arch/sparc/kernel/traps_32.c b/arch/sparc/kernel/traps_32.c
index c0490c7..d99ca40 100644
--- a/arch/sparc/kernel/traps_32.c
+++ b/arch/sparc/kernel/traps_32.c
@@ -137,7 +137,7 @@ void do_priv_instruction(struct pt_regs *regs, unsigned long pc, unsigned long n
siginfo_t info;

if(psr & PSR_PS)
- die_if_kernel("Penguin instruction from Penguin mode??!?!", regs);
+ die_if_kernel("Penguin instruction from Penguin mode", regs);
info.si_signo = SIGILL;
info.si_errno = 0;
info.si_code = ILL_PRVOPC;