[syslinux:firmware] mk: reinstate -mregparm for BIOS

syslinux-bot for Matt Fleming matt.fleming at intel.com
Thu Jun 20 06:51:07 PDT 2013


Commit-ID:  db25b06af0a4be7231a120d53b24cc01e17ed315
Gitweb:     http://www.syslinux.org/commit/db25b06af0a4be7231a120d53b24cc01e17ed315
Author:     Matt Fleming <matt.fleming at intel.com>
AuthorDate: Wed, 19 Jun 2013 10:44:11 +0100
Committer:  Matt Fleming <matt.fleming at intel.com>
CommitDate: Wed, 19 Jun 2013 10:44:11 +0100

mk: reinstate -mregparm for BIOS

There's still a bunch of assembly code that assumes we're building our C
objects with -mregparm=3. For example, the code to transition from
16-bit real-mode mode to 32-bit protected mode assumes this. Violating
this assumption leads to various hangs, caused by garbage function
arguments.

Put back -mregparm into CFLAGS that was removed in commit 8789d2689564
("mk/embedded.mk: Don't use -mregparm in core").

Signed-off-by: Matt Fleming <matt.fleming at intel.com>

---
 mk/com32.mk    | 4 ++++
 mk/elf.mk      | 4 ++++
 mk/embedded.mk | 5 +++++
 mk/lib.mk      | 4 ++++
 4 files changed, 17 insertions(+)

diff --git a/mk/com32.mk b/mk/com32.mk
index 89ede83..55dc10c 100644
--- a/mk/com32.mk
+++ b/mk/com32.mk
@@ -48,6 +48,10 @@ GCCOPT += $(call gcc_ok,-falign-jumps=0,-malign-jumps=0)
 GCCOPT += $(call gcc_ok,-falign-labels=0,-malign-labels=0)
 GCCOPT += $(call gcc_ok,-falign-loops=0,-malign-loops=0)
 
+ifndef EFI_BUILD
+GCCOPT += -mregparm=3 -DREGPARM=3
+endif
+
 com32  := $(topdir)/com32
 RELOCS := $(com32)/tools/relocs
 
diff --git a/mk/elf.mk b/mk/elf.mk
index faca4e1..8f2421a 100644
--- a/mk/elf.mk
+++ b/mk/elf.mk
@@ -60,6 +60,10 @@ CFLAGS     = $(GCCOPT) -W -Wall \
 	     -I$(com32)/libutil/include -I$(com32)/include \
 		-I$(com32)/include/sys $(GPLINCLUDE) -I$(core)/include \
 		-I$(objdir) -DLDLINUX=\"$(LDLINUX)\"
+ifndef EFI_BUILD
+CFLAGS	  += -mregparm=3 -DREGPARM=3
+endif
+
 SFLAGS     = $(GCCOPT) -D__COM32__ 
 LDFLAGS    = -m elf_$(ARCH) -shared --hash-style=gnu -T $(com32)/lib/$(ARCH)/elf.ld --as-needed
 LIBGCC    := $(shell $(CC) $(GCCOPT) --print-libgcc)
diff --git a/mk/embedded.mk b/mk/embedded.mk
index 5a7632e..1614d8bc 100644
--- a/mk/embedded.mk
+++ b/mk/embedded.mk
@@ -38,7 +38,12 @@ GCCOPT    += $(call gcc_ok,-ffreestanding,)
 GCCOPT	  += $(call gcc_ok,-fno-stack-protector,)
 GCCOPT	  += $(call gcc_ok,-fwrapv,)
 GCCOPT	  += $(call gcc_ok,-freg-struct-return,)
+ifdef EFI_BUILD
 GCCOPT    += -Os -fomit-frame-pointer -msoft-float
+else
+GCCOPT    += -Os -fomit-frame-pointer -mregparm=3 -DREGPARM=3 \
+             -msoft-float
+endif
 GCCOPT    += $(call gcc_ok,-fno-exceptions,)
 GCCOPT	  += $(call gcc_ok,-fno-asynchronous-unwind-tables,)
 GCCOPT	  += $(call gcc_ok,-fno-strict-aliasing,)
diff --git a/mk/lib.mk b/mk/lib.mk
index 596e928..6ae26c8 100644
--- a/mk/lib.mk
+++ b/mk/lib.mk
@@ -54,6 +54,10 @@ WARNFLAGS = $(GCCWARN) -Wpointer-arith -Wwrite-strings -Wstrict-prototypes -Winl
 
 CFLAGS  = $(OPTFLAGS) $(REQFLAGS) $(WARNFLAGS) $(LIBFLAGS)
 
+ifndef EFI_BUILD
+CFLAGS += -mregparm=3 -DREGPARM=3
+endif
+
 VPATH = $(SRC)
 LIBOTHER_OBJS = \
 	atoi.o atol.o atoll.o calloc.o creat.o		\


More information about the Syslinux-commits mailing list