This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

__main hard fault when LTO enabled with bootloader

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).

Parents Reply Children
  • You could also build your boot-loader without LTO, but keep this enabled for the rest of your application.

    To do this in MDK, create a new Group (right-click > Add Group), and place the bootloader sources therein.

    Then you can right-click > Options for that group and set group-specific compiler options, such as disabling LTO for that group.