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:
parent
3c1bb2b181
commit
ed8842afb0
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
|
||||||
|
|
11
grub2.spec
11
grub2.spec
@ -41,7 +41,7 @@
|
|||||||
Name: grub2
|
Name: grub2
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Version: 2.00
|
Version: 2.00
|
||||||
Release: 19%{?dist}
|
Release: 18%{?dist}
|
||||||
Summary: Bootloader with support for Linux, Multiboot and more
|
Summary: Bootloader with support for Linux, Multiboot and more
|
||||||
|
|
||||||
Group: System Environment/Base
|
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
|
Patch0361: 0361-add-GRUB_DISABLE_SUBMENU-option.patch
|
||||||
Patch0362: 0362-blscfg-add-blscfg-module-to-parse-Boot-Loader-Specif.patch
|
Patch0362: 0362-blscfg-add-blscfg-module-to-parse-Boot-Loader-Specif.patch
|
||||||
Patch0363: 0363-Move-bash-completion-script-922997.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)
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
|
|
||||||
@ -758,7 +760,6 @@ fi
|
|||||||
%{_bindir}/%{name}-mkimage
|
%{_bindir}/%{name}-mkimage
|
||||||
%{_bindir}/%{name}-mkpasswd-pbkdf2
|
%{_bindir}/%{name}-mkpasswd-pbkdf2
|
||||||
%{_bindir}/%{name}-mkrelpath
|
%{_bindir}/%{name}-mkrelpath
|
||||||
%{_bindir}/%{name}-mount
|
|
||||||
%{_bindir}/%{name}-glue-efi
|
%{_bindir}/%{name}-glue-efi
|
||||||
%{_bindir}/%{name}-render-label
|
%{_bindir}/%{name}-render-label
|
||||||
%ifnarch %{sparc}
|
%ifnarch %{sparc}
|
||||||
@ -788,11 +789,9 @@ fi
|
|||||||
%{_datarootdir}/grub/themes/starfield
|
%{_datarootdir}/grub/themes/starfield
|
||||||
|
|
||||||
%changelog
|
%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
|
* Fri May 10 2013 Matthias Clasen <mclasen@redhat.com> - 2.00-18
|
||||||
- Move the starfield theme to a subpackage (#962004)
|
- 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
|
* Wed Apr 24 2013 Peter Jones <pjones@redhat.com> - 2.00-17.pj0
|
||||||
- Rebase to upstream snapshot.
|
- Rebase to upstream snapshot.
|
||||||
|
Loading…
Reference in New Issue
Block a user