I noticed that ST recently started distributing GCC 14.3.
When rebuilding my code with it, I noticed that the exact same code and compiler/linker flags produces a larger binary on GCC 14.3 than it did on GCC 13.3.
Another random Google search, and I think I may have actually found a possible answer to this question :-)
This post, which isn't exactly for CubeIDE or CubeCLT directly, but also references the GCC 14 update:
https://community.st.com/t5/developer-news/stm32cubeide-for-visual-studio-code-what-s-new-in-december-2025/ba-p/847010It contains the text:
GNU tools for STM32 - GCC-14- Newlib is rebuilt with -O2 optimization, trading some code size for better runtime performance, aligning with upstream Arm toolchains.
In other words, they did build the C library differently and that's what has increased code size. This comes in line with what I observed myself when trying to compare symbol sizes between GCC13 and GCC14 builds of my own current project. But it also explains why my code size also grew the one time I attempted compiling it with the official ARM GCC compiler just for curious comparison.
I do kinda wish they gave us a choice as to which build of newlib to use. And while I probably could kludge something myself here, I'd rather not use a customized toolchain if I can avoid it.
Fortunately, if I do decide to move to GCC 14, I currently can spare the flash space for my main firmware. My bootloader code, though, would need some changes to add headroom. (It just barely fits in its space as it is, though I know if a few tweaks I can do to shrink it if I absolutely have to.)
Edit: Of course this all led me to the discovery that I was inadvertently linking the full newlib instead of newlib-nano. After figuring out the linker magic to finally fix all of that and get everything building correctly, I think the real issue is now resolved.