Hi Geert,
On Fri, Jan 30, 2009 at 09:23:38AM +0100, Geert Uytterhoeven wrote:
> On Fri, 30 Jan 2009, Manuel Lauss wrote:
> > CC arch/mips/kernel/traps.o
> > cc1: warnings being treated as errors
> > /linux-2.6.git/arch/mips/kernel/traps.c: In function 'set_uncached_handler':
> > /linux-2.6.git/arch/mips/kernel/traps.c:1599: error: format not a string
> > literal and no format arguments
> >
> > The fastest fix is the patch below, but I don't know whether it is
> > the right thing to do.
> >
> > ---
> >
> > diff --git a/arch/mips/Makefile b/arch/mips/Makefile
> > index 7378b91..70ddf83 100644
> > --- a/arch/mips/Makefile
> > +++ b/arch/mips/Makefile
> > @@ -78,7 +78,7 @@ all-$(CONFIG_BOOT_ELF64) := $(vmlinux-64)
> > # machines may also. Since BFD is incredibly buggy with respect to
> > # crossformat linking we rely on the elf2ecoff tool for format conversion.
> > #
> > -cflags-y += -G 0 -mno-abicalls -fno-pic -pipe
> > +cflags-y += -G 0 -mno-abicalls -fno-pic -pipe -Wno-format
> > cflags-y += -msoft-float
> > LDFLAGS_vmlinux += -G 0 -static -n -nostdlib
> > MODFLAGS += -mlong-calls
>
> No, you don't want to disable printf()-style format checking.
>
> diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
> index f6083c6..16f499c 100644
> --- a/arch/mips/kernel/traps.c
> +++ b/arch/mips/kernel/traps.c
> @@ -1596,7 +1596,7 @@ void __cpuinit set_uncached_handler(unsigned long
> offset, void *addr,
> ebase += (read_c0_ebase() & 0x3ffff000);
>
> if (!addr)
> - panic(panic_null_cerr);
> + panic("%s", panic_null_cerr);
>
> memcpy((void *)(uncached_ebase + offset), addr, size);
> }
>
> Hwoever, I'm a bit surprised gcc isn't smart enough to notice the string is
> fixed and safe. Perhaps because panic_null_cerr is not const?
There's a similar one in cpu-probe.c which doesn't bother it at all,
probably because the call to panic() has 2 arguments instead of one.
I say it's a gcc bug ;-)
Thanks!
Manuel Lauss
|