+++ Colin Tuckley [06-03-10 08:35 +0000]:
> I spent quite a bit of time yesterday working out what was going on when
> using gcc 3.3 to compile bootldr.
This discussion should probably be on-list. at least on balloon-dev if you
think it is too esoteric for balloon.
> Since this has ramifications for Balloon 3 can I ask all 4 of you to please
> comment on the things below.
>
> 1) I'm going to be doing a major clean up of the bootldr code at some point
> in the future and if I don't hear anything I'm going to remove pretty much
> *everything* that is not used or explicitly to do with Balloons.
Seems sensible, although if there is code for booting from pcmcia
CF/ethernet, or USB then that might be worth keeping around for someone to
target to the balloon hardware (so we could do netbooting).
> 2) After working through all the various options used in the Makefile the
> following has come to light:
>
> a) -UBOOT_SILENT gets added to the compiler options. A grep for this shows
> that it is only referenced once in boot-sa1100.s so why is it *unset* when
> we never set it? or is this just a hangover from something which got
> removed. There are other options in a similar situation what should we do in
> the general case?
>
> b) -mshort-load-words is set, this is a deprecated alias for
> -mno-alignment-traps which does nothing on ARMv4 and later processors, I've
> removed it.
I not quite sure this actually does _nothing_ on ARMv4 or later, but I agree
it shouldn't be needed and getting rid of it shouldn't make any difference.
It was essentially a hack so that riscPCs would work properly (armv4 with no
halfword loads)
> c) both -fPIC and -fpic were being added to the options for CC, these do
> subtly different things, which should we be using? not both since they
> actually conflict I think.
Presumably they don't fundamentally conflict otherwise gcc would have
complained or produced code that didn't work. The gcc docs suggest that on
arm fpic and fPIC are equivalent. - the diffeence is only the size of the
Global offset table used, which can be extended on some arches.
> 3) This is probably the most important one, my problems with odd-ball things
> happening due to initialised variables not getting set appear to be due to
> the different optimisations done by gcc 2.95 and gcc 3.3 when the -O (-O1)
> option is set.
>
> If I set -O0 (optimisation off) then things work properly. I'm still
> investigating whats actually happening, but so far it looks like gcc 3.3
> includes a lot more optimisation at level 1. The man page mentions 18 flags
> that get turned on in gcc 3.3 at level 1 vs only 4 in gcc 2.95
>
> Is it worth trying to find out which flag is causing the problem and then
> trying to find and fix the bit of code or turn that option off individually?
> Or should we just run bootldr with no optimisation?
The bootloader doesn't have to run more than once each boot so is not
speed-critical in that sense. We do like it to take as
little time as possible to load things, but unless -O0 is obvioulsy slower
(time a boot with a watch), then I think just turn it off.
Wookey
--
Aleph One Ltd, Bottisham, CAMBRIDGE, CB5 9BA, UK Tel +44 (0) 1223 811679
work: http://www.aleph1.co.uk/ play: http://www.chaos.org.uk/~wookey/