summarylogtreecommitdiffstats
path: root/gnu-efi-disable-mmx-and-sse.patch
blob: 563661bec79638787a51cc5869150491e7373284 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
From d703c370c78578b63e7b5e04a3801c7f5fbf0c94 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Fri, 31 May 2013 15:00:11 -0400
Subject: [PATCH] Disable MMX and SSE.

GCC 4.8.0 adds some optimizations that will use movups/movaps (and use
%xmm* registers) when they're faster, and of course that won't work at
all since UEFI firmwares aren't guaranteed to initialize the mmx/sse
instructions.

This will be even more annoying, since most UEFI firmwares don't
initialize the #DE or #UD trap handlers, and your backtrace will be a
random path through uninitialized memory, occasionally including
whatever address the IDT has for #UD, but also addresses like "0x4" and
"0x507" that you don't normally expect to see in your call path.
---
 Make.defaults | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/Make.defaults b/Make.defaults
index 0585915..ea7513e 100644
--- a/Make.defaults
+++ b/Make.defaults
@@ -60,7 +60,9 @@ CPPFLAGS   = -DCONFIG_$(ARCH)
 ifeq ($(GCCNEWENOUGH),1)
 CPPFLAGS   += -DGNU_EFI_USE_MS_ABI -maccumulate-outgoing-args --std=c11
 endif
-CFLAGS	   = $(ARCH3264) -O2 -fpic -Wall -fshort-wchar -fno-strict-aliasing -fno-merge-constants -ffreestanding -fno-stack-protector -fno-stack-check
+CFLAGS	   = $(ARCH3264) -O2 -fpic -Wall -fshort-wchar -fno-strict-aliasing \
+	     -fno-merge-constants -ffreestanding -fno-stack-protector \
+	     -fno-stack-check
 ASFLAGS    = $(ARCH3264)
 LDFLAGS	   = -nostdlib --no-undefined
 INSTALL	   = install
@@ -78,13 +80,14 @@ ifeq ($(ARCH),ia64)
 endif
 
 ifeq ($(ARCH), ia32)
+  CFLAGS += -mno-mmx -mno-sse
   ifeq ($(HOSTARCH), x86_64)
     ARCH3264 = -m32
   endif
 endif
 
 ifeq ($(ARCH), x86_64)
-  CFLAGS += -mno-red-zone
+  CFLAGS += -mno-red-zone -mno-mmx -mno-sse
   ifeq ($(HOSTARCH), ia32)
     ARCH3264 = -m64
   endif
-- 
1.8.2.1