On 10/12/2010 11:30 PM, Albert ARIBAUD wrote: > Le 12/10/2010 23:00, Joakim Tjernlund a écrit : > >> Yes, but the difference isn't really the arch. It is the -mrelocatable >> flag that is the big difference. > Not only: obviously, implementing GOT relocation is not done the same on > both archs, and it simply is not beneficial on ARM wrt PPC in terms of > instructions. I did a pretty extensive run of tests with and without > -fPIC and -fPIE on ARM, and GOT relocation clearly makes code bigger, > whereas it does not PPC. > > This simply implies that -fPIC is a better choice for PPC (and hence > -mrelocatable) while -fpie is a better one for ARM. Hi All, In particular, the PPC takes two 32 bit instructions to load the known address of a variable into a register. If the GOT is used, a single 32 bit instruction can load the address of a variable from the GOT table (pointed to by a "fixed" register) into a register. In both cases, there are two memory cycles, but in the GOT case, only one instruction is required. This is why the GOT based code is smaller. However, the GOT cannot be used to address constants and some other items that are not "variables". I do think that -fPIC and -fpie are not mutually incompatible. On the PPC, the GOT references would be relocated in the loop that updates the GOT and the references to constants would be relocated by the ELF relocation code. That is how shared libraries are relocated.
Best Regards, Bill Campbell > Amicalement, _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot