diff options
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.patch | 69 |
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 + |