2

I know that in x86_64, there exists a 128 byte red zone above (or below, address-wise) the stack pointer that functions can use without subtracting from rsp.

This sounds to me like the only things that need to be aware of the red-zone are situations in which code will get interrupted by other code running on the same stack.

The only cases where this seems relevant to me are:

  • OS-level interrupt handlers (either switch stacks without touching the red zone, or subtract red zone size before using the stack)
  • user-level signal handlers (since AFAIK POSIX signals deliver on the same stack if sigaltstack() wasn't used)

In those cases, when that code handles the existence of a red zone, linking together code compiled with -mno-red-zone and without it should not be a problem, right?

It'd only be a problem if the code assumes -mno-red-zone and some code uses it anyway.

Is my reasoning about this correct?

If this is correct, why do so many OS-dev resources tell you to enable -mno-red-zone? is it just to reduce complexity?

Ferdi265
  • 129

0 Answers0