public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Mikael Pettersson <mikpe@csd.uu.se>
To: Chris Lattner <sabre@nondot.org>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [x86] Access off the bottom of stack causes a segfault?
Date: Tue, 14 Oct 2003 22:47:54 +0200	[thread overview]
Message-ID: <16268.24826.62507.628677@gargle.gargle.HOWL> (raw)
In-Reply-To: <Pine.LNX.4.44.0310141358420.4165-100000@nondot.org>

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.)

  parent reply	other threads:[~2003-10-14 20:47 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-10-14 18:31 [x86] Access off the bottom of stack causes a segfault? Chris Lattner
2003-10-14 18:37 ` Davide Libenzi
2003-10-14 19:00   ` Chris Lattner
2003-10-14 18:45     ` Davide Libenzi
2003-10-14 19:28     ` Richard B. Johnson
2003-10-14 19:48       ` Chris Lattner
2003-10-17 23:55         ` Jamie Lokier
2003-10-14 20:47     ` Mikael Pettersson [this message]
2003-10-14 18:42 ` Brian Gerst
2003-10-14 18:49 ` Chris Lattner
2003-10-14 18:42   ` Petr Vandrovec
2003-10-14 19:02     ` Chris Lattner
2003-10-14 19:18 ` Richard B. Johnson
2003-10-14 20:43   ` H. Peter Anvin
2003-10-17  0:23 ` Eric W. Biederman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=16268.24826.62507.628677@gargle.gargle.HOWL \
    --to=mikpe@csd.uu.se \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sabre@nondot.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox