Messages in this thread | | | Date | Wed, 2 Jan 2002 03:28:21 -0800 | From | Aaron Lehmann <> | Subject | Re: [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] | |