A new explicit option is now supported by the cross build plug-in.
It was introduced in the common "Optimizations" section, since it needs to be added both to compile and link lines.
The short story about this option is that the compiler generates a byte code representation of the program, and the linker further processes these byte codes, having a better view of the entire program.
Small changes were needed in the vectors_*.c files, to mark the vectors table used, otherwise the linker completely removed it).
Also the branch from Reset_Handler to _start was recoded as a long branch, to avoid a linker error.
Although hard to believe, this additional optimisation is effective, for example one of the STM32F407 test was reduced from 7481 to 7301 bytes.