Fix release to -18 as that's the build we're doing...

This build:
- Moves starfield to a subpackage
- Doesn't allow SSE or MMX on UEFI builds (#949761)

Signed-off-by: Peter Jones <pjones@redhat.com>
This commit is contained in:
Peter Jones 2013-05-16 16:43:20 -04:00
parent 3c1bb2b181
commit ed8842afb0
5 changed files with 108 additions and 206 deletions

View File

@ -0,0 +1,28 @@
From ebef39797bef17e7a28678f4b8370e6b63e10cc4 Mon Sep 17 00:00:00 2001
From: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Date: Tue, 7 May 2013 20:42:05 +0200
Subject: [PATCH 2/5] * configure.ac: Don't use extended registers on
x86_64. Reported by: Peter Jones.
---
ChangeLog | 5 +++++
configure.ac | 2 ++
2 files changed, 7 insertions(+)
diff --git a/configure.ac b/configure.ac
index 6c310f7..80549b0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -464,7 +464,9 @@ if test "x$target_cpu" = xi386; then
else
TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1"
fi
+fi
+if test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64; then
# Some toolchains enable these features by default, but they need
# registers that aren't set up properly in GRUB.
TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-3dnow"
--
1.8.2.1

View File

@ -0,0 +1,27 @@
From 780556c3e1047acbcdfa588980f52c73d9aae89a Mon Sep 17 00:00:00 2001
From: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Date: Wed, 8 May 2013 11:01:11 +0200
Subject: [PATCH 3/5] * configure.ac: Don't disable extended registers on
emu.
---
ChangeLog | 4 ++++
configure.ac | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index 80549b0..fa0e00a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -466,7 +466,7 @@ if test "x$target_cpu" = xi386; then
fi
fi
-if test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64; then
+if ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 ) && test "x$platform" != xemu; then
# Some toolchains enable these features by default, but they need
# registers that aren't set up properly in GRUB.
TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-3dnow"
--
1.8.2.1

View File

@ -0,0 +1,48 @@
From 5c6c289a6a6c939e7fb3f4a7ba8a737794875a44 Mon Sep 17 00:00:00 2001
From: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Date: Wed, 8 May 2013 11:05:37 +0200
Subject: [PATCH 4/5] * conf/Makefile.common: Poison float and double on
non-emu.
---
ChangeLog | 4 ++++
conf/Makefile.common | 5 +++++
util/import_gcry.py | 6 ++++++
3 files changed, 15 insertions(+)
diff --git a/conf/Makefile.common b/conf/Makefile.common
index c185a55..ca1cb17 100644
--- a/conf/Makefile.common
+++ b/conf/Makefile.common
@@ -40,6 +40,11 @@ endif
# Other options
+if ! COND_emu
+CFLAGS_PLATFORM += -Dfloat=__grub_poision
+CFLAGS_PLATFORM += -Ddouble=__grub_poision
+endif
+
CPPFLAGS_DEFAULT = -DGRUB_FILE=\"$(subst $(srcdir)/,,$<)\"
CPPFLAGS_DEFAULT += -I$(builddir)
CPPFLAGS_DEFAULT += -I$(srcdir)
diff --git a/util/import_gcry.py b/util/import_gcry.py
index 18f5253..afa8e69 100644
--- a/util/import_gcry.py
+++ b/util/import_gcry.py
@@ -488,6 +488,12 @@ for src in sorted (os.listdir (os.path.join (indir, "src"))):
fw.close ()
continue
f = codecs.open (infile, "r", "utf-8")
+ if src == "types.h":
+ fw.write (f.read ().replace ("float f;", "").replace ("double g;", ""))
+ f.close ()
+ fw.close ()
+ continue
+
fw.write (f.read ())
f.close ()
fw.close ()
--
1.8.2.1

View File

@ -1,200 +0,0 @@
From 14870ff4617fd482054ceb2f307a91582e5e8817 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Thu, 18 Apr 2013 13:10:53 -0400
Subject: [PATCH] Use memcpy instead of direct assignment for complex values.
(#949761)
gcc 4.8.0 will emit SSE copies for such large chunks of data, and that
means using XMM0, which the UEFI ABI forbids.
So with 4.7.2, you get:
000000000000000f <canvas_set_bounds>:
f: 48 8b 06 mov (%rsi),%rax
12: 48 89 47 38 mov %rax,0x38(%rdi)
16: 48 8b 46 08 mov 0x8(%rsi),%rax
1a: 48 89 47 40 mov %rax,0x40(%rdi)
1e: c3 retq
And with 4.8.0 you get:
000000000000000f <canvas_set_bounds>:
f: 48 83 ec 18 sub $0x18,%rsp
13: 0f 10 06 movups (%rsi),%xmm0
16: 0f 29 04 24 movaps %xmm0,(%rsp)
1a: 0f 11 47 38 movups %xmm0,0x38(%rdi)
1e: 48 83 c4 18 add $0x18,%rsp
22: c3 retq
As soon as we hit the movaps, we hit a trap. Once we do, though, since the
memory pointed at by the IDT is basically random memory during UEFI execution,
we find our CPU looping between the entry point for #UD (invalid opcode) and
the first piece of garbage in RAM after it.
Right now, we have two options. Either 1) trick the compiler into not
emitting that sequence of instructions, or 2) turn off SSE instruction
generation. Number 2 currently requires making gnulib's printf not use
double or long double. It's probably the right thing to do, but I'm not
sure what the right way to do it is.
So the following is method #1.
---
grub-core/gfxmenu/gui_box.c | 4 ++--
grub-core/gfxmenu/gui_canvas.c | 4 ++--
grub-core/gfxmenu/gui_circular_progress.c | 4 ++--
grub-core/gfxmenu/gui_image.c | 4 ++--
grub-core/gfxmenu/gui_label.c | 4 ++--
grub-core/gfxmenu/gui_list.c | 4 ++--
grub-core/gfxmenu/gui_progress_bar.c | 4 ++--
7 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/grub-core/gfxmenu/gui_box.c b/grub-core/gfxmenu/gui_box.c
index 38b15f9..702f844 100644
--- a/grub-core/gfxmenu/gui_box.c
+++ b/grub-core/gfxmenu/gui_box.c
@@ -264,7 +264,7 @@ static void
box_set_bounds (void *vself, const grub_video_rect_t *bounds)
{
grub_gui_box_t self = vself;
- self->bounds = *bounds;
+ memcpy(&self->bounds, bounds, sizeof (*bounds));
self->layout_func (self, 1, 0, 0); /* Relayout the children. */
}
@@ -272,7 +272,7 @@ static void
box_get_bounds (void *vself, grub_video_rect_t *bounds)
{
grub_gui_box_t self = vself;
- *bounds = self->bounds;
+ memcpy(bounds, &self->bounds, sizeof (*bounds));
}
/* The box's preferred size is based on the preferred sizes
diff --git a/grub-core/gfxmenu/gui_canvas.c b/grub-core/gfxmenu/gui_canvas.c
index b3919c2..3d4fae9 100644
--- a/grub-core/gfxmenu/gui_canvas.c
+++ b/grub-core/gfxmenu/gui_canvas.c
@@ -160,14 +160,14 @@ static void
canvas_set_bounds (void *vself, const grub_video_rect_t *bounds)
{
grub_gui_canvas_t self = vself;
- self->bounds = *bounds;
+ memcpy(&self->bounds, bounds, sizeof (*bounds));
}
static void
canvas_get_bounds (void *vself, grub_video_rect_t *bounds)
{
grub_gui_canvas_t self = vself;
- *bounds = self->bounds;
+ memcpy(bounds, &self->bounds, sizeof (*bounds));
}
static grub_err_t
diff --git a/grub-core/gfxmenu/gui_circular_progress.c b/grub-core/gfxmenu/gui_circular_progress.c
index e06d40c..f7684cc 100644
--- a/grub-core/gfxmenu/gui_circular_progress.c
+++ b/grub-core/gfxmenu/gui_circular_progress.c
@@ -202,14 +202,14 @@ static void
circprog_set_bounds (void *vself, const grub_video_rect_t *bounds)
{
circular_progress_t self = vself;
- self->bounds = *bounds;
+ memcpy(&self->bounds, bounds, sizeof (*bounds));
}
static void
circprog_get_bounds (void *vself, grub_video_rect_t *bounds)
{
circular_progress_t self = vself;
- *bounds = self->bounds;
+ memcpy(bounds, &self->bounds, sizeof (*bounds));
}
static void
diff --git a/grub-core/gfxmenu/gui_image.c b/grub-core/gfxmenu/gui_image.c
index 29784ed..d864096 100644
--- a/grub-core/gfxmenu/gui_image.c
+++ b/grub-core/gfxmenu/gui_image.c
@@ -158,7 +158,7 @@ static void
image_set_bounds (void *vself, const grub_video_rect_t *bounds)
{
grub_gui_image_t self = vself;
- self->bounds = *bounds;
+ memcpy(&self->bounds, bounds, sizeof (*bounds));
rescale_image (self);
}
@@ -166,7 +166,7 @@ static void
image_get_bounds (void *vself, grub_video_rect_t *bounds)
{
grub_gui_image_t self = vself;
- *bounds = self->bounds;
+ memcpy(bounds, &self->bounds, sizeof (*bounds));
}
/* FIXME: inform rendering system it's not forced minimum. */
diff --git a/grub-core/gfxmenu/gui_label.c b/grub-core/gfxmenu/gui_label.c
index 637578f..daf6290 100644
--- a/grub-core/gfxmenu/gui_label.c
+++ b/grub-core/gfxmenu/gui_label.c
@@ -134,14 +134,14 @@ static void
label_set_bounds (void *vself, const grub_video_rect_t *bounds)
{
grub_gui_label_t self = vself;
- self->bounds = *bounds;
+ memcpy(&self->bounds, bounds, sizeof (*bounds));
}
static void
label_get_bounds (void *vself, grub_video_rect_t *bounds)
{
grub_gui_label_t self = vself;
- *bounds = self->bounds;
+ memcpy(bounds, &self->bounds, sizeof (*bounds));
}
static void
diff --git a/grub-core/gfxmenu/gui_list.c b/grub-core/gfxmenu/gui_list.c
index 1982d9a..23b29ba 100644
--- a/grub-core/gfxmenu/gui_list.c
+++ b/grub-core/gfxmenu/gui_list.c
@@ -362,14 +362,14 @@ static void
list_set_bounds (void *vself, const grub_video_rect_t *bounds)
{
list_impl_t self = vself;
- self->bounds = *bounds;
+ memcpy(&self->bounds, bounds, sizeof (*bounds));
}
static void
list_get_bounds (void *vself, grub_video_rect_t *bounds)
{
list_impl_t self = vself;
- *bounds = self->bounds;
+ memcpy(bounds, &self->bounds, sizeof (*bounds));
}
static void
diff --git a/grub-core/gfxmenu/gui_progress_bar.c b/grub-core/gfxmenu/gui_progress_bar.c
index 965c6b3..4e458e9 100644
--- a/grub-core/gfxmenu/gui_progress_bar.c
+++ b/grub-core/gfxmenu/gui_progress_bar.c
@@ -232,14 +232,14 @@ static void
progress_bar_set_bounds (void *vself, const grub_video_rect_t *bounds)
{
grub_gui_progress_bar_t self = vself;
- self->bounds = *bounds;
+ memcpy(&self->bounds, bounds, sizeof (*bounds));
}
static void
progress_bar_get_bounds (void *vself, grub_video_rect_t *bounds)
{
grub_gui_progress_bar_t self = vself;
- *bounds = self->bounds;
+ memcpy(bounds, &self->bounds, sizeof (*bounds));
}
static void
--
1.8.2.1

View File

@ -41,7 +41,7 @@
Name: grub2
Epoch: 1
Version: 2.00
Release: 19%{?dist}
Release: 18%{?dist}
Summary: Bootloader with support for Linux, Multiboot and more
Group: System Environment/Base
@ -415,7 +415,9 @@ Patch0360: 0360-Add-bootpath-device-to-the-list.patch
Patch0361: 0361-add-GRUB_DISABLE_SUBMENU-option.patch
Patch0362: 0362-blscfg-add-blscfg-module-to-parse-Boot-Loader-Specif.patch
Patch0363: 0363-Move-bash-completion-script-922997.patch
Patch0364: 0364-Use-memcpy-instead-of-direct-assignment-for-complex-.patch
Patch0364: 0002-configure.ac-Don-t-use-extended-registers-on-x86_64.patch
Patch0365: 0003-configure.ac-Don-t-disable-extended-registers-on-emu.patch
Patch0366: 0004-conf-Makefile.common-Poison-float-and-double-on-non-.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@ -758,7 +760,6 @@ fi
%{_bindir}/%{name}-mkimage
%{_bindir}/%{name}-mkpasswd-pbkdf2
%{_bindir}/%{name}-mkrelpath
%{_bindir}/%{name}-mount
%{_bindir}/%{name}-glue-efi
%{_bindir}/%{name}-render-label
%ifnarch %{sparc}
@ -788,11 +789,9 @@ fi
%{_datarootdir}/grub/themes/starfield
%changelog
* Wed May 15 2013 Matthias Clasen <mclasen@redhat.com> - 2.00-19
- Fix a typo
* Fri May 10 2013 Matthias Clasen <mclasen@redhat.com> - 2.00-18
- Move the starfield theme to a subpackage (#962004)
- Don't allow SSE or MMX on UEFI builds (#949761)
* Wed Apr 24 2013 Peter Jones <pjones@redhat.com> - 2.00-17.pj0
- Rebase to upstream snapshot.