aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPA4WDH2021-08-25 12:02:32 +0200
committerPA4WDH2021-08-25 12:02:32 +0200
commit38be1b3221b1e85cac1af8a67c733752265425d7 (patch)
tree62805f905167039e00378ede54f5dd41203bc577
parentAdd patch to sys-boot/u-boot-2021.07 to make it work (diff)
downloadunmatched-patchwork-38be1b3221b1e85cac1af8a67c733752265425d7.tar.gz
unmatched-patchwork-38be1b3221b1e85cac1af8a67c733752265425d7.tar.bz2
unmatched-patchwork-38be1b3221b1e85cac1af8a67c733752265425d7.zip
Add sys-boot/grub-2.06-r1
-rw-r--r--sys-boot/grub/Manifest11
-rw-r--r--sys-boot/grub/files/grub-2.06-001-loader-drop-argv-in-grub_initrd_load.patch173
-rw-r--r--sys-boot/grub/files/grub-2.06-002-efi-add-definition-of-loadfile2-protocol.patch58
-rw-r--r--sys-boot/grub/files/grub-2.06-003-efi-implemented-loadfile2-initrd-loading.patch180
-rw-r--r--sys-boot/grub/files/grub-2.06-004-linux-ignore-fdt-unless-we-need-to-modify-it.patch77
-rw-r--r--sys-boot/grub/files/grub-2.06-005-loader-move-arm64-linux-loader.patch73
-rw-r--r--sys-boot/grub/files/grub-2.06-006-riscv-update-image-header.patch81
-rw-r--r--sys-boot/grub/files/grub-2.06-007-riscv-use-common-linux-loader.patch117
-rw-r--r--sys-boot/grub/files/grub-2.06-010-efi-device-tree-fixup-protocol.patch135
-rw-r--r--sys-boot/grub/files/grub-2.06-011-support-loading-device-trees.patch73
-rw-r--r--sys-boot/grub/files/grub-2.06-012-move-load-fdt.patch21
-rw-r--r--sys-boot/grub/grub-2.06-r1.ebuild315
12 files changed, 1314 insertions, 0 deletions
diff --git a/sys-boot/grub/Manifest b/sys-boot/grub/Manifest
index f61a2e5..31c1dee 100644
--- a/sys-boot/grub/Manifest
+++ b/sys-boot/grub/Manifest
@@ -1,5 +1,15 @@
AUX gfxpayload.patch 1118 BLAKE2B 4104fc696535b1c3feba5876bccc64f9b2e52319ee992c59e7f17b8310cc9addf7545630fff78c73ca3f4b0dcd44e1bf69f4df5264d6f58777f7e5aeae93cbcb SHA512 00324825c369902a0383b792cd21e161853eadccbdc5abe2420f2d443bf6a74f72be6c15243107b936acd38c3547387c3771dc2cb566003c4c754c9260b4aa00
AUX grub-2.02_beta2-KERNEL_GLOBS.patch 2121 BLAKE2B 398195f59537d40a4f61eadf5be974b8f9eb56a4eb07b798f0dc18e29588b3a9f8daa8d6e64980a835ec1960fab60b8c96d6552ef2920fe6604170abf7d5e7da SHA512 f85bc538ae647c46efbe07d7b87acf49daa7b07e9752af3aa3f77019f48ea24cd1b6a095a6f9c19d50128701753f453c531b9b068e11ee22a259f3fdf8ac205e
+AUX grub-2.06-001-loader-drop-argv-in-grub_initrd_load.patch 6675 BLAKE2B 98940b99fefe4980d5fb21248fb41a62c8755ee827b3adbc9fa73d946dbbb9a8aad801fba1fb0f25b2c58e3321933ef309a183c42a688bfa03b8afced974de1b SHA512 8912e90251cc47b35a2a0b91eba6e0f80b543d4f62c26d9ff1d7fd5c1d910eaa564d941088a628cb52e86acf1d90eaab0f8e696cc6d6dd2121750defb6e63fb4
+AUX grub-2.06-002-efi-add-definition-of-loadfile2-protocol.patch 2166 BLAKE2B 6efa48b8b7251395ebb8e18abc2e59db7c69a85b97d5e564c6deb71a0c1c220b29a760dfef2428d4f5904968535e533f74c8193b183f478ee4ea20908882c013 SHA512 52e33c0984a3cc148ca83f6fe3d0d288747e62ff1f462fb6ff5227d78dcc6f31525f03d4e8e6a5b36c7532609e0f302879f5c9614937bc3d9904e282f80866ba
+AUX grub-2.06-003-efi-implemented-loadfile2-initrd-loading.patch 6016 BLAKE2B ef30a96d5de6995bb6a2dc48548abb245548b83c3d27c5901e072b0600a44ce3a23fc7e83bb5d1f22588acc6565cc2a6a5ce441ceebada848b5e4d1d086f45c2 SHA512 45f96c552237e78b70594d436bebc946611d63c9c6d1aca5a5c60148b12cde34689f1ae502fd1ba197e960dab188cd9cde9e376f7777773dc72523981e935a06
+AUX grub-2.06-004-linux-ignore-fdt-unless-we-need-to-modify-it.patch 2506 BLAKE2B 632f82fc1c9d7e9f194d23e6ae1ade47bbfcc02a115637e3aca6e257e208782dd71bbdd196839e0f17888de78cbb27d71ed75b87a58fe0d87d08e402a0cca257 SHA512 65bbe8d5b60d10b5faaca424e1e966ea3de7fde5265e478b3281427351e52acc34a8c8902149e3d69b82dd7780fd3a231a44747a28cd2eed6156741eb15ec6a8
+AUX grub-2.06-005-loader-move-arm64-linux-loader.patch 2797 BLAKE2B bc83f82a465ac7dee69a36d93c56e07c3a37dee46d09b3317cfa425d5ec62b795e5b2cd2449e7fc439e71436edfcf5b441550f15b80f0bd11095c69cd0300909 SHA512 f3191baca59e9903aaf84dbe470f8b1ee371c0ac976c84840919cf06629f121b9b67ded950e9e70a74b9ca01e0d88728888877d29521ee066f8bcbfb1ac43234
+AUX grub-2.06-006-riscv-update-image-header.patch 3192 BLAKE2B 57004beca8a54bc070c8ce52e9acd5583d288b406909a679544c0ebe8c697ccfdf41e040a24585b04c2cfe234f7e48d6c0296beeaf399dabfed05aacf7cbdb52 SHA512 d0c4d09c1f06d14d2df0dfb44f4c0dc6f8bd57be08e1e25632bc80001f590a65511792e2b2a87c9528150174669a8c81969db24f2472be0351a833327d884a3b
+AUX grub-2.06-007-riscv-use-common-linux-loader.patch 3901 BLAKE2B 109808cf3fb7dba758805b04fcc7babcea5634a936a44351f068b620a59bfa8f228201d898c74a69d1885d6722df80af0573f1630a0a4d6f2aa16760aa5cf855 SHA512 2f181d30b4684af32438e9630982c1de0993cf81a1e17615fb0802d83331d43ee4928d4cf53f24c1b8349cc09127ee9966cc73b2d24391989478c5c06b1caddc
+AUX grub-2.06-010-efi-device-tree-fixup-protocol.patch 4260 BLAKE2B cc63a8c25dc649e6fb06b3f9b736d06a6cbe5bf715e7760443748fb289212c459fa2cc61752daaac8f626d845d570ec578d8a4deaba396083ca39b0406ae92a2 SHA512 9dbae1a8a7d7f71cf31124101c57a921392ea9b0de7cfd8e27366cfdc781a38eb1b55a6adbfb63abeedbe79bd27a6d0efb2bdcde3973d13ca962aded23b7af62
+AUX grub-2.06-011-support-loading-device-trees.patch 2416 BLAKE2B 73427de0c99cfdaa203127cc39e4192ec560541320d2f391594e6099f5f978ec53633d979e2041eae80603ff3dbbc3737ea88c207e9dddd46973e6bfb1d8c540 SHA512 1a9751934191c4ec05e70dfd6bc5698484dc9fb34d1bc1cdd1d18fd7db4baccd867741015680af9eb024c6b13a5ab830e8f16d3cd6c352782fe6f7c3f43450a4
+AUX grub-2.06-012-move-load-fdt.patch 547 BLAKE2B 65333fb25aae5572f5677a837b5b7a78f607b6edc4a6690ef7523bfa65d448f7db869920513e81a1de260524aa913d4282d3b1ef632e68a2747edbc79f0580ee SHA512 ab73499ec00952ba53dbb82add56d70e578dcc2c38880a91d85a9d4f7139cecfd54385668a7468aaf91b754d87fad2f28c168fb52dd4c09ae6800cd05358d2e7
AUX grub-2.06-add-boot-hartid-to-fdt.patch 995 BLAKE2B 86ab277819eeab08d552e1d5300f8f5e798823e56e66d8dd39ae442b3b4777a22d155dd85f9b38778a644c7f52b61f673b6c856c66492da412d2ee2587125484 SHA512 5d334050165dd648bd3547ede9cc62380f75a5d9625a4282972a4e71e34e14d72cf6acb363c513942375c84c79a48acd6331bbcbc56f4999a339e29391fbb5ae
AUX grub-2.06-linux-riscv.patch 12599 BLAKE2B bfbb85e8824586d1a13d142020d591e0e103c77c193ef7a82e1770b3ffcd23f6daec9729a9d1cb579d5dcaeb6be40f23682fdab8e2e5c7067b382362faee2c36 SHA512 5f964e98caff6c57fc4ac7d57bbd86c8cc1ab35ca25c58a1e8c7a2db232b7b1470b6fe8a6a372c62fc3bfe939ce64c75027ed4b3d3d4db141b73a709557275c1
AUX grub-2.06-magic-number.patch 1826 BLAKE2B 83dc3e86b2ae3d96d3459641fda67b47178688410cacdc54ee79ccbab129cabfd1aa087ff1afc6fcdb607c1e183a7b55d54f5c0d5cbca951178129c50b26bb35 SHA512 44e03d1cbef8ca7128c4a91647d1095453f5f9c9aa9329f20bb5af178a766c6ed22b4c2ea3e515bac7b0c977f8248401590a6e76561d86146729c9cc1d931700
@@ -8,5 +18,6 @@ AUX grub.default-3 2528 BLAKE2B c32de43644eca5fae8d8d727ff443600917a93e015f8a83d
DIST dejavu-sans-ttf-2.37.zip 417746 BLAKE2B c8904f3cd5a49370a7dc10e456684c88aeae998a99090bf4d0a5baa4f36cc8fb8f70586cf6d610a5ffeee97261d28c80f55bbe9dcfc3ed796d5c2d60e79adb58 SHA512 ede5899daa1984c5aa8cacb1c850eb53f189dddef3d9bb78bf9774d8976b7c0d6eb0bcf86237cd7d11f5b36cf5b5058d42cd94d3bd76f2bd0931c7ceb1271fae
DIST grub-2.06.tar.xz 6581924 BLAKE2B 2a40b9b03d7bb3b9e7b1309ab274d686f01b3c42e7035ebc6e5a0e59a59c3b7362ba518341664b314cb0dbc8222bb10ea05ce09f08ce9d58a293207cb909e417 SHA512 4f11c648f3078567e53fc0c74d5026fdc6da4be27d188975e79d9a4df817ade0fe5ad2ddd694238a07edc45adfa02943d83c57767dd51548102b375e529e8efe
DIST unifont-12.1.02.pcf.gz 1335424 BLAKE2B 97080312468e3f3c8aa6f49cef08f5622641e8c9c035f3ede1e09d8d98de4e78d3b23c8aba2e8070eb46cbebd2d55e8568e467d7f15f35aa8fc8db792b7e5f14 SHA512 b280b2db7cf5f480b0668c331130dede2c0cc87d5e02e44566b77787113d0f6604d0105522858288f2ac6b8e77df7a2d9878725013a6c778dc5bfb183156e2f0
+EBUILD grub-2.06-r1.ebuild 8088 BLAKE2B e097c58fd5a8df8e1859131f69c90209ad3c1268608f418ebf3e725f74978bf0e465d92afc0ac985c29d009e23507b467931d135d8d1c0ca3fe5439021263963 SHA512 520e926cf09b1cf4a82509ebfa204df623156bf68436da6a72c13677337bde0702f4b2ea851f7691f2ef3f4f5b5373ebfe55b0edd18c3361115b106a6ad1a650
EBUILD grub-2.06.ebuild 7548 BLAKE2B d8c7ba5110cd4b8483a80255e80f3d61c99d8ced45c862ac319c5b5196b3cc2f7d7a4b9eeae378d6c1da01863dec3a7e86ed092559db9c7f47ac46b6be515599 SHA512 aabf4dc758ed3a0fb07f57eede1130f9e48e92c20cfb1992e629c2b4bca0e8e446b28deb7c74f4230b74bbf6240a6e027955133126c9592158afed9ae17e8506
MISC metadata.xml 985 BLAKE2B 36f108b5d3441f8576609c77ab3547c60ac2c508b55472bd0ec0e3af8d0fa018d305d7267c0e2e84c8526affced9ed5ce51738b9fcf05b31ac36c1b4d5c2702a SHA512 bd28dd88d4eb76a32cfa757eb5bf7641d033f670280ab7230b72a66b1bd8fd65c777473b1d7f81257004a215fe5a858a79a6a912e0ceaecd586867e9a76f6b4e
diff --git a/sys-boot/grub/files/grub-2.06-001-loader-drop-argv-in-grub_initrd_load.patch b/sys-boot/grub/files/grub-2.06-001-loader-drop-argv-in-grub_initrd_load.patch
new file mode 100644
index 0000000..66d91dd
--- /dev/null
+++ b/sys-boot/grub/files/grub-2.06-001-loader-drop-argv-in-grub_initrd_load.patch
@@ -0,0 +1,173 @@
+
+In the case of an error grub_initrd_load() uses argv[] to print the
+filename that caused the error. It is also possible to obtain the
+filename from the file handles and there is no need to duplicate that
+information in argv[], so let's drop it.
+
+Signed-off-by: Nikita Ermakov <arei@altlinux.org>
+---
+ grub-core/loader/arm/linux.c | 2 +-
+ grub-core/loader/arm64/linux.c | 2 +-
+ grub-core/loader/i386/linux.c | 2 +-
+ grub-core/loader/i386/pc/linux.c | 2 +-
+ grub-core/loader/i386/xen.c | 3 +--
+ grub-core/loader/ia64/efi/linux.c | 2 +-
+ grub-core/loader/linux.c | 4 ++--
+ grub-core/loader/mips/linux.c | 2 +-
+ grub-core/loader/powerpc/ieee1275/linux.c | 2 +-
+ grub-core/loader/sparc64/ieee1275/linux.c | 2 +-
+ include/grub/linux.h | 2 +-
+ 11 files changed, 12 insertions(+), 13 deletions(-)
+
+diff --git a/grub-core/loader/arm/linux.c b/grub-core/loader/arm/linux.c
+index ed23dc71e..1f7ab7578 100644
+--- a/grub-core/loader/arm/linux.c
++++ b/grub-core/loader/arm/linux.c
+@@ -422,7 +422,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
+ grub_dprintf ("loader", "Loading initrd to 0x%08x\n",
+ (grub_addr_t) initrd_start);
+
+- if (grub_initrd_load (&initrd_ctx, argv, (void *) initrd_start))
++ if (grub_initrd_load (&initrd_ctx, (void *) initrd_start))
+ goto fail;
+
+ initrd_end = initrd_start + size;
+diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c
+index ef3e9f944..aed7a200b 100644
+--- a/grub-core/loader/arm64/linux.c
++++ b/grub-core/loader/arm64/linux.c
+@@ -266,7 +266,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
+ goto fail;
+ }
+
+- if (grub_initrd_load (&initrd_ctx, argv, initrd_mem))
++ if (grub_initrd_load (&initrd_ctx, initrd_mem))
+ goto fail;
+
+ initrd_start = (grub_addr_t) initrd_mem;
+diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c
+index 9f74a96b1..f30a1586a 100644
+--- a/grub-core/loader/i386/linux.c
++++ b/grub-core/loader/i386/linux.c
+@@ -1107,7 +1107,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
+ initrd_mem_target = get_physical_target_address (ch);
+ }
+
+- if (grub_initrd_load (&initrd_ctx, argv, initrd_mem))
++ if (grub_initrd_load (&initrd_ctx, initrd_mem))
+ goto fail;
+
+ grub_dprintf ("linux", "Initrd, addr=0x%x, size=0x%x\n",
+diff --git a/grub-core/loader/i386/pc/linux.c b/grub-core/loader/i386/pc/linux.c
+index 2a2995201..efeeeb206 100644
+--- a/grub-core/loader/i386/pc/linux.c
++++ b/grub-core/loader/i386/pc/linux.c
+@@ -462,7 +462,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
+ initrd_addr = get_physical_target_address (ch);
+ }
+
+- if (grub_initrd_load (&initrd_ctx, argv, initrd_chunk))
++ if (grub_initrd_load (&initrd_ctx, initrd_chunk))
+ goto fail;
+
+ lh->ramdisk_image = initrd_addr;
+diff --git a/grub-core/loader/i386/xen.c b/grub-core/loader/i386/xen.c
+index cd24874ca..3b856e842 100644
+--- a/grub-core/loader/i386/xen.c
++++ b/grub-core/loader/i386/xen.c
+@@ -809,8 +809,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
+ if (err)
+ goto fail;
+
+- if (grub_initrd_load (&initrd_ctx, argv,
+- get_virtual_current_address (ch)))
++ if (grub_initrd_load (&initrd_ctx, get_virtual_current_address (ch)))
+ goto fail;
+ }
+
+diff --git a/grub-core/loader/ia64/efi/linux.c b/grub-core/loader/ia64/efi/linux.c
+index 7987fd1ba..8873b7a55 100644
+--- a/grub-core/loader/ia64/efi/linux.c
++++ b/grub-core/loader/ia64/efi/linux.c
+@@ -563,7 +563,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
+ grub_dprintf ("linux", "[addr=0x%lx, size=0x%lx]\n",
+ (grub_uint64_t) initrd_mem, initrd_size);
+
+- if (grub_initrd_load (&initrd_ctx, argv, initrd_mem))
++ if (grub_initrd_load (&initrd_ctx, initrd_mem))
+ goto fail;
+ fail:
+ grub_initrd_close (&initrd_ctx);
+diff --git a/grub-core/loader/linux.c b/grub-core/loader/linux.c
+index 3fe390f17..d19df670e 100644
+--- a/grub-core/loader/linux.c
++++ b/grub-core/loader/linux.c
+@@ -271,7 +271,7 @@ grub_initrd_close (struct grub_linux_initrd_context *initrd_ctx)
+
+ grub_err_t
+ grub_initrd_load (struct grub_linux_initrd_context *initrd_ctx,
+- char *argv[], void *target)
++ void *target)
+ {
+ grub_uint8_t *ptr = target;
+ int i;
+@@ -317,7 +317,7 @@ grub_initrd_load (struct grub_linux_initrd_context *initrd_ctx,
+ {
+ if (!grub_errno)
+ grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"),
+- argv[i]);
++ initrd_ctx->components[i].file->name);
+ grub_initrd_close (initrd_ctx);
+ return grub_errno;
+ }
+diff --git a/grub-core/loader/mips/linux.c b/grub-core/loader/mips/linux.c
+index e4ed95921..94594721d 100644
+--- a/grub-core/loader/mips/linux.c
++++ b/grub-core/loader/mips/linux.c
+@@ -452,7 +452,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
+ initrd_dest = get_physical_target_address (ch) | 0x80000000;
+ }
+
+- if (grub_initrd_load (&initrd_ctx, argv, initrd_src))
++ if (grub_initrd_load (&initrd_ctx, initrd_src))
+ goto fail;
+
+ #ifdef GRUB_MACHINE_MIPS_QEMU_MIPS
+diff --git a/grub-core/loader/powerpc/ieee1275/linux.c b/grub-core/loader/powerpc/ieee1275/linux.c
+index 818b2a86d..a51e7a786 100644
+--- a/grub-core/loader/powerpc/ieee1275/linux.c
++++ b/grub-core/loader/powerpc/ieee1275/linux.c
+@@ -363,7 +363,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
+
+ grub_dprintf ("loader", "Loading initrd at 0x%x, size 0x%x\n", addr, size);
+
+- if (grub_initrd_load (&initrd_ctx, argv, (void *) addr))
++ if (grub_initrd_load (&initrd_ctx, (void *) addr))
+ goto fail;
+
+ initrd_addr = addr;
+diff --git a/grub-core/loader/sparc64/ieee1275/linux.c b/grub-core/loader/sparc64/ieee1275/linux.c
+index bb47ee0cc..ac2206f3c 100644
+--- a/grub-core/loader/sparc64/ieee1275/linux.c
++++ b/grub-core/loader/sparc64/ieee1275/linux.c
+@@ -413,7 +413,7 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
+ grub_dprintf ("loader", "Loading initrd at vaddr 0x%lx, paddr 0x%lx, size 0x%lx\n",
+ addr, paddr, size);
+
+- if (grub_initrd_load (&initrd_ctx, argv, (void *) addr))
++ if (grub_initrd_load (&initrd_ctx, (void *) addr))
+ goto fail;
+
+ initrd_addr = addr;
+diff --git a/include/grub/linux.h b/include/grub/linux.h
+index 594a3f307..a96ac2048 100644
+--- a/include/grub/linux.h
++++ b/include/grub/linux.h
+@@ -21,4 +21,4 @@ grub_initrd_close (struct grub_linux_initrd_context *initrd_ctx);
+
+ grub_err_t
+ grub_initrd_load (struct grub_linux_initrd_context *initrd_ctx,
+- char *argv[], void *target);
++ void *target);
+--
+2.29.3
diff --git a/sys-boot/grub/files/grub-2.06-002-efi-add-definition-of-loadfile2-protocol.patch b/sys-boot/grub/files/grub-2.06-002-efi-add-definition-of-loadfile2-protocol.patch
new file mode 100644
index 0000000..35777b5
--- /dev/null
+++ b/sys-boot/grub/files/grub-2.06-002-efi-add-definition-of-loadfile2-protocol.patch
@@ -0,0 +1,58 @@
+Incorporate the EFI_LOAD_FILE2_PROTOCOL GUID and C types from the
+UEFI spec.
+
+Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
+Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
+Signed-off-by: Nikita Ermakov <arei@altlinux.org>
+---
+ grub-core/commands/efi/lsefi.c | 1 +
+ include/grub/efi/api.h | 15 +++++++++++++++
+ 2 files changed, 16 insertions(+)
+
+diff --git a/grub-core/commands/efi/lsefi.c b/grub-core/commands/efi/lsefi.c
+index d1ce99af4..4085f5df2 100644
+--- a/grub-core/commands/efi/lsefi.c
++++ b/grub-core/commands/efi/lsefi.c
+@@ -55,6 +55,7 @@ struct known_protocol
+ { GRUB_EFI_ABSOLUTE_POINTER_PROTOCOL_GUID, "absolute pointer" },
+ { GRUB_EFI_DRIVER_BINDING_PROTOCOL_GUID, "EFI driver binding" },
+ { GRUB_EFI_LOAD_FILE_PROTOCOL_GUID, "load file" },
++ { GRUB_EFI_LOAD_FILE2_PROTOCOL_GUID, "load file2" },
+ { GRUB_EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID, "simple FS" },
+ { GRUB_EFI_TAPE_IO_PROTOCOL_GUID, "tape I/O" },
+ { GRUB_EFI_UNICODE_COLLATION_PROTOCOL_GUID, "unicode collation" },
+diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h
+index f1a52210c..3de0a7d12 100644
+--- a/include/grub/efi/api.h
++++ b/include/grub/efi/api.h
+@@ -149,6 +149,11 @@
+ { 0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B } \
+ }
+
++#define GRUB_EFI_LOAD_FILE2_PROTOCOL_GUID \
++ { 0x4006c0c1, 0xfcb3, 0x403e, \
++ { 0x99, 0x6d, 0x4a, 0x6c, 0x87, 0x24, 0xe0, 0x6d } \
++ }
++
+ #define GRUB_EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID \
+ { 0x0964e5b22, 0x6459, 0x11d2, \
+ { 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
+@@ -1729,6 +1734,16 @@ struct grub_efi_rng_protocol
+ };
+ typedef struct grub_efi_rng_protocol grub_efi_rng_protocol_t;
+
++struct grub_efi_load_file2
++{
++ grub_efi_status_t (*load_file)(struct grub_efi_load_file2 *this,
++ grub_efi_device_path_t *file_path,
++ grub_efi_boolean_t boot_policy,
++ grub_efi_uintn_t *buffer_size,
++ void *buffer);
++};
++typedef struct grub_efi_load_file2 grub_efi_load_file2_t;
++
+ #if (GRUB_TARGET_SIZEOF_VOID_P == 4) || defined (__ia64__) \
+ || defined (__aarch64__) || defined (__MINGW64__) || defined (__CYGWIN__) \
+ || defined(__riscv)
+--
+2.29.3
diff --git a/sys-boot/grub/files/grub-2.06-003-efi-implemented-loadfile2-initrd-loading.patch b/sys-boot/grub/files/grub-2.06-003-efi-implemented-loadfile2-initrd-loading.patch
new file mode 100644
index 0000000..65fdf2e
--- /dev/null
+++ b/sys-boot/grub/files/grub-2.06-003-efi-implemented-loadfile2-initrd-loading.patch
@@ -0,0 +1,180 @@
+Recent Linux kernels will invoke the LoadFile2 protocol installed on
+a well-known vendor media path to load the initrd if it is exposed by
+the firmware. Using this method is preferred for two reasons:
+- the Linux kernel is in charge of allocating the memory, and so it can
+ implement any placement policy it wants (given that these tend to
+ change between kernel versions),
+- it is no longer necessary to modify the device tree provided by the
+ firmware.
+
+So let's install this protocol when handling the 'initrd' command if
+such a recent kernel was detected (based on the PE/COFF image version),
+and defer loading the initrd contents until the point where the kernel
+invokes the LoadFile2 protocol.
+
+Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
+Signed-off-by: Nikita Ermakov <arei@altlinux.org>
+---
+ grub-core/loader/arm64/linux.c | 117 ++++++++++++++++++++++++++++++++-
+ 1 file changed, 116 insertions(+), 1 deletion(-)
+
+diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c
+index aed7a200b..6b03455d1 100644
+--- a/grub-core/loader/arm64/linux.c
++++ b/grub-core/loader/arm64/linux.c
+@@ -48,9 +48,18 @@ static grub_uint32_t cmdline_size;
+ static grub_addr_t initrd_start;
+ static grub_addr_t initrd_end;
+
++static struct grub_linux_initrd_context initrd_ctx = { 0, 0, 0 };
++static grub_efi_handle_t initrd_lf2_handle;
++static int initrd_use_loadfile2;
++static grub_efi_guid_t load_file2_guid = GRUB_EFI_LOAD_FILE2_PROTOCOL_GUID;
++static grub_efi_guid_t device_path_guid = GRUB_EFI_DEVICE_PATH_GUID;
++
+ grub_err_t
+ grub_arch_efi_linux_check_image (struct linux_arch_kernel_header * lh)
+ {
++ struct grub_pe32_coff_header *coff_header;
++ struct grub_pe32_optional_header *optional_header;
++
+ if (lh->magic != GRUB_LINUX_ARMXX_MAGIC_SIGNATURE)
+ return grub_error(GRUB_ERR_BAD_OS, "invalid magic number");
+
+@@ -61,6 +70,21 @@ grub_arch_efi_linux_check_image (struct linux_arch_kernel_header * lh)
+ grub_dprintf ("linux", "UEFI stub kernel:\n");
+ grub_dprintf ("linux", "PE/COFF header @ %08x\n", lh->hdr_offset);
+
++ coff_header = (struct grub_pe32_coff_header *)((unsigned long)lh + lh->hdr_offset);
++ optional_header = (struct grub_pe32_optional_header *)(coff_header + 1);
++
++ /*
++ * Linux kernels built for any architecture are guaranteed to support the
++ * LoadFile2 based initrd loading protocol if the image version is >= 1.
++ */
++ if (optional_header->major_image_version >= 1)
++ initrd_use_loadfile2 = 1;
++ else
++ initrd_use_loadfile2 = 0;
++
++ grub_dprintf ("linux", "LoadFile2 initrd loading %sabled\n",
++ initrd_use_loadfile2 ? "en" : "dis");
++
+ return GRUB_ERR_NONE;
+ }
+
+@@ -230,13 +254,86 @@ allocate_initrd_mem (int initrd_pages)
+ GRUB_EFI_LOADER_DATA);
+ }
+
++struct initrd_media_device_path {
++ grub_efi_vendor_media_device_path_t vendor;
++ grub_efi_device_path_t end;
++} GRUB_PACKED;
++
++#define LINUX_EFI_INITRD_MEDIA_GUID \
++ { 0x5568e427, 0x68fc, 0x4f3d, \
++ { 0xac, 0x74, 0xca, 0x55, 0x52, 0x31, 0xcc, 0x68 } \
++ }
++
++static struct initrd_media_device_path initrd_lf2_device_path = {
++ {
++ {
++ GRUB_EFI_MEDIA_DEVICE_PATH_TYPE,
++ GRUB_EFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE,
++ sizeof(grub_efi_vendor_media_device_path_t),
++ },
++ LINUX_EFI_INITRD_MEDIA_GUID
++ }, {
++ GRUB_EFI_END_DEVICE_PATH_TYPE,
++ GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE,
++ sizeof(grub_efi_device_path_t)
++ }
++};
++
++static grub_efi_status_t
++grub_efi_initrd_load_file2(grub_efi_load_file2_t *this,
++ grub_efi_device_path_t *device_path,
++ grub_efi_boolean_t boot_policy,
++ grub_efi_uintn_t *buffer_size,
++ void *buffer);
++
++static grub_efi_load_file2_t initrd_lf2 = {
++ grub_efi_initrd_load_file2
++};
++
++static grub_efi_status_t
++grub_efi_initrd_load_file2(grub_efi_load_file2_t *this,
++ grub_efi_device_path_t *device_path,
++ grub_efi_boolean_t boot_policy,
++ grub_efi_uintn_t *buffer_size,
++ void *buffer)
++{
++ grub_efi_status_t status = GRUB_EFI_SUCCESS;
++ grub_efi_uintn_t initrd_size;
++
++ if (!this || this != &initrd_lf2 || !buffer_size)
++ return GRUB_EFI_INVALID_PARAMETER;
++
++ if (device_path->type != GRUB_EFI_END_DEVICE_PATH_TYPE ||
++ device_path->subtype != GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE)
++ return GRUB_EFI_NOT_FOUND;
++
++ if (boot_policy)
++ return GRUB_EFI_UNSUPPORTED;
++
++ initrd_size = grub_get_initrd_size (&initrd_ctx);
++ if (!buffer || *buffer_size < initrd_size)
++ {
++ *buffer_size = initrd_size;
++ return GRUB_EFI_BUFFER_TOO_SMALL;
++ }
++
++ grub_dprintf ("linux", "Providing initrd via LOAD_FILE2_PROTOCOL\n");
++
++ if (grub_initrd_load (&initrd_ctx, buffer))
++ status = GRUB_EFI_LOAD_ERROR;
++
++ grub_initrd_close (&initrd_ctx);
++ return status;
++}
++
+ static grub_err_t
+ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
+ int argc, char *argv[])
+ {
+- struct grub_linux_initrd_context initrd_ctx = { 0, 0, 0 };
+ int initrd_size, initrd_pages;
+ void *initrd_mem = NULL;
++ grub_efi_boot_services_t *b;
++ grub_efi_status_t status;
+
+ if (argc == 0)
+ {
+@@ -254,6 +351,24 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
+ if (grub_initrd_init (argc, argv, &initrd_ctx))
+ goto fail;
+
++ if (initrd_use_loadfile2 && !initrd_lf2_handle)
++ {
++ b = grub_efi_system_table->boot_services;
++ status = b->install_multiple_protocol_interfaces (&initrd_lf2_handle,
++ &load_file2_guid,
++ &initrd_lf2,
++ &device_path_guid,
++ &initrd_lf2_device_path,
++ NULL);
++ if (status == GRUB_EFI_OUT_OF_RESOURCES)
++ {
++ grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("out of memory"));
++ return grub_errno;
++ }
++ grub_dprintf ("linux", "LoadFile2 initrd loading protocol installed\n");
++ return GRUB_ERR_NONE;
++ }
++
+ initrd_size = grub_get_initrd_size (&initrd_ctx);
+ grub_dprintf ("linux", "Loading initrd\n");
+
+--
+2.29.3
diff --git a/sys-boot/grub/files/grub-2.06-004-linux-ignore-fdt-unless-we-need-to-modify-it.patch b/sys-boot/grub/files/grub-2.06-004-linux-ignore-fdt-unless-we-need-to-modify-it.patch
new file mode 100644
index 0000000..0655fab
--- /dev/null
+++ b/sys-boot/grub/files/grub-2.06-004-linux-ignore-fdt-unless-we-need-to-modify-it.patch
@@ -0,0 +1,77 @@
+Now that we implemented supported for the LoadFile2 protocol for initrd
+loading, there is no longer a need to pass the initrd parameters via
+the device tree. This means there is no longer a reason to update the
+device tree in the first place, and so we can ignore it entirely.
+
+The only remaining reason to deal with the devicetree is if we are
+using the 'devicetree' command to load one from disk, so tweak the
+logic in grub_fdt_install() to take that into account.
+
+Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
+---
+ grub-core/loader/arm64/linux.c | 22 +++++++++++-----------
+ grub-core/loader/efi/fdt.c | 7 +++++--
+ 2 files changed, 16 insertions(+), 13 deletions(-)
+
+diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c
+index 6b03455d1..65f1275fb 100644
+--- a/grub-core/loader/arm64/linux.c
++++ b/grub-core/loader/arm64/linux.c
+@@ -95,21 +95,21 @@ finalize_params_linux (void)
+
+ void *fdt;
+
+- fdt = grub_fdt_load (GRUB_EFI_LINUX_FDT_EXTRA_SPACE);
++ /* Set initrd info */
++ if (initrd_start && initrd_end > initrd_start)
++ {
++ fdt = grub_fdt_load (GRUB_EFI_LINUX_FDT_EXTRA_SPACE);
+
+- if (!fdt)
+- goto failure;
++ if (!fdt)
++ goto failure;
+
+- node = grub_fdt_find_subnode (fdt, 0, "chosen");
+- if (node < 0)
+- node = grub_fdt_add_subnode (fdt, 0, "chosen");
++ node = grub_fdt_find_subnode (fdt, 0, "chosen");
++ if (node < 0)
++ node = grub_fdt_add_subnode (fdt, 0, "chosen");
+
+- if (node < 1)
+- goto failure;
++ if (node < 1)
++ goto failure;
+
+- /* Set initrd info */
+- if (initrd_start && initrd_end > initrd_start)
+- {
+ grub_dprintf ("linux", "Initrd @ %p-%p\n",
+ (void *) initrd_start, (void *) initrd_end);
+
+diff --git a/grub-core/loader/efi/fdt.c b/grub-core/loader/efi/fdt.c
+index c86f283d7..771d455c7 100644
+--- a/grub-core/loader/efi/fdt.c
++++ b/grub-core/loader/efi/fdt.c
+@@ -89,13 +89,16 @@ grub_fdt_install (void)
+ grub_efi_guid_t fdt_guid = GRUB_EFI_DEVICE_TREE_GUID;
+ grub_efi_status_t status;
+
++ if (!fdt && !loaded_fdt)
++ return GRUB_ERR_NONE;
++
+ b = grub_efi_system_table->boot_services;
+- status = b->install_configuration_table (&fdt_guid, fdt);
++ status = b->install_configuration_table (&fdt_guid, fdt ?: loaded_fdt);
+ if (status != GRUB_EFI_SUCCESS)
+ return grub_error (GRUB_ERR_IO, "failed to install FDT");
+
+ grub_dprintf ("fdt", "Installed/updated FDT configuration table @ %p\n",
+- fdt);
++ fdt ?: loaded_fdt);
+ return GRUB_ERR_NONE;
+ }
+
+--
+2.29.3
diff --git a/sys-boot/grub/files/grub-2.06-005-loader-move-arm64-linux-loader.patch b/sys-boot/grub/files/grub-2.06-005-loader-move-arm64-linux-loader.patch
new file mode 100644
index 0000000..4a98b44
--- /dev/null
+++ b/sys-boot/grub/files/grub-2.06-005-loader-move-arm64-linux-loader.patch
@@ -0,0 +1,73 @@
+ARM64 linux loader code is written in such a way that it can be reused
+across different architectures without much change. Move it to common
+code so that RISC-V doesn't have to define a separate loader.
+
+Signed-off-by: Atish Patra <atish.patra@wdc.com>
+---
+ grub-core/Makefile.core.def | 4 ++--
+ grub-core/loader/{arm64 => efi}/linux.c | 2 +-
+ include/grub/arm/linux.h | 2 +-
+ include/grub/arm64/linux.h | 2 +-
+ 4 files changed, 5 insertions(+), 5 deletions(-)
+ rename grub-core/loader/{arm64 => efi}/linux.c (99%)
+
+diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
+index 8022e1c0a..b36cf663a 100644
+--- a/grub-core/Makefile.core.def
++++ b/grub-core/Makefile.core.def
+@@ -1806,9 +1806,9 @@ module = {
+ sparc64_ieee1275 = loader/sparc64/ieee1275/linux.c;
+ ia64_efi = loader/ia64/efi/linux.c;
+ arm_coreboot = loader/arm/linux.c;
+- arm_efi = loader/arm64/linux.c;
++ arm_efi = loader/efi/linux.c;
+ arm_uboot = loader/arm/linux.c;
+- arm64 = loader/arm64/linux.c;
++ arm64 = loader/efi/linux.c;
+ riscv32 = loader/riscv/linux.c;
+ riscv64 = loader/riscv/linux.c;
+ common = loader/linux.c;
+diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/efi/linux.c
+similarity index 99%
+rename from grub-core/loader/arm64/linux.c
+rename to grub-core/loader/efi/linux.c
+index 65f1275fb..60f0fa264 100644
+--- a/grub-core/loader/arm64/linux.c
++++ b/grub-core/loader/efi/linux.c
+@@ -60,7 +60,7 @@ grub_arch_efi_linux_check_image (struct linux_arch_kernel_header * lh)
+ struct grub_pe32_coff_header *coff_header;
+ struct grub_pe32_optional_header *optional_header;
+
+- if (lh->magic != GRUB_LINUX_ARMXX_MAGIC_SIGNATURE)
++ if (lh->magic != GRUB_LINUX_ARCH_MAGIC_SIGNATURE)
+ return grub_error(GRUB_ERR_BAD_OS, "invalid magic number");
+
+ if ((lh->code0 & 0xffff) != GRUB_PE32_MAGIC)
+diff --git a/include/grub/arm/linux.h b/include/grub/arm/linux.h
+index bcd5a7eb1..8c13978d2 100644
+--- a/include/grub/arm/linux.h
++++ b/include/grub/arm/linux.h
+@@ -35,7 +35,7 @@ struct linux_arm_kernel_header {
+ };
+
+ #if defined(__arm__)
+-# define GRUB_LINUX_ARMXX_MAGIC_SIGNATURE GRUB_LINUX_ARM_MAGIC_SIGNATURE
++# define GRUB_LINUX_ARCH_MAGIC_SIGNATURE GRUB_LINUX_ARM_MAGIC_SIGNATURE
+ # define linux_arch_kernel_header linux_arm_kernel_header
+ #endif
+
+diff --git a/include/grub/arm64/linux.h b/include/grub/arm64/linux.h
+index 7e22b4ab6..effd870ef 100644
+--- a/include/grub/arm64/linux.h
++++ b/include/grub/arm64/linux.h
+@@ -39,7 +39,7 @@ struct linux_arm64_kernel_header
+ };
+
+ #if defined(__aarch64__)
+-# define GRUB_LINUX_ARMXX_MAGIC_SIGNATURE GRUB_LINUX_ARM64_MAGIC_SIGNATURE
++# define GRUB_LINUX_ARCH_MAGIC_SIGNATURE GRUB_LINUX_ARM64_MAGIC_SIGNATURE
+ # define linux_arch_kernel_header linux_arm64_kernel_header
+ #endif
+
+--
+2.29.3
diff --git a/sys-boot/grub/files/grub-2.06-006-riscv-update-image-header.patch b/sys-boot/grub/files/grub-2.06-006-riscv-update-image-header.patch
new file mode 100644
index 0000000..5ebd4f2
--- /dev/null
+++ b/sys-boot/grub/files/grub-2.06-006-riscv-update-image-header.patch
@@ -0,0 +1,81 @@
+Update the RISC-V Linux kernel image headers as per the current header.
+
+Reference:
+<Linux kernel source>/Documentation/riscv/boot-image-header.rst
+
+Signed-off-by: Atish Patra <atish.patra@wdc.com>
+---
+ include/grub/riscv32/linux.h | 15 ++++++++-------
+ include/grub/riscv64/linux.h | 15 ++++++++-------
+ 2 files changed, 16 insertions(+), 14 deletions(-)
+
+diff --git a/include/grub/riscv32/linux.h b/include/grub/riscv32/linux.h
+index 512b777c8..de0dbdcd1 100644
+--- a/include/grub/riscv32/linux.h
++++ b/include/grub/riscv32/linux.h
+@@ -19,20 +19,21 @@
+ #ifndef GRUB_RISCV32_LINUX_HEADER
+ #define GRUB_RISCV32_LINUX_HEADER 1
+
+-#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x52534356 /* 'RSCV' */
++#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x05435352 /* 'RSC\0x5' */
+
+-/* From linux/Documentation/riscv/booting.txt */
++/* From linux/Documentation/riscv/boot-image-header.rst */
+ struct linux_riscv_kernel_header
+ {
+ grub_uint32_t code0; /* Executable code */
+ grub_uint32_t code1; /* Executable code */
+- grub_uint64_t text_offset; /* Image load offset */
+- grub_uint64_t res0; /* reserved */
+- grub_uint64_t res1; /* reserved */
++ grub_uint64_t text_offset; /* Image load offset, little endian */
++ grub_uint64_t image_size; /* Effective Image size, little endian */
++ grub_uint64_t flags; /* kernel flags, little endian */
++ grub_uint32_t version; /* Version of this header */
++ grub_uint32_t res1; /* reserved */
+ grub_uint64_t res2; /* reserved */
+ grub_uint64_t res3; /* reserved */
+- grub_uint64_t res4; /* reserved */
+- grub_uint32_t magic; /* Magic number, little endian, "RSCV" */
++ grub_uint32_t magic; /* Magic number, little endian, "RSC\x05" */
+ grub_uint32_t hdr_offset; /* Offset of PE/COFF header */
+ };
+
+diff --git a/include/grub/riscv64/linux.h b/include/grub/riscv64/linux.h
+index 3630c30fb..7c28bc922 100644
+--- a/include/grub/riscv64/linux.h
++++ b/include/grub/riscv64/linux.h
+@@ -19,22 +19,23 @@
+ #ifndef GRUB_RISCV64_LINUX_HEADER
+ #define GRUB_RISCV64_LINUX_HEADER 1
+
+-#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x52534356 /* 'RSCV' */
++#define GRUB_LINUX_RISCV_MAGIC_SIGNATURE 0x05435352 /* 'RSC\0x5' */
+
+ #define GRUB_EFI_PE_MAGIC 0x5A4D
+
+-/* From linux/Documentation/riscv/booting.txt */
++/* From linux/Documentation/riscv/boot-image-header.rst */
+ struct linux_riscv_kernel_header
+ {
+ grub_uint32_t code0; /* Executable code */
+ grub_uint32_t code1; /* Executable code */
+- grub_uint64_t text_offset; /* Image load offset */
+- grub_uint64_t res0; /* reserved */
+- grub_uint64_t res1; /* reserved */
++ grub_uint64_t text_offset; /* Image load offset, little endian */
++ grub_uint64_t image_size; /* Effective Image size, little endian */
++ grub_uint64_t flags; /* kernel flags, little endian */
++ grub_uint32_t version; /* Version of this header */
++ grub_uint32_t res1; /* reserved */
+ grub_uint64_t res2; /* reserved */
+ grub_uint64_t res3; /* reserved */
+- grub_uint64_t res4; /* reserved */
+- grub_uint32_t magic; /* Magic number, little endian, "RSCV" */
++ grub_uint32_t magic; /* Magic number, little endian, "RSC\x05" */
+ grub_uint32_t hdr_offset; /* Offset of PE/COFF header */
+ };
+
+--
+2.29.3
diff --git a/sys-boot/grub/files/grub-2.06-007-riscv-use-common-linux-loader.patch b/sys-boot/grub/files/grub-2.06-007-riscv-use-common-linux-loader.patch
new file mode 100644
index 0000000..525d3a9
--- /dev/null
+++ b/sys-boot/grub/files/grub-2.06-007-riscv-use-common-linux-loader.patch
@@ -0,0 +1,117 @@
+RISC-V doesn't have to do anything very different from other architectures
+to loader EFI stub linux kernel. As a result, just use the common linux
+loader instead of defining a RISC-V specific linux loader.
+
+Signed-off-by: Atish Patra <atish.patra@wdc.com>
+---
+ grub-core/Makefile.core.def | 4 +--
+ grub-core/loader/riscv/linux.c | 59 ----------------------------------
+ include/grub/riscv32/linux.h | 1 +
+ include/grub/riscv64/linux.h | 1 +
+ 4 files changed, 4 insertions(+), 61 deletions(-)
+ delete mode 100644 grub-core/loader/riscv/linux.c
+
+diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
+index b36cf663a..0536575bc 100644
+--- a/grub-core/Makefile.core.def
++++ b/grub-core/Makefile.core.def
+@@ -1809,8 +1809,8 @@ module = {
+ arm_efi = loader/efi/linux.c;
+ arm_uboot = loader/arm/linux.c;
+ arm64 = loader/efi/linux.c;
+- riscv32 = loader/riscv/linux.c;
+- riscv64 = loader/riscv/linux.c;
++ riscv32 = loader/efi/linux.c;
++ riscv64 = loader/efi/linux.c;
+ common = loader/linux.c;
+ common = lib/cmdline.c;
+ enable = noemu;
+diff --git a/grub-core/loader/riscv/linux.c b/grub-core/loader/riscv/linux.c
+deleted file mode 100644
+index d17c488e1..000000000
+--- a/grub-core/loader/riscv/linux.c
++++ /dev/null
+@@ -1,59 +0,0 @@
+-/*
+- * GRUB -- GRand Unified Bootloader
+- * Copyright (C) 2018 Free Software Foundation, Inc.
+- *
+- * GRUB is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, either version 3 of the License, or
+- * (at your option) any later version.
+- *
+- * GRUB is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with GRUB. If not, see <http://www.gnu.org/