Re: [x86] Access off the bottom of stack causes a segfault?
From: Mikael Pettersson
Date: Tue Oct 14 2003 - 15:48:52 EST
Chris Lattner writes:
> > > Generated code:
> > > .intel_syntax
> > > ...
> > > main:
> > > mov DWORD PTR [%ESP - 16004], %EBP # Save EBP to stack
> > ^^^^^^^^^^^^
> > Yes, this is the problem (even Windows does that IIRC).
> Ok, I realize what's going on here. The question is, why does the linux
> kernel consider this to be a bug? Where (in the X86 specs) is it
> documented that it's illegal to access off the bottom of the stack?
> My compiler does a nice leaf function optimization where it does not even
> bother to adjust the stack for leaf functions, which eliminates the adds
> and subtracts entirely from these (common) functions. This completely
> invalidates the optimization.
The common definition of a leaf function is one that does
not need an activation record. Whether you call another
function or not is immaterial, it's the stack allocation
that counts. Your code is using an implicit activation
record, which, as you've found out, doesn't work.
If you desperately need to clobber below %esp (which is a bug
except on x86-64) then you can use sigaltstack() and SA_ONSTACK
in sigaction() to force signal handlers off your stack. Doing
this safely requires C library specific hacks. (Why? Because
not all sigaction() calls are in _your_ code, typically.)
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/