This will be nice once it mainstream: SplitStacks - GCC Wiki
That's neat. You can do some cool stuff with support from the tool chain.

It would be interesting to put the return addresses on a completely different stack, and implement a software stack for local variables.