Откуда берётся стек в программе выполняющейся без ОС (загрузчике ОС, например)? Насколько я себе представляю, его нужно создавать самому. Или есть какая-то магия gcc?
Пример из практики, код NetBSD.
int stack[8192/4 + 4] __attribute__((__aligned__ (4), __used__));
А в соседнем файле,
int devopen() {
...
/* allow disk blocks up to 65536 bytes */
char buf[65536];