aboutsummaryrefslogtreecommitdiffstats
path: root/main/grub/0009-efi-Move-MS-DOS-stub-out-of-generic-PE-header-defini.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/grub/0009-efi-Move-MS-DOS-stub-out-of-generic-PE-header-defini.patch')
-rw-r--r--main/grub/0009-efi-Move-MS-DOS-stub-out-of-generic-PE-header-defini.patch69
1 files changed, 69 insertions, 0 deletions
diff --git a/main/grub/0009-efi-Move-MS-DOS-stub-out-of-generic-PE-header-defini.patch b/main/grub/0009-efi-Move-MS-DOS-stub-out-of-generic-PE-header-defini.patch
new file mode 100644
index 00000000000..7503da9f5db
--- /dev/null
+++ b/main/grub/0009-efi-Move-MS-DOS-stub-out-of-generic-PE-header-defini.patch
@@ -0,0 +1,69 @@
+2889fdad4a4af10dad6fc7ab90142a2a62a9aaa6 efi: Move MS-DOS stub out of generic PE header definition
+ grub-core/kern/efi/efi.c | 8 ++++++--
+ include/grub/efi/pe32.h | 16 ++++++++++++----
+ 2 files changed, 18 insertions(+), 6 deletions(-)
+
+diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c
+index 8cff7be02..800373dc1 100644
+--- a/grub-core/kern/efi/efi.c
++++ b/grub-core/kern/efi/efi.c
+@@ -294,7 +294,8 @@ grub_addr_t
+ grub_efi_modules_addr (void)
+ {
+ grub_efi_loaded_image_t *image;
+- struct grub_pe32_header *header;
++ struct grub_msdos_image_header *header;
++ struct grub_pe_image_header *pe_image_header;
+ struct grub_pe32_coff_header *coff_header;
+ struct grub_pe32_section_table *sections;
+ struct grub_pe32_section_table *section;
+@@ -306,7 +307,10 @@ grub_efi_modules_addr (void)
+ return 0;
+
+ header = image->image_base;
+- coff_header = &(header->coff_header);
++ pe_image_header
++ = (struct grub_pe_image_header *) ((char *) header
++ + header->pe_image_header_offset);
++ coff_header = &(pe_image_header->coff_header);
+ sections
+ = (struct grub_pe32_section_table *) ((char *) coff_header
+ + sizeof (*coff_header)
+diff --git a/include/grub/efi/pe32.h b/include/grub/efi/pe32.h
+index 0ed8781f0..98c4ff177 100644
+--- a/include/grub/efi/pe32.h
++++ b/include/grub/efi/pe32.h
+@@ -48,6 +48,17 @@
+
+ #define GRUB_PE32_MAGIC 0x5a4d
+
++struct grub_msdos_image_header
++{
++ /* This is always 'MZ'. (GRUB_PE32_MAGIC) */
++ grub_uint16_t msdos_magic;
++
++ grub_uint16_t reserved[29];
++
++ /* The file offset of the PE image header. */
++ grub_uint32_t pe_image_header_offset;
++};
++
+ /* According to the spec, the minimal alignment is 512 bytes...
+ But some examples (such as EFI drivers in the Intel
+ Sample Implementation) use 32 bytes (0x20) instead, and it seems
+@@ -254,11 +265,8 @@ struct grub_pe32_section_table
+
+ #define GRUB_PE32_SIGNATURE_SIZE 4
+
+-struct grub_pe32_header
++struct grub_pe_image_header
+ {
+- /* This should be filled in with GRUB_PE32_MSDOS_STUB. */
+- grub_uint8_t msdos_stub[GRUB_PE32_MSDOS_STUB_SIZE];
+-
+ /* This is always PE\0\0. */
+ char signature[GRUB_PE32_SIGNATURE_SIZE];
+
+--
+2.39.2
+