build your own cross-compiler !!!

And that makes me start thinking why the recompiled APP does not work with the closed-source LIB. Maybe the LIB has hardcoded an entry point in the APP and is not going via the reset vector?

Note also that the code really starts at 0x08011520, if you want to disassemble it. The +1 is a way to tell the processor this is thumb code. I am not sure if this is correct everywhere. This is also the reason for the .thumb directives in the assembly code.