diff --git a/0372-Have-another-stab-at-fixing-fdt-build-issues.patch b/0372-Have-another-stab-at-fixing-fdt-build-issues.patch new file mode 100644 index 0000000..1ae0c3f --- /dev/null +++ b/0372-Have-another-stab-at-fixing-fdt-build-issues.patch @@ -0,0 +1,293 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Tue, 17 Jul 2018 13:32:36 -0400 +Subject: [PATCH] Have another stab at fixing fdt build issues. + +This is an egregious hack until I can figure out how kinking this is supposed +to work. + +Signed-off-by: Peter Jones +--- + grub-core/Makefile.core.def | 13 ------------- + grub-core/bus/fdt.c | 6 ++++++ + grub-core/lib/fdt.c | 29 ++++++++++++++++++++++++----- + grub-core/loader/arm/linux.c | 2 ++ + grub-core/loader/arm64/linux.c | 4 ++++ + grub-core/loader/arm64/xen_boot.c | 3 +++ + grub-core/loader/efi/fdt.c | 5 +++++ + include/grub/fdt.h | 16 ---------------- + 8 files changed, 44 insertions(+), 34 deletions(-) + +diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def +index f96b1933eea..3fc16fa9df1 100644 +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -166,7 +166,6 @@ kernel = { + arm_coreboot = kern/arm/coreboot/init.c; + arm_coreboot = kern/arm/coreboot/timer.c; + arm_coreboot = kern/arm/coreboot/coreboot.S; +- arm_coreboot = lib/fdt.c; + arm_coreboot = bus/fdt.c; + arm_coreboot = term/ps2.c; + arm_coreboot = term/arm/pl050.c; +@@ -1694,17 +1693,11 @@ module = { + enable = i386_pc; + }; + +-/* + module = { + name = xen_boot; + arm64 = loader/arm64/xen_boot.c; +- +- fdt = lib/fdt.c; +- fdt = loader/efi/fdt.c; +- + enable = arm64; + }; +-*/ + + module = { + name = linux; +@@ -1721,23 +1714,17 @@ module = { + arm64 = loader/arm64/linux.c; + emu = loader/emu/linux.c; + +- fdt = lib/fdt.c; +- fdt = loader/efi/fdt.c; +- + common = loader/linux.c; + common = lib/cmdline.c; + + efi = loader/efi/linux.c; + }; + +-/* + module = { + name = fdt; + arm64 = loader/efi/fdt.c; +- common = lib/fdt.c; + enable = fdt; + }; +-*/ + + module = { + name = xnu; +diff --git a/grub-core/bus/fdt.c b/grub-core/bus/fdt.c +index 135da497ba6..4d1914d2c28 100644 +--- a/grub-core/bus/fdt.c ++++ b/grub-core/bus/fdt.c +@@ -19,6 +19,12 @@ + #include + #include + #include ++#include ++#include ++#include ++ ++ ++#include "../lib/fdt.c" + + static const void *dtb; + static grub_size_t root_address_cells, root_size_cells; +diff --git a/grub-core/lib/fdt.c b/grub-core/lib/fdt.c +index 0d371c5633e..16128fd6f32 100644 +--- a/grub-core/lib/fdt.c ++++ b/grub-core/lib/fdt.c +@@ -16,12 +16,22 @@ + * along with GRUB. If not, see . + */ + +-#include +-#include +-#include +-#include ++static int grub_fdt_create_empty_tree (void *fdt, unsigned int size); ++static int grub_fdt_check_header (const void *fdt, unsigned int size); ++static int grub_fdt_check_header_nosize (const void *fdt); ++static int grub_fdt_find_subnode (const void *fdt, unsigned int parentoffset, ++ const char *name); ++static int grub_fdt_first_node (const void *fdt, unsigned int parentoffset); ++static int grub_fdt_next_node (const void *fdt, unsigned int currentoffset); ++static int grub_fdt_add_subnode (void *fdt, unsigned int parentoffset, ++ const char *name); ++static const char * ++grub_fdt_get_nodename (const void *fdt, unsigned int nodeoffset); ++static const void *grub_fdt_get_prop (const void *fdt, unsigned int nodeoffset, const char *name, ++ grub_uint32_t *len); + +-GRUB_MOD_LICENSE ("GPLv3+"); ++static int grub_fdt_set_prop (void *fdt, unsigned int nodeoffset, const char *name, ++ const void *val, grub_uint32_t len); + + #define FDT_SUPPORTED_VERSION 17 + +@@ -263,6 +273,7 @@ static grub_uint32_t *find_prop (const void *fdt, unsigned int nodeoffset, + the size allocated for the FDT; if this function is called before the other + functions in this file and returns success, the other functions are + guaranteed not to access memory locations outside the allocated memory. */ ++static inline __attribute__((__unused__)) + int grub_fdt_check_header_nosize (const void *fdt) + { + if (((grub_addr_t) fdt & 0x3) || (grub_fdt_get_magic (fdt) != FDT_MAGIC) +@@ -281,6 +292,7 @@ int grub_fdt_check_header_nosize (const void *fdt) + return 0; + } + ++static inline __attribute__((__unused__)) + int grub_fdt_check_header (const void *fdt, unsigned int size) + { + if (size < sizeof (grub_fdt_header_t) +@@ -327,6 +339,7 @@ advance_token (const void *fdt, const grub_uint32_t *token, const grub_uint32_t + return 0; + } + ++static inline __attribute__((__unused__)) + int grub_fdt_next_node (const void *fdt, unsigned int currentoffset) + { + const grub_uint32_t *token = (const grub_uint32_t *) fdt + (currentoffset + grub_fdt_get_off_dt_struct (fdt)) / 4; +@@ -337,6 +350,7 @@ int grub_fdt_next_node (const void *fdt, unsigned int currentoffset) + - grub_fdt_get_off_dt_struct (fdt)); + } + ++static inline __attribute__((__unused__)) + int grub_fdt_first_node (const void *fdt, unsigned int parentoffset) + { + const grub_uint32_t *token, *end; +@@ -358,6 +372,7 @@ int grub_fdt_first_node (const void *fdt, unsigned int parentoffset) + } + + /* Find a direct sub-node of a given parent node. */ ++static inline __attribute__((__unused__)) + int grub_fdt_find_subnode (const void *fdt, unsigned int parentoffset, + const char *name) + { +@@ -385,6 +400,7 @@ int grub_fdt_find_subnode (const void *fdt, unsigned int parentoffset, + } + } + ++static inline __attribute__((__unused__)) + const char * + grub_fdt_get_nodename (const void *fdt, unsigned int nodeoffset) + { +@@ -407,6 +423,7 @@ int grub_fdt_add_subnode (void *fdt, unsigned int parentoffset, + return add_subnode (fdt, parentoffset, name); + } + ++static inline __attribute__((__unused__)) + const void * + grub_fdt_get_prop (const void *fdt, unsigned int nodeoffset, const char *name, + grub_uint32_t *len) +@@ -425,6 +442,7 @@ grub_fdt_get_prop (const void *fdt, unsigned int nodeoffset, const char *name, + return prop + 3; + } + ++static inline __attribute__((__unused__)) + int grub_fdt_set_prop (void *fdt, unsigned int nodeoffset, const char *name, + const void *val, grub_uint32_t len) + { +@@ -501,6 +519,7 @@ int grub_fdt_set_prop (void *fdt, unsigned int nodeoffset, const char *name, + return 0; + } + ++static inline __attribute__((__unused__)) + int + grub_fdt_create_empty_tree (void *fdt, unsigned int size) + { +diff --git a/grub-core/loader/arm/linux.c b/grub-core/loader/arm/linux.c +index 9f43e41bb55..48016219e49 100644 +--- a/grub-core/loader/arm/linux.c ++++ b/grub-core/loader/arm/linux.c +@@ -29,6 +29,8 @@ + #include + #include + ++#include "../../lib/fdt.c" ++ + GRUB_MOD_LICENSE ("GPLv3+"); + + static grub_dl_t my_mod; +diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c +index 84670a053b2..5438e8187d7 100644 +--- a/grub-core/loader/arm64/linux.c ++++ b/grub-core/loader/arm64/linux.c +@@ -24,6 +24,8 @@ + #include + #include + #include ++#include ++#include + #include + #include + #include +@@ -34,6 +36,8 @@ + #include + #include + ++#include "../../lib/fdt.c" ++ + GRUB_MOD_LICENSE ("GPLv3+"); + + static grub_dl_t my_mod; +diff --git a/grub-core/loader/arm64/xen_boot.c b/grub-core/loader/arm64/xen_boot.c +index 258264c79e8..3c232c18c70 100644 +--- a/grub-core/loader/arm64/xen_boot.c ++++ b/grub-core/loader/arm64/xen_boot.c +@@ -34,6 +34,9 @@ + #include /* required by struct xen_hypervisor_header */ + #include + #include ++#include ++ ++#include "../../lib/fdt.c" + + GRUB_MOD_LICENSE ("GPLv3+"); + +diff --git a/grub-core/loader/efi/fdt.c b/grub-core/loader/efi/fdt.c +index 55c09a19939..44555fd42f0 100644 +--- a/grub-core/loader/efi/fdt.c ++++ b/grub-core/loader/efi/fdt.c +@@ -20,12 +20,17 @@ + #include + #include + #include ++#include + #include + #include + #include + #include + #include + ++#include "../../lib/fdt.c" ++ ++GRUB_MOD_LICENSE ("GPLv3+"); ++ + static void *loaded_fdt; + static void *fdt; + +diff --git a/include/grub/fdt.h b/include/grub/fdt.h +index 158b1bc4b3a..6b39cfe4861 100644 +--- a/include/grub/fdt.h ++++ b/include/grub/fdt.h +@@ -101,22 +101,6 @@ struct grub_fdt_empty_tree { + #define grub_fdt_set_size_dt_struct(fdt, value) \ + grub_fdt_set_header(fdt, size_dt_struct, value) + +-int EXPORT_FUNC(grub_fdt_create_empty_tree) (void *fdt, unsigned int size); +-int EXPORT_FUNC(grub_fdt_check_header) (const void *fdt, unsigned int size); +-int EXPORT_FUNC(grub_fdt_check_header_nosize) (const void *fdt); +-int EXPORT_FUNC(grub_fdt_find_subnode) (const void *fdt, unsigned int parentoffset, +- const char *name); +-int EXPORT_FUNC(grub_fdt_first_node) (const void *fdt, unsigned int parentoffset); +-int EXPORT_FUNC(grub_fdt_next_node) (const void *fdt, unsigned int currentoffset); +-int EXPORT_FUNC(grub_fdt_add_subnode) (void *fdt, unsigned int parentoffset, +- const char *name); +-const char * +-EXPORT_FUNC(grub_fdt_get_nodename) (const void *fdt, unsigned int nodeoffset); +-const void *EXPORT_FUNC(grub_fdt_get_prop) (const void *fdt, unsigned int nodeoffset, const char *name, +- grub_uint32_t *len); +- +-int EXPORT_FUNC(grub_fdt_set_prop) (void *fdt, unsigned int nodeoffset, const char *name, +- const void *val, grub_uint32_t len); + #define grub_fdt_set_prop32(fdt, nodeoffset, name, val) \ + ({ \ + grub_uint32_t _val = grub_cpu_to_be32(val); \ diff --git a/grub.patches b/grub.patches index d79b492..d056a99 100644 --- a/grub.patches +++ b/grub.patches @@ -369,3 +369,4 @@ Patch0368: 0368-blscfg-fix-compilation-on-EFI-and-EMU.patch Patch0369: 0369-Add-loadenv-to-blscfg-and-loadenv-source-file-list.patch Patch0370: 0370-blscfg-Get-rid-of-the-linuxefi-linux16-linux-distinc.patch Patch0371: 0371-grub-switch-to-blscfg-Only-fix-boot-prefix-for-non-g.patch +Patch0372: 0372-Have-another-stab-at-fixing-fdt-build-issues.patch diff --git a/grub2.spec b/grub2.spec index 4f055bc..8326305 100644 --- a/grub2.spec +++ b/grub2.spec @@ -7,7 +7,7 @@ Name: grub2 Epoch: 1 Version: 2.02 -Release: 45%{?dist} +Release: 46%{?dist} Summary: Bootloader with support for Linux, Multiboot and more Group: System Environment/Base License: GPLv3+ @@ -479,6 +479,10 @@ fi %endif %changelog +* Tue Jul 17 2018 Peter Jones - 2.02-46 +- Fix some minor BLS issues +- Rework the FDT module linking to make aarch64 build and boot right + * Mon Jul 16 2018 pjones - 2.02-45 - Rework SB patches and 10_linux.in changes even harder. Resolves: rhbz#1601578