On some devices there’s a very weird issue with shared libraries and unaligned access (which is strange since unaligned access should kill all ARM devices, shouldn’t it?)
Using shared libraries (libvcmi.so, various AIs) makes it segfault at random places (in calls between them I guess?), this is not too hard to solve and just statically linking everything and hacking CGameInterface.cpp’s to not use dlopen/dlsym seems to solve this one.
And then there’s unaligned access, i.e. at CDefHandler::getSprite,
SSpriteDef sd = * reinterpret_cast<const SSpriteDef *>(FDef + BaseOffset);
BaseOffset % 4 != 0
and maybe in some other places?
echo 2 > /proc/cpu/alignment
makes it run but that’s a really bad solution to this problem.