On Sat, 24 Apr 2004, Stanislaw Skowronek wrote:
> why do we attempt to compile the kernel with 32-bit GAS abi and 64-bit GCC
> abi? Is it because the module loader is broken and supports only 32-bit
> ELFs? Then what about machines which load their kernels at weird 64-bit
> addresses, like 0xa800000020004000 (Octane)?
1. Backward compatibility. Old versions of gas/ld were buggy or
non-functional (depending on the version used) when using the (n)64 ABI.
Search the mailing list archives -- I'm pretty sure anything since
2.13.2.1 should be safe, though.
2. Using the o32 ABI makes the binary smaller due to 32-bit pointers. If
used without care, it can lead to pointer crops, though. Anyway, some
people say it's important for them, despite the associated hassle.
> I have changed it to 64-bit abi in my Octane kernel, because it won't even
> compile otherwise. I've got gcc 3.3.2, gas 2.14.
I know. I build using (n)64 consistently for two years successfully --
it's OK even with gcc 2.95.x. Making a choice between the ABIs for gas
user-selectable is on my to-do list for some time. For now I think `make
gas-abi=64 ...' is probably the easiest workaround, though you'll need to
objcopy the resulting image to a 32-bit ELF file manually if your firmware
or loader cannot cope with 64-bit ELF binaries. Well, I don't like the
automatic copy anyway -- it wastes too much disk space in the long run;
perhaps as a compromise it should be user-selectable, too (ditto about
SREC).
Maciej
--
+ Maciej W. Rozycki, Technical University of Gdansk, Poland +
+--------------------------------------------------------------+
+ e-mail: macro@ds2.pg.gda.pl, PGP key available +
|