While debugging some gdb-related FAILs, I discovered that gcc's
-fstack-check option effectively calls alloca() to adjust the stack
pointer.
However, it doesn't mark the stack adjustment as FRAME_RELATED even
when it's setting up the local variables for the function.
In the case of rx-elf, for this testcase, the CFA for the function is
defined in terms of the stack pointer - and thus is incorrect after
the alloca call.
My question is: who's fault is this? Should alloca() tell the debug
stuff that the stack pointer has changed? Should it tell it to not
use $sp at all? Should the debug stuff "just know" that $sp isn't a
valid choice for the CFA?
The testcase from gdb is pretty simple:
void medium_frame ()
{
char S [16384];
small_frame ();
}