sprintf -> strcpy (was: Re: gcc-3.4)

From: Geert Uytterhoeven
Date: Mon Sep 27 2004 - 06:20:48 EST



(CC'ing lkml)

On Sun, 26 Sep 2004, Jochen Friedrich wrote:
> > Or maybe it is the binutils? After downgrading to 2.14 from a previous
> > toolchain source, I could build linux-2.6.8 with gcc-3.4.
>
> I'm using binutils 2.15 and gcc 3.4.2 on Alpha to cross compile 2.6. All i
> noticed is that the compiler optimizes sprintf(x,"%s",y) to strcpy(x,y)
> which then fails to link or causes unresolved externals because strcpy is
> an inline function on m68k. The fix is to do the replacement in the
> source, like here:

I remember seeing a similar discussion on lkml about some other automatic
replacements a while ago, but I cannot remember the details...

Is this the correct(TM) way to fix this issue, or is there a better solution?

> diff -c -r1.1.1.21 binfmt_misc.c
> *** fs/binfmt_misc.c 15 Aug 2004 14:18:10 -0000 1.1.1.21
> --- fs/binfmt_misc.c 26 Sep 2004 18:54:27 -0000
> ***************
> *** 461,467 ****
> dp = page + strlen(page);
>
> /* print the special flags */
> ! sprintf (dp, "%s", flags);
> dp += strlen (flags);
> if (e->flags & MISC_FMT_PRESERVE_ARGV0) {
> *dp ++ = 'P';
> --- 461,467 ----
> dp = page + strlen(page);
>
> /* print the special flags */
> ! strcpy (dp, flags);
> dp += strlen (flags);
> if (e->flags & MISC_FMT_PRESERVE_ARGV0) {
> *dp ++ = 'P';
>

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/