[syslinux] [PATCH 0/2] Do not use the "red zone" on EFI

celelibi at gmail.com celelibi at gmail.com
Fri Nov 27 14:41:47 PST 2015


From: Sylvain Gault <sylvain.gault at gmail.com>

The System V ABI for x86-64 specify that a "red zone" is an area of 128 bytes
above the current stack frame. This area can be used by a called function in
order to avoid the overhead of modifying the stack pointer. The direct effect
is that interrupt/event/signal handlers must not write to this area. In the
UEFI calling convention, there is no such thing and the event handlers do write
their data just above the current stack frame.

However, gcc generate by default code that uses the red zone. This has to be
disabled explicitely with the option -mno-red-zone. Not doing so lead to some
functions behaving randomly once in a while.

Fixing this revealed that some Makefiles out of the efi/ directory have some
specific options when building for BIOS or for EFI. These Makefiles do this by
testing the EFI_BUILD variable. However, this variable wasn't passed down the
Makefiles making these specific options never used.

Best regards,
Sylvain Gault

Sylvain Gault (2):
  Makefile: Pass down the variable EFI_BUILD
  Makefile: Always use -mno-red-zone for EFI

 Makefile       | 17 +++++++++--------
 com32/Makefile |  2 +-
 diag/Makefile  |  2 +-
 mk/com32.mk    |  4 +++-
 mk/elf.mk      |  6 ++++--
 mk/embedded.mk |  5 ++---
 mk/lib.mk      |  4 +++-
 tests/Makefile |  6 +++---
 8 files changed, 26 insertions(+), 20 deletions(-)

-- 
2.6.2



More information about the Syslinux mailing list