My system has a STM32F2xx bootloader(0x0800 0000) and an app (0x0800 4000).
1. No bootloader(only app, placed at address 0x0800 0000), the app works as expected.
2. No LTO enabled, bootloader jumps to __main successfully and app is loaded at power up.
When Link time optimisation (LTO) option in KEIL is enabled for app (0x0800 4000), a hard fault is encountered in __scatterload. Here is a snapshot of fault and saved register in my fault hander (fault handler has a breakpoint instruction).