On 10 June 2011 00:08, Ken Werner ken.werner@linaro.org wrote:
Hi there,
I've got an android build system up and running and had a quick look into this. When using the gcc-linaro-4.5-2011.05-0 the bootanimation runs forever when compiling the libgui.so using -O[s|1|2]. For me it only works when disabling all optimizations (-O0). So, I've started with -O0 and tried to bisect the various optimization switches but I didn't fail. Next I've started with -O1 and disabled all the optimizations but it didn't pass. So, this approach was a dead end. Then I realized that the build system employs some sort of a prelinker called apriori. Adding 'LOCAL_PRELINK_MODULE := false' to the makefile disables the prelink step. And the resulting ELF binary finally worked (tested with -O[s|1|2]).
hi Ken,
Thanks for your progress in advance.
Disabling prelinking looks fine, and actually SensorService in "master" branch disables prelinking as well: http://android.git.kernel.org/?p=platform/frameworks/base.git%3Ba=blob%3Bf=s...
The library libsensorservice is highly related to SensorService, which is activated by SystemServer, an essential process to bring up Android framework functionality.
In directory frameworks/base/services, libsensorservice is the only library which is attributed as non-prelinked.
It would be good to understand the root cause of this because the workaround probably has drawbacks at run (load) time. Apriori gets two input files. The prelink-linux-arm.map which lists the start of the prelink addresses: libui.so 0xAB900000 # [~1M] libgui.so 0xAB800000 # [~1M] libskia.so 0xAB100000 # [~2M] and the libgui.so to be prelinked. I'd expect to see the resulting PhysAddr's somewhere nearby 0xAB800000 but this doesn't seem to be the case somehow. In order to exclude a miscompiled apriori, I've prelinked libgui using an apriori binary build with the prebuilt gcc44 - no difference. Therefore I don't think gcc is miscompiling but something went wrong whith the prelink step. But still - the android prelinking remains a mystery to me as I don't know what is supposed to be prelinked and what is actually failing. However, I think we are one step further.
So, can you verify the behavior difference between prelink maps as well?
Cheers, -jserv