GCC didn't prepare anything. If you haven't reloaded esp, you're still in GRUB's stack.
The best way to reserve space for your stack will be to declare a large "resd" array in .bss section in your ASM startup file.
Code:
section .bss
stack:
resd STACK_SIZE
.end:
section .text
_kernel_entry_point
mov esp, stack.end
; do more initialisation stuff
call kmain
cli
hlt
Now, at the "page guard" idea, beware ... Take a sit, a cup of steamy drink and a moment to think about it.
<Fenring> What's going to happen when your kernel will try to write to the guard page ? hmmmm ah ... A page fault. What does the CPU do when an exception occurs ? it pushes the eip and cs values on the stack ... but how will it do it if the top of the stack cannot be accessed ? hmmmm ahh ...
</Fenring>
I guess you bet it. Using page fault trap cannot be used on kernel stacks. Only in usermode stacks. What you can use instead is segments protection, which will give you a stack fault exception which you can catch through a task gate exception handler.