Re: [PATCH] C undefined behavior fix

Aaron Lehmann
2002-01-02T11:29:15Z

[-- Attachment #1: Type: text/plain, Size: 1344 bytes --]

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.

[-- Attachment #2: Type: application/pgp-signature, Size: 232 bytes --]