Ken,
Would you get a patch together for Google? This looks like a good small fix for when they upgrade to 4.5. Before pushing would you make sure that the fix doesn't break the current Android build. This should generate some good discussion about the underlying prelink issue.
-Zach
On 9 June 2011 14:56, Jim Huang jim.huang@linaro.org wrote:
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
linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev