> But in this case you will have to remember to leave enough RAM for the stack
You can probably just modify the .stack section in the linker script, with something like this at the beginning-
. = ORIGIN(ram) + LENGTH(ram) - STACK_SIZE;
that way you get the warning if STACK_SIZE is not available, but still get _estack set to the end of ram. Probably not a big deal, but if you are not paying attention (and you are a hungry ram user), I imagine it can creep up and a little warning from the linker before 'something' happens may be nice.
'arm-none-whatever-size -A' may produce a better rundown of memory usage (.stack will be displayed separately from bss and relocate/data).
I'm not sure where a malloc/new starts looking when no heap symbols specified, so there could be some reason the above may not be a good idea.