Messages in this thread | | | Date | Tue, 14 Oct 2003 22:47:54 +0200 | From | Mikael Pettersson <> | Subject | Re: [x86] Access off the bottom of stack causes a segfault? |
| |
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?
Signal handlers.
> 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |