When system crashed, it leaves a tombstone file in /data/tombstone. I found a bunch of addresses as below.
#00 pc 00010a20 /system/lib/libc.so
#01 pc 0000b332 /system/lib/libc.so
#02 pc 0000ca62 /system/lib/bluez-plugin/audio.so
#03 pc 0000d1ce /system/lib/bluez-plugin/audio.so
#04 pc 0000e0ba /system/lib/bluez-plugin/audio.so
Let's suppose that there is a trouble caused by address 0000e0ba /system/lib/bluez-plugin/audio.so
.
I used 'add2line' to see which line made it bad like this.
{TOOL_CHAIN}/arm-linux-androideabi-addr2line -f -e android/{OUT}/target/product/{PRODUCT}/symbols/system/lib/bluez-plugin/audio.so 0000e0ba
It showed the specific line in code that made the trouble.
Here's the question. I don't really understand how PC's address in tombstone is directly matched to its .so's address every time it runs. Obviously this is to (post-mortem) debug after system died, which means phone's power already goes off.
Should I think that dynamic library(.so) is always loaded into the same address in RAM even after reboot?