The ARM manual mentions that:
During execution, PC does not contain the address of the currently executing instruction. The address of the currently executing instruction is typically PC-8 for ARM, or PC-4 for Thumb.
Does this apply for PC values in crash backtraces as well?
For example, if I have the following backtrace (from Android armv7 device using ARM instructions):
libSomeLib.so!SomeClass::someMethod [someFile.cpp : 638 + 0x4]
r0 = 0x00000001 r1 = 0xffffffff r2 = 0x00000000 r3 = 0xd4fcd71c
r4 = 0xd39b9284 r5 = 0xd39b927c r6 = 0xd39b9278 r7 = 0xc7025520
r8 = 0xc5e1d7b0 r9 = 0xe01136a8 r10 = 0x00000012 r12 = 0xd39b9268
fp = 0xd39b92d4 sp = 0xd39b9268 lr = 0xd4ea1f24 pc = 0xd4ea1f24
...
0xd47cb000 - 0xd5079fff libSomeLib.so ???
Should I look for the crashing instruction inside libSomeLib.so at 0xd4ea1f24-0xd47cb000=0x006D6F24 or 0xd4ea1f24-0xd47cb000-8=0x006D6F1C?