Re: Possible GCC contamination of Linux

Richard B. Johnson (root@chaos.analogic.com)
Wed, 22 Sep 1999 08:41:19 -0400 (EDT)


On Wed, 22 Sep 1999, Artur Skawina wrote:

> > > > a patch which adds -fno-builtins to the Makefile and makes the abs() work.
>
> > So you can compile a i386 or i486 kernel with a 'C' compiler that was
> > built on a i686 machine. It took me a week to find the reason why
> > a kernel, configured to run on a 486 (or even 386) would crash on
> > the boot of a 486.
>
> > The only built-in I found used was abs(). It was the '486 killer.
>
> the builtin abs() was a known issue, but I assumed it was harmless.
> Are you saying gcc generates 686 instructions (cmov i guess) even
> when configured for a 486? I'd like to reproduce this -- which gcc
> version, cflags, file? Does '-march=i486' (or ..=i386) solve this?
> Do you have the offending abs dissassembly?

The machine does 'Uncompressing Linux', 'Booting...' Screen-flash crash
reboot. There is no way in hell I can find the instruction(s) causing
the problem(s).

As previously posted, I compiled the kernel with both the machine and
architecture defines for both 386 and 486 with (of course) the .config
set for a '386 with no coprocessor (math emulation).

The code generated would boot if the code was compiled with the same
compiler (gcc-2.8.1) compiled on a '486. It would not boot if the
complier was built on my '686.

> code generated for the builtin vs proper define (ie one which can
> take args w/ side effects (the one i saw posted didn't)).
>

The one posted has enough ()'s to take args with side effects. There
is only one input variable.

Cheers,
Dick Johnson
**** FILE SYSTEM WAS MODIFIED ****
Penguin : Linux version 2.3.13 on an i686 machine (400.59 BogoMips).
Warning : It's hard to remain at the trailing edge of technology.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/