summaryrefslogtreecommitdiff
path: root/kernels/linux-libre-pae/0007-Fix-the-use-of-code32_start-in-the-EFI-boot-stub.patch
diff options
context:
space:
mode:
authorAndré Fabian Silva Delgado <emulatorman@parabola.nu>2014-04-11 04:46:52 -0300
committerAndré Fabian Silva Delgado <emulatorman@parabola.nu>2014-04-11 04:46:52 -0300
commit9a7056bf7bbd21f46640e8b171820d021dc32a8e (patch)
tree0a66559f822a1827b966d27c21040fb7bba6a948 /kernels/linux-libre-pae/0007-Fix-the-use-of-code32_start-in-the-EFI-boot-stub.patch
parent60cd7f09fc7a95165fe22f922c711fb47a8dd87f (diff)
downloadabslibre-9a7056bf7bbd21f46640e8b171820d021dc32a8e.tar.gz
abslibre-9a7056bf7bbd21f46640e8b171820d021dc32a8e.tar.bz2
abslibre-9a7056bf7bbd21f46640e8b171820d021dc32a8e.zip
linux-libre-{pae,xen}-3.14-4: updating version
Diffstat (limited to 'kernels/linux-libre-pae/0007-Fix-the-use-of-code32_start-in-the-EFI-boot-stub.patch')
-rw-r--r--kernels/linux-libre-pae/0007-Fix-the-use-of-code32_start-in-the-EFI-boot-stub.patch96
1 files changed, 96 insertions, 0 deletions
diff --git a/kernels/linux-libre-pae/0007-Fix-the-use-of-code32_start-in-the-EFI-boot-stub.patch b/kernels/linux-libre-pae/0007-Fix-the-use-of-code32_start-in-the-EFI-boot-stub.patch
new file mode 100644
index 000000000..8cf776842
--- /dev/null
+++ b/kernels/linux-libre-pae/0007-Fix-the-use-of-code32_start-in-the-EFI-boot-stub.patch
@@ -0,0 +1,96 @@
+From ec8ec8362c46fd86571204d0fcce11c03477e5c5 Mon Sep 17 00:00:00 2001
+From: Matt Fleming <matt@console-pimps.org>
+Date: Wed, 9 Apr 2014 10:33:49 +0200
+Subject: [PATCH 7/7] Fix the use of code32_start in the EFI boot stub
+
+---
+ arch/x86/boot/compressed/eboot.c | 5 +++--
+ arch/x86/boot/compressed/head_32.S | 14 ++++++++------
+ arch/x86/boot/compressed/head_64.S | 9 +++------
+ 3 files changed, 14 insertions(+), 14 deletions(-)
+
+diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
+index a7677ba..78cbb2d 100644
+--- a/arch/x86/boot/compressed/eboot.c
++++ b/arch/x86/boot/compressed/eboot.c
+@@ -425,6 +425,9 @@ void setup_graphics(struct boot_params *boot_params)
+ * Because the x86 boot code expects to be passed a boot_params we
+ * need to create one ourselves (usually the bootloader would create
+ * one for us).
++ *
++ * The caller is responsible for filling out ->code32_start in the
++ * returned boot_params.
+ */
+ struct boot_params *make_boot_params(void *handle, efi_system_table_t *_table)
+ {
+@@ -483,8 +486,6 @@ struct boot_params *make_boot_params(void *handle, efi_system_table_t *_table)
+ hdr->vid_mode = 0xffff;
+ hdr->boot_flag = 0xAA55;
+
+- hdr->code32_start = (__u64)(unsigned long)image->image_base;
+-
+ hdr->type_of_loader = 0x21;
+
+ /* Convert unicode cmdline to ascii */
+diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S
+index 9116aac..f45ab7a 100644
+--- a/arch/x86/boot/compressed/head_32.S
++++ b/arch/x86/boot/compressed/head_32.S
+@@ -50,6 +50,13 @@ ENTRY(efi_pe_entry)
+ pushl %eax
+ pushl %esi
+ pushl %ecx
++
++ call reloc
++reloc:
++ popl %ecx
++ subl reloc, %ecx
++ movl %ecx, BP_code32_start(%eax)
++
+ sub $0x4, %esp
+
+ ENTRY(efi_stub_entry)
+@@ -63,12 +70,7 @@ ENTRY(efi_stub_entry)
+ hlt
+ jmp 1b
+ 2:
+- call 3f
+-3:
+- popl %eax
+- subl $3b, %eax
+- subl BP_pref_address(%esi), %eax
+- add BP_code32_start(%esi), %eax
++ movl BP_code32_start(%esi), %eax
+ leal preferred_addr(%eax), %eax
+ jmp *%eax
+
+diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S
+index c5c1ae0..b10fa66 100644
+--- a/arch/x86/boot/compressed/head_64.S
++++ b/arch/x86/boot/compressed/head_64.S
+@@ -217,6 +217,8 @@ ENTRY(efi_pe_entry)
+ cmpq $0,%rax
+ je 1f
+ mov %rax, %rdx
++ leaq startup_32(%rip), %rax
++ movl %eax, BP_code32_start(%rdx)
+ popq %rsi
+ popq %rdi
+
+@@ -230,12 +232,7 @@ ENTRY(efi_stub_entry)
+ hlt
+ jmp 1b
+ 2:
+- call 3f
+-3:
+- popq %rax
+- subq $3b, %rax
+- subq BP_pref_address(%rsi), %rax
+- add BP_code32_start(%esi), %eax
++ movl BP_code32_start(%esi), %eax
+ leaq preferred_addr(%rax), %rax
+ jmp *%rax
+
+--
+1.9.1
+