lkml.org 
[lkml]   [2002]   [Jan]   [2]   [last100]   RSS Feed
Views: [more markup]   [less markup]   [headers]   [forward]  
 
Messages in this thread
/
DateWed, 2 Jan 2002 03:28:21 -0800
FromAaron Lehmann <>
SubjectRe: [PATCH] C undefined behavior fix
On Wed, Jan 02, 2002 at 01:03:25AM +0200, Momchil Velikov wrote:
> Thus 
>    strcpy (dst, "abcdef" + 2)
> gives
>    memcpy (dst, "abcdef" + 2, 5)

IMHO gcc should not be touching these function calls, as they are not
made to a standard C library, and thus have different behaviors. I'm
suprised that gcc tries to optimize calls to these functions just
based on their names.

The gcc manpage mentions

       -ffreestanding
           Assert that compilation takes place in a freestanding
           environment.  This implies -fno-builtin.  A freestand­
           ing environment is one in which the standard library
           may not exist, and program startup may not necessarily
           be at "main".  The most obvious example is an OS ker­
           nel.  This is equivalent to -fno-hosted.

Why is Linux not using this? It sounds very appropriate. The only
things the manpage mentions that -fno-builtin would inhibit from being
optimized are memcpy() and alloca(). memcpy() has its own assembly
optimization and inlining on some (most?) archs, and as for alloca(),
I only see it being used a bit in the S/390 code, where the gcc
optimizations could quite possibly break something. I think
-ffreestanding definately should be used by the kernel to prevent gcc
from messing with its code in broken ways.
[unhandled content-type:application/pgp-signature]
\
 
 \ /
  Last update: 2005-03-22 11:15    [from the cache]
©2003-2008