ARM cortex-M4 16-byte alignment due to printf()


I've asked this Q in Stack-Overflow, but no help... ;-(

I've encountered a strange behavior which blocks a sort of journaling file-system flash architecture I'm working on.
I'm trying to position an executable at a specific 8-byte aligned address, by modifying the MEMORY/FLASH/ORIGIN field in my linker-script.
Everything is fine till I add a call to printf() - then the start address is 16-byte aligned.

I'm using the minimal semihost sample application from the gcc-arm-none-eabi toolchain (gcc-arm-none-eabi-9-2020-q2-update-win32).
I changed the MEMORY/FLASH/ORIGIN field in the linker-script to 8.

  • Commenting-out the printf() calls generates a 8-byte alignment.
  • adding the printf() calls generates an 16-byte alignment.

Generating the HEX-file: arm-none-eabi-objcopy.exe -O ihex .\semihost-CM4.axf .\semihost-CM4.hex

One can download the project:

$ make clean
$ make
More questions in this forum