arch/powerpc/xmon/dis-asm.h: 2 * wrong specifiers ?

6 messages, 4 authors, 2016-06-28 · open the first message on its own page

arch/powerpc/xmon/dis-asm.h: 2 * wrong specifiers ?

From: David Binderman <hidden>
Date: 2016-06-27 08:04:27

Hello there,

linux-4.7-rc5/arch/powerpc/xmon/dis-asm.h:20]: (warning) %x in format
string (no. 1) requires 'unsigned int' but the argument type is
'unsigned long'.
[linux-4.7-rc5/arch/powerpc/xmon/dis-asm.h:26]: (warning) %x in format
string (no. 1) requires 'unsigned int' but the argument type is
'unsigned long'.

Source code is

static inline int print_insn_powerpc(unsigned long insn, unsigned long memaddr)
{
    printf("%.8x", insn);
    return 0;
}

static inline int print_insn_spu(unsigned long insn, unsigned long memaddr)
{
    printf("%.8x", insn);
    return 0;
}

Regards

David Binderman

Re: arch/powerpc/xmon/dis-asm.h: 2 * wrong specifiers ?

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2016-06-28 04:08:13

On Mon, 2016-06-27 at 09:04 +0100, David Binderman wrote:
Hello there,

linux-4.7-rc5/arch/powerpc/xmon/dis-asm.h:20]: (warning) %x in format
string (no. 1) requires 'unsigned int' but the argument type is
'unsigned long'.
[linux-4.7-rc5/arch/powerpc/xmon/dis-asm.h:26]: (warning) %x in format
string (no. 1) requires 'unsigned int' but the argument type is
'unsigned long'.
What config / toolchain are you using? I've never seen these.

Oh, I see, with CONFIG_XMON_DISASSEMBLY=n.
static inline int print_insn_powerpc(unsigned long insn, unsigned long memaddr)
{
    printf("%.8x", insn);
    return 0;
}
Send me a patch to cast insn to unsigned int?

cheers

Re: arch/powerpc/xmon/dis-asm.h: 2 * wrong specifiers ?

From: David Binderman <hidden>
Date: 2016-06-28 07:07:05

Hello there,

On Tue, Jun 28, 2016 at 5:08 AM, Michael Ellerman [off-list ref] wrote:
What config / toolchain are you using? I've never seen these.
A static analyser for C & C++ called cppcheck. Available from sourceforge.

I think you can also get a similar warning if you tweek the gcc compiler warning
flags. -Wformat=2 maybe.
quoted
static inline int print_insn_powerpc(unsigned long insn, unsigned long memaddr)
{
    printf("%.8x", insn);
    return 0;
}
Send me a patch to cast insn to unsigned int?
I don't know the code, but given that insn is unsigned long and so can go
past 32 bits, using a cast to unsigned int might throw away the
possibly important
upper bits.


Regards

David Binderman

Re: arch/powerpc/xmon/dis-asm.h: 2 * wrong specifiers ?

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2016-06-28 07:18:09

On Tue, 2016-06-28 at 08:06 +0100, David Binderman wrote:
On Tue, Jun 28, 2016 at 5:08 AM, Michael Ellerman [off-list ref] wrote:
quoted
What config / toolchain are you using? I've never seen these.
A static analyser for C & C++ called cppcheck. Available from sourceforge.

I think you can also get a similar warning if you tweek the gcc compiler warning
flags. -Wformat=2 maybe.
 
Ah OK. I've heard of it.
quoted
quoted
static inline int print_insn_powerpc(unsigned long insn, unsigned long memaddr)
{
    printf("%.8x", insn);
    return 0;
}
Send me a patch to cast insn to unsigned int?
I don't know the code, but given that insn is unsigned long and so can go
past 32 bits, using a cast to unsigned int might throw away the
possibly important upper bits.
powerpc instructions are always 32-bit.

We could change the signature for the function to take u32. Except it's the
fallback implementation for the real version which comes from binutils and we'd
prefer to keep that code the same as the binutils version.

cheers

Re: arch/powerpc/xmon/dis-asm.h: 2 * wrong specifiers ?

From: Segher Boessenkool <hidden>
Date: 2016-06-28 08:51:26

On Tue, Jun 28, 2016 at 08:06:56AM +0100, David Binderman wrote:
I think you can also get a similar warning if you tweek the gcc compiler warning
flags. -Wformat=2 maybe.
-Wformat=1 (which is enabled by -Wall) already warns for this.

warning: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'long unsigned int' [-Wformat=]


Segher

Re: arch/powerpc/xmon/dis-asm.h: 2 * wrong specifiers ?

From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2016-06-28 09:57:47

On Tue, 2016-06-28 at 08:06 +0100, David Binderman wrote:
I don't know the code, but given that insn is unsigned long and so
can go
past 32 bits, using a cast to unsigned int might throw away the
possibly important
upper bits.
our instructions are only ever 32-bits. That xmon code is ancient and
originated from 32-bits stuff. In fact some of Paulus earliest xmons
might even have run on platforms where int is 16 bits :-)

Cheers,
Ben.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help