From 78a3d7dfd932b40519fc24e0ee84d9f2db945d14 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Mar 13 2014 18:52:25 +0000 Subject: Merge in RHEL 7 changes and ARM works in progress. Signed-off-by: Peter Jones --- diff --git a/0001-Migrate-PPC-from-Yaboot-to-Grub2.patch b/0001-Migrate-PPC-from-Yaboot-to-Grub2.patch deleted file mode 100644 index f01aa06..0000000 --- a/0001-Migrate-PPC-from-Yaboot-to-Grub2.patch +++ /dev/null @@ -1,154 +0,0 @@ -From be4a014a8024153e201eb1f79069ec1584001305 Mon Sep 17 00:00:00 2001 -From: Mark Hamzy -Date: Wed, 28 Mar 2012 14:46:41 -0500 -Subject: [PATCH 01/37] Migrate PPC from Yaboot to Grub2 - -Add configuration support for serial terminal consoles. This will set the -maximum screen size so that text is not overwritten. ---- - Makefile.util.def | 7 +++ - util/grub.d/20_ppc_terminfo.in | 114 +++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 121 insertions(+) - create mode 100644 util/grub.d/20_ppc_terminfo.in - -diff --git a/Makefile.util.def b/Makefile.util.def -index 985e76c..b88ce42 100644 ---- a/Makefile.util.def -+++ b/Makefile.util.def -@@ -485,6 +485,13 @@ script = { - }; - - script = { -+ name = '20_ppc_terminfo'; -+ common = util/grub.d/20_ppc_terminfo.in; -+ installdir = grubconf; -+ condition = COND_HOST_LINUX; -+}; -+ -+script = { - name = '30_os-prober'; - common = util/grub.d/30_os-prober.in; - installdir = grubconf; -diff --git a/util/grub.d/20_ppc_terminfo.in b/util/grub.d/20_ppc_terminfo.in -new file mode 100644 -index 0000000..10d6658 ---- /dev/null -+++ b/util/grub.d/20_ppc_terminfo.in -@@ -0,0 +1,114 @@ -+#! /bin/sh -+set -e -+ -+# grub-mkconfig helper script. -+# Copyright (C) 2006,2007,2008,2009,2010 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 . -+ -+prefix=@prefix@ -+exec_prefix=@exec_prefix@ -+bindir=@bindir@ -+libdir=@libdir@ -+. "@datadir@/@PACKAGE@/grub-mkconfig_lib" -+ -+export TEXTDOMAIN=@PACKAGE@ -+export TEXTDOMAINDIR=@localedir@ -+ -+X=80 -+Y=24 -+TERMINAL=ofconsole -+ -+argument () { -+ opt=$1 -+ shift -+ -+ if test $# -eq 0; then -+ echo "$0: option requires an argument -- '$opt'" 1>&2 -+ exit 1 -+ fi -+ echo $1 -+} -+ -+check_terminfo () { -+ -+ while test $# -gt 0 -+ do -+ option=$1 -+ shift -+ -+ case "$option" in -+ terminfo | TERMINFO) -+ ;; -+ -+ -g) -+ NEWXY=`argument $option "$@"` -+ NEWX=`echo $NEWXY | cut -d x -f 1` -+ NEWY=`echo $NEWXY | cut -d x -f 2` -+ -+ if [ ${NEWX} -ge 80 ] ; then -+ X=${NEWX} -+ else -+ echo "Warning: ${NEWX} is less than the minimum size of 80" -+ fi -+ -+ if [ ${NEWY} -ge 24 ] ; then -+ Y=${NEWY} -+ else -+ echo "Warning: ${NEWY} is less than the minimum size of 24" -+ fi -+ -+ shift -+ ;; -+ -+ *) -+# # accept console or ofconsole -+# if [ "$option" != "console" -a "$option" != "ofconsole" ] ; then -+# echo "Error: GRUB_TERMINFO unknown console: $option" -+# exit 1 -+# fi -+# # perfer console -+# TERMINAL=console -+ # accept ofconsole -+ if [ "$option" != "ofconsole" ] ; then -+ echo "Error: GRUB_TERMINFO unknown console: $option" -+ exit 1 -+ fi -+ # perfer console -+ TERMINAL=ofconsole -+ ;; -+ esac -+ -+ done -+ -+} -+ -+if ! uname -m | grep -q ppc ; then -+ exit 0 -+fi -+ -+if [ "x${GRUB_TERMINFO}" != "x" ] ; then -+ F1=`echo ${GRUB_TERMINFO} | cut -d " " -f 1` -+ -+ if [ "${F1}" != "terminfo" ] ; then -+ echo "Error: GRUB_TERMINFO is set to \"${GRUB_TERMINFO}\" The first word should be terminfo." -+ exit 1 -+ fi -+ -+ check_terminfo ${GRUB_TERMINFO} -+fi -+ -+cat << EOF -+ terminfo -g ${X}x${Y} ${TERMINAL} -+EOF --- -1.8.4.2 - diff --git a/0001-fix-EFI-detection-on-Windows.patch b/0001-fix-EFI-detection-on-Windows.patch new file mode 100644 index 0000000..4d9593f --- /dev/null +++ b/0001-fix-EFI-detection-on-Windows.patch @@ -0,0 +1,43 @@ +From a6e7719bbe05993613a8de69dba14fa092144925 Mon Sep 17 00:00:00 2001 +From: Andrey Borzenkov +Date: Wed, 25 Dec 2013 22:36:28 +0400 +Subject: [PATCH 001/112] fix EFI detection on Windows + +We are on legacy BIOS if GetFirmwareEnvironmentVariable fails (returns +zero) *and* extended error information is ERROR_INVALID_FUNCTION. + +Cf. http://msdn.microsoft.com/en-us/library/windows/desktop/ms724325%28v=vs.85%29.aspx +--- + ChangeLog | 5 +++++ + grub-core/osdep/windows/platform.c | 2 +- + 2 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index 41bcebf..21ec1c7 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,8 @@ ++2013-12-25 Andrey Borzenkov ++ ++ * grub-core/osdep/windows/platform.c (get_platform): Fix EFI ++ detection. ++ + 2013-12-24 Vladimir Serbinenko + + * configure.ac: Set version to 2.02~beta2. +diff --git a/grub-core/osdep/windows/platform.c b/grub-core/osdep/windows/platform.c +index f2b9d71..d217efe 100644 +--- a/grub-core/osdep/windows/platform.c ++++ b/grub-core/osdep/windows/platform.c +@@ -100,7 +100,7 @@ get_platform (void) + + if (!func_GetFirmwareEnvironmentVariableW (L"BootOrder", GRUB_EFI_GLOBAL_VARIABLE_GUID_WINDOWS_STR, + buffer, sizeof (buffer)) +- && GetLastError () != ERROR_INVALID_FUNCTION) ++ && GetLastError () == ERROR_INVALID_FUNCTION) + { + platform = PLAT_BIOS; + return; +-- +1.8.5.3 + diff --git a/0002-Add-fw_path-variable-revised.patch b/0002-Add-fw_path-variable-revised.patch deleted file mode 100644 index 83c6a3e..0000000 --- a/0002-Add-fw_path-variable-revised.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 6759845abe79871a4241041915b56f617679e0b5 Mon Sep 17 00:00:00 2001 -From: Paulo Flabiano Smorigo -Date: Wed, 19 Sep 2012 21:22:55 -0300 -Subject: [PATCH 02/37] Add fw_path variable (revised) - -This patch makes grub look for its config file on efi where the app was -found. It was originally written by Matthew Garrett, and adapted to fix the -"No modules are loaded on grub2 network boot" issue: - -https://bugzilla.redhat.com/show_bug.cgi?id=857936 ---- - grub-core/kern/main.c | 13 ++++++------- - grub-core/normal/main.c | 25 ++++++++++++++++++++++++- - 2 files changed, 30 insertions(+), 8 deletions(-) - -diff --git a/grub-core/kern/main.c b/grub-core/kern/main.c -index 9cad0c4..8ab7794 100644 ---- a/grub-core/kern/main.c -+++ b/grub-core/kern/main.c -@@ -127,16 +127,15 @@ grub_set_prefix_and_root (void) - - grub_machine_get_bootlocation (&fwdevice, &fwpath); - -- if (fwdevice) -+ if (fwdevice && fwpath) - { -- char *cmdpath; -+ char *fw_path; - -- cmdpath = grub_xasprintf ("(%s)%s", fwdevice, fwpath ? : ""); -- if (cmdpath) -+ fw_path = grub_xasprintf ("(%s)/%s", fwdevice, fwpath); -+ if (fw_path) - { -- grub_env_set ("cmdpath", cmdpath); -- grub_env_export ("cmdpath"); -- grub_free (cmdpath); -+ grub_env_set ("fw_path", fw_path); -+ grub_free (fw_path); - } - } - -diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c -index c36663f..243b9d6 100644 ---- a/grub-core/normal/main.c -+++ b/grub-core/normal/main.c -@@ -311,7 +311,30 @@ grub_cmd_normal (struct grub_command *cmd __attribute__ ((unused)), - /* Guess the config filename. It is necessary to make CONFIG static, - so that it won't get broken by longjmp. */ - char *config; -- const char *prefix; -+ const char *prefix, *fw_path; -+ -+ fw_path = grub_env_get ("fw_path"); -+ if (fw_path) -+ { -+ config = grub_xasprintf ("%s/grub.cfg", fw_path); -+ if (config) -+ { -+ grub_file_t file; -+ -+ file = grub_file_open (config); -+ if (file) -+ { -+ grub_file_close (file); -+ grub_enter_normal_mode (config); -+ } -+ else -+ { -+ /* Ignore all errors. */ -+ grub_errno = 0; -+ } -+ grub_free (config); -+ } -+ } - - prefix = grub_env_get ("prefix"); - if (prefix) --- -1.8.4.2 - diff --git a/0002-grub-core-kern-arm-cache_armv6.S-Remove-.arch-direct.patch b/0002-grub-core-kern-arm-cache_armv6.S-Remove-.arch-direct.patch new file mode 100644 index 0000000..376adb1 --- /dev/null +++ b/0002-grub-core-kern-arm-cache_armv6.S-Remove-.arch-direct.patch @@ -0,0 +1,110 @@ +From d2e7d923bf3ed70bb4aa38cb880d0677f2b8646f Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Wed, 25 Dec 2013 23:31:42 +0100 +Subject: [PATCH 002/112] * grub-core/kern/arm/cache_armv6.S: Remove + .arch directive. + + As these functions are used on pre-ARMv6 CPUs as well we don't want + to make assembler assume that architecture is higher than default one. +--- + ChangeLog | 12 ++++++++++++ + INSTALL | 10 +++++----- + docs/grub-dev.texi | 8 ++++---- + grub-core/kern/arm/cache_armv6.S | 1 - + 4 files changed, 21 insertions(+), 10 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 21ec1c7..bbb0f31 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,15 @@ ++2013-12-27 Colin Watson ++ ++ * INSTALL (Cross-compiling the GRUB): Fix some spelling mistakes. ++ * docs/grub.texi (Getting the source code): Likewise. ++ ++2013-12-25 Vladimir Serbinenko ++ ++ * grub-core/kern/arm/cache_armv6.S: Remove .arch directive. ++ ++ As these functions are used on pre-ARMv6 CPUs as well we don't want ++ to make assembler assume that architecture is higher than default one. ++ + 2013-12-25 Andrey Borzenkov + + * grub-core/osdep/windows/platform.c (get_platform): Fix EFI +diff --git a/INSTALL b/INSTALL +index afc957c..db12530 100644 +--- a/INSTALL ++++ b/INSTALL +@@ -140,7 +140,7 @@ If build and host are different make check isn't available. + If build and host are different man pages are not generated. + + As an example imagine you have a build system running on FreeBSD on sparc +-which prepares packages for developpers running amd64 GNU/Linux laptop and ++which prepares packages for developers running amd64 GNU/Linux laptop and + they need to make images for ARM board running U-boot. In this case: + + build=sparc64-freebsd +@@ -149,7 +149,7 @@ target=arm-uboot + + For this example the configure line might look like (more details below) + (some options are optional and included here for completeness but some rarely +-used options are omited): ++used options are omitted): + + ./configure BUILD_CC=gcc BUILD_FREETYPE=freetype-config --host=amd64-linux-gnu + CC=amd64-linux-gnu-gcc CFLAGS="-g -O2" FREETYPE=amd64-linux-gnu-freetype-config +@@ -196,9 +196,9 @@ corresponding platform are not needed for the platform in question. + 11. TARGET_RANLIB= for ranlib for target. + + - Additionally for emu, for host and target. +- 1. SDL is looked for in stadard linker directories (-lSDL) (optional) +- 2. libpciaccess is looked for in stadard linker directories (-lpciaccess) (optional) +- 3. libusb is looked for in stadard linker directories (-lusb) (optional) ++ 1. SDL is looked for in standard linker directories (-lSDL) (optional) ++ 2. libpciaccess is looked for in standard linker directories (-lpciaccess) (optional) ++ 3. libusb is looked for in standard linker directories (-lusb) (optional) + + - Platform-agnostic tools and data. + 1. make is the tool you execute after ./configure. +diff --git a/docs/grub-dev.texi b/docs/grub-dev.texi +index c796850..7c6244c 100644 +--- a/docs/grub-dev.texi ++++ b/docs/grub-dev.texi +@@ -108,16 +108,16 @@ The branches available are: + + @table @samp + @item master +- Main developpement branch. ++ Main development branch. + @item grub-legacy + GRUB 0.97 codebase. Kept for reference and legal reasons + @item multiboot + Multiboot specfication + @item multiboot2 + Multiboot2 specfication +-@item developper branches +- Prefixed with developper name. Every developper of a team manages his own branches. +- Developper branches do not need changelog entries. ++@item developer branches ++ Prefixed with developer name. Every developer of a team manages his own branches. ++ Developer branches do not need changelog entries. + @end table + + Once you have used @kbd{git clone} to fetch an initial copy of a branch, you +diff --git a/grub-core/kern/arm/cache_armv6.S b/grub-core/kern/arm/cache_armv6.S +index 39da1df..dfaded0 100644 +--- a/grub-core/kern/arm/cache_armv6.S ++++ b/grub-core/kern/arm/cache_armv6.S +@@ -22,7 +22,6 @@ + .text + .syntax unified + .arm +- .arch armv6 + + # define DMB mcr p15, 0, r0, c7, c10, 5 + # define DSB mcr p15, 0, r0, c7, c10, 4 +-- +1.8.5.3 + diff --git a/0003-Add-support-for-linuxefi.patch b/0003-Add-support-for-linuxefi.patch deleted file mode 100644 index 0e85a63..0000000 --- a/0003-Add-support-for-linuxefi.patch +++ /dev/null @@ -1,482 +0,0 @@ -From c17e307b40695b73fd972a6a4526424e9a591310 Mon Sep 17 00:00:00 2001 -From: Matthew Garrett -Date: Tue, 10 Jul 2012 11:58:52 -0400 -Subject: [PATCH 03/37] Add support for linuxefi - ---- - grub-core/Makefile.core.def | 8 + - grub-core/kern/efi/mm.c | 32 ++++ - grub-core/loader/i386/efi/linux.c | 371 ++++++++++++++++++++++++++++++++++++++ - include/grub/efi/efi.h | 3 + - include/grub/i386/linux.h | 1 + - 5 files changed, 415 insertions(+) - create mode 100644 grub-core/loader/i386/efi/linux.c - -diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def -index c916246..8c246c6 100644 ---- a/grub-core/Makefile.core.def -+++ b/grub-core/Makefile.core.def -@@ -1706,6 +1706,14 @@ module = { - }; - - module = { -+ name = linuxefi; -+ efi = loader/i386/efi/linux.c; -+ efi = lib/cmdline.c; -+ enable = i386_efi; -+ enable = x86_64_efi; -+}; -+ -+module = { - name = chain; - efi = loader/efi/chainloader.c; - i386_pc = loader/i386/pc/chainloader.c; -diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c -index be37afd..ddeca60 100644 ---- a/grub-core/kern/efi/mm.c -+++ b/grub-core/kern/efi/mm.c -@@ -49,6 +49,38 @@ static grub_efi_uintn_t finish_desc_size; - static grub_efi_uint32_t finish_desc_version; - int grub_efi_is_finished = 0; - -+/* Allocate pages below a specified address */ -+void * -+grub_efi_allocate_pages_max (grub_efi_physical_address_t max, -+ grub_efi_uintn_t pages) -+{ -+ grub_efi_status_t status; -+ grub_efi_boot_services_t *b; -+ grub_efi_physical_address_t address = max; -+ -+ if (max > 0xffffffff) -+ return 0; -+ -+ b = grub_efi_system_table->boot_services; -+ status = efi_call_4 (b->allocate_pages, GRUB_EFI_ALLOCATE_MAX_ADDRESS, GRUB_EFI_LOADER_DATA, pages, &address); -+ -+ if (status != GRUB_EFI_SUCCESS) -+ return 0; -+ -+ if (address == 0) -+ { -+ /* Uggh, the address 0 was allocated... This is too annoying, -+ so reallocate another one. */ -+ address = max; -+ status = efi_call_4 (b->allocate_pages, GRUB_EFI_ALLOCATE_MAX_ADDRESS, GRUB_EFI_LOADER_DATA, pages, &address); -+ grub_efi_free_pages (0, pages); -+ if (status != GRUB_EFI_SUCCESS) -+ return 0; -+ } -+ -+ return (void *) ((grub_addr_t) address); -+} -+ - /* Allocate pages. Return the pointer to the first of allocated pages. */ - void * - grub_efi_allocate_pages (grub_efi_physical_address_t address, -diff --git a/grub-core/loader/i386/efi/linux.c b/grub-core/loader/i386/efi/linux.c -new file mode 100644 -index 0000000..b79e632 ---- /dev/null -+++ b/grub-core/loader/i386/efi/linux.c -@@ -0,0 +1,371 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2012 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 . -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+GRUB_MOD_LICENSE ("GPLv3+"); -+ -+static grub_dl_t my_mod; -+static int loaded; -+static void *kernel_mem; -+static grub_uint64_t kernel_size; -+static grub_uint8_t *initrd_mem; -+static grub_uint32_t handover_offset; -+struct linux_kernel_params *params; -+static char *linux_cmdline; -+ -+#define BYTES_TO_PAGES(bytes) (((bytes) + 0xfff) >> 12) -+ -+#define SHIM_LOCK_GUID \ -+ { 0x605dab50, 0xe046, 0x4300, {0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b, 0x23} } -+ -+struct grub_efi_shim_lock -+{ -+ grub_efi_status_t (*verify) (void *buffer, grub_uint32_t size); -+}; -+typedef struct grub_efi_shim_lock grub_efi_shim_lock_t; -+ -+static grub_efi_boolean_t -+grub_linuxefi_secure_validate (void *data, grub_uint32_t size) -+{ -+ grub_efi_guid_t guid = SHIM_LOCK_GUID; -+ grub_efi_shim_lock_t *shim_lock; -+ -+ shim_lock = grub_efi_locate_protocol(&guid, NULL); -+ -+ if (!shim_lock) -+ return 1; -+ -+ if (shim_lock->verify(data, size) == GRUB_EFI_SUCCESS) -+ return 1; -+ -+ return 0; -+} -+ -+typedef void(*handover_func)(void *, grub_efi_system_table_t *, struct linux_kernel_params *); -+ -+static grub_err_t -+grub_linuxefi_boot (void) -+{ -+ handover_func hf; -+ int offset = 0; -+ -+#ifdef __x86_64__ -+ offset = 512; -+#endif -+ -+ hf = (handover_func)((char *)kernel_mem + handover_offset + offset); -+ -+ asm volatile ("cli"); -+ -+ hf (grub_efi_image_handle, grub_efi_system_table, params); -+ -+ /* Not reached */ -+ return GRUB_ERR_NONE; -+} -+ -+static grub_err_t -+grub_linuxefi_unload (void) -+{ -+ grub_dl_unref (my_mod); -+ loaded = 0; -+ if (initrd_mem) -+ grub_efi_free_pages((grub_efi_physical_address_t)initrd_mem, BYTES_TO_PAGES(params->ramdisk_size)); -+ if (linux_cmdline) -+ grub_efi_free_pages((grub_efi_physical_address_t)linux_cmdline, BYTES_TO_PAGES(params->cmdline_size + 1)); -+ if (kernel_mem) -+ grub_efi_free_pages((grub_efi_physical_address_t)kernel_mem, BYTES_TO_PAGES(kernel_size)); -+ if (params) -+ grub_efi_free_pages((grub_efi_physical_address_t)params, BYTES_TO_PAGES(16384)); -+ return GRUB_ERR_NONE; -+} -+ -+static grub_err_t -+grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), -+ int argc, char *argv[]) -+{ -+ grub_file_t *files = 0; -+ int i, nfiles = 0; -+ grub_size_t size = 0; -+ grub_uint8_t *ptr; -+ -+ if (argc == 0) -+ { -+ grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); -+ goto fail; -+ } -+ -+ if (!loaded) -+ { -+ grub_error (GRUB_ERR_BAD_ARGUMENT, N_("you need to load the kernel first")); -+ goto fail; -+ } -+ -+ files = grub_zalloc (argc * sizeof (files[0])); -+ if (!files) -+ goto fail; -+ -+ for (i = 0; i < argc; i++) -+ { -+ grub_file_filter_disable_compression (); -+ files[i] = grub_file_open (argv[i]); -+ if (! files[i]) -+ goto fail; -+ nfiles++; -+ size += ALIGN_UP (grub_file_size (files[i]), 4); -+ } -+ -+ initrd_mem = grub_efi_allocate_pages_max (0x3fffffff, BYTES_TO_PAGES(size)); -+ -+ if (!initrd_mem) -+ { -+ grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("can't allocate initrd")); -+ goto fail; -+ } -+ -+ params->ramdisk_size = size; -+ params->ramdisk_image = (grub_uint32_t)(grub_uint64_t) initrd_mem; -+ -+ ptr = initrd_mem; -+ -+ for (i = 0; i < nfiles; i++) -+ { -+ grub_ssize_t cursize = grub_file_size (files[i]); -+ if (grub_file_read (files[i], ptr, cursize) != cursize) -+ { -+ if (!grub_errno) -+ grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"), -+ argv[i]); -+ goto fail; -+ } -+ ptr += cursize; -+ grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4)); -+ ptr += ALIGN_UP_OVERHEAD (cursize, 4); -+ } -+ -+ params->ramdisk_size = size; -+ -+ fail: -+ for (i = 0; i < nfiles; i++) -+ grub_file_close (files[i]); -+ grub_free (files); -+ -+ if (initrd_mem && grub_errno) -+ grub_efi_free_pages((grub_efi_physical_address_t)initrd_mem, BYTES_TO_PAGES(size)); -+ -+ return grub_errno; -+} -+ -+static grub_err_t -+grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), -+ int argc, char *argv[]) -+{ -+ grub_file_t file = 0; -+ struct linux_kernel_header lh; -+ grub_ssize_t len, start, filelen; -+ void *kernel; -+ -+ grub_dl_ref (my_mod); -+ -+ if (argc == 0) -+ { -+ grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); -+ goto fail; -+ } -+ -+ file = grub_file_open (argv[0]); -+ if (! file) -+ goto fail; -+ -+ filelen = grub_file_size (file); -+ -+ kernel = grub_malloc(filelen); -+ -+ if (!kernel) -+ { -+ grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("cannot allocate kernel buffer")); -+ goto fail; -+ } -+ -+ if (grub_file_read (file, kernel, filelen) != filelen) -+ { -+ grub_error (GRUB_ERR_FILE_READ_ERROR, N_("Can't read kernel %s"), argv[0]); -+ goto fail; -+ } -+ -+ if (! grub_linuxefi_secure_validate (kernel, filelen)) -+ { -+ grub_error (GRUB_ERR_INVALID_COMMAND, N_("%s has invalid signature"), argv[0]); -+ grub_free (kernel); -+ goto fail; -+ } -+ -+ grub_file_seek (file, 0); -+ -+ grub_free(kernel); -+ -+ params = grub_efi_allocate_pages_max (0x3fffffff, BYTES_TO_PAGES(16384)); -+ -+ if (! params) -+ { -+ grub_error (GRUB_ERR_OUT_OF_MEMORY, "cannot allocate kernel parameters"); -+ goto fail; -+ } -+ -+ memset (params, 0, 16384); -+ -+ if (grub_file_read (file, &lh, sizeof (lh)) != sizeof (lh)) -+ { -+ if (!grub_errno) -+ grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"), -+ argv[0]); -+ goto fail; -+ } -+ -+ if (lh.boot_flag != grub_cpu_to_le16 (0xaa55)) -+ { -+ grub_error (GRUB_ERR_BAD_OS, N_("invalid magic number")); -+ goto fail; -+ } -+ -+ if (lh.setup_sects > GRUB_LINUX_MAX_SETUP_SECTS) -+ { -+ grub_error (GRUB_ERR_BAD_OS, N_("too many setup sectors")); -+ goto fail; -+ } -+ -+ if (lh.version < grub_cpu_to_le16 (0x020b)) -+ { -+ grub_error (GRUB_ERR_BAD_OS, N_("kernel too old")); -+ goto fail; -+ } -+ -+ if (!lh.handover_offset) -+ { -+ grub_error (GRUB_ERR_BAD_OS, N_("kernel doesn't support EFI handover")); -+ goto fail; -+ } -+ -+ linux_cmdline = grub_efi_allocate_pages_max(0x3fffffff, -+ BYTES_TO_PAGES(lh.cmdline_size + 1)); -+ -+ if (!linux_cmdline) -+ { -+ grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("can't allocate cmdline")); -+ goto fail; -+ } -+ -+ grub_memcpy (linux_cmdline, LINUX_IMAGE, sizeof (LINUX_IMAGE)); -+ grub_create_loader_cmdline (argc, argv, -+ linux_cmdline + sizeof (LINUX_IMAGE) - 1, -+ lh.cmdline_size - (sizeof (LINUX_IMAGE) - 1)); -+ -+ lh.cmd_line_ptr = (grub_uint32_t)(grub_uint64_t)linux_cmdline; -+ -+ handover_offset = lh.handover_offset; -+ -+ start = (lh.setup_sects + 1) * 512; -+ len = grub_file_size(file) - start; -+ -+ kernel_mem = grub_efi_allocate_pages(lh.pref_address, -+ BYTES_TO_PAGES(lh.init_size)); -+ -+ if (!kernel_mem) -+ kernel_mem = grub_efi_allocate_pages_max(0x3fffffff, -+ BYTES_TO_PAGES(lh.init_size)); -+ -+ if (!kernel_mem) -+ { -+ grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("can't allocate kernel")); -+ goto fail; -+ } -+ -+ if (grub_file_seek (file, start) == (grub_off_t) -1) -+ { -+ grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"), -+ argv[0]); -+ goto fail; -+ } -+ -+ if (grub_file_read (file, kernel_mem, len) != len && !grub_errno) -+ { -+ grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"), -+ argv[0]); -+ } -+ -+ if (grub_errno == GRUB_ERR_NONE) -+ { -+ grub_loader_set (grub_linuxefi_boot, grub_linuxefi_unload, 0); -+ loaded = 1; -+ lh.code32_start = (grub_uint32_t)(grub_uint64_t) kernel_mem; -+ } -+ -+ memcpy(params, &lh, 2 * 512); -+ -+ params->type_of_loader = 0x21; -+ -+ fail: -+ -+ if (file) -+ grub_file_close (file); -+ -+ if (grub_errno != GRUB_ERR_NONE) -+ { -+ grub_dl_unref (my_mod); -+ loaded = 0; -+ } -+ -+ if (linux_cmdline && !loaded) -+ grub_efi_free_pages((grub_efi_physical_address_t)linux_cmdline, BYTES_TO_PAGES(lh.cmdline_size + 1)); -+ -+ if (kernel_mem && !loaded) -+ grub_efi_free_pages((grub_efi_physical_address_t)kernel_mem, BYTES_TO_PAGES(kernel_size)); -+ -+ if (params && !loaded) -+ grub_efi_free_pages((grub_efi_physical_address_t)params, BYTES_TO_PAGES(16384)); -+ -+ return grub_errno; -+} -+ -+static grub_command_t cmd_linux, cmd_initrd; -+ -+GRUB_MOD_INIT(linuxefi) -+{ -+ cmd_linux = -+ grub_register_command ("linuxefi", grub_cmd_linux, -+ 0, N_("Load Linux.")); -+ cmd_initrd = -+ grub_register_command ("initrdefi", grub_cmd_initrd, -+ 0, N_("Load initrd.")); -+ my_mod = mod; -+} -+ -+GRUB_MOD_FINI(linuxefi) -+{ -+ grub_unregister_command (cmd_linux); -+ grub_unregister_command (cmd_initrd); -+} -diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h -index 489cf9e..9370fd5 100644 ---- a/include/grub/efi/efi.h -+++ b/include/grub/efi/efi.h -@@ -40,6 +40,9 @@ void EXPORT_FUNC(grub_efi_stall) (grub_efi_uintn_t microseconds); - void * - EXPORT_FUNC(grub_efi_allocate_pages) (grub_efi_physical_address_t address, - grub_efi_uintn_t pages); -+void * -+EXPORT_FUNC(grub_efi_allocate_pages_max) (grub_efi_physical_address_t max, -+ grub_efi_uintn_t pages); - void EXPORT_FUNC(grub_efi_free_pages) (grub_efi_physical_address_t address, - grub_efi_uintn_t pages); - int -diff --git a/include/grub/i386/linux.h b/include/grub/i386/linux.h -index da0ca3b..fc36bda 100644 ---- a/include/grub/i386/linux.h -+++ b/include/grub/i386/linux.h -@@ -139,6 +139,7 @@ struct linux_kernel_header - grub_uint64_t setup_data; - grub_uint64_t pref_address; - grub_uint32_t init_size; -+ grub_uint32_t handover_offset; - } GRUB_PACKED; - - /* Boot parameters for Linux based on 2.6.12. This is used by the setup --- -1.8.4.2 - diff --git a/0003-NEWS-First-draft-of-2.02-entry.patch b/0003-NEWS-First-draft-of-2.02-entry.patch new file mode 100644 index 0000000..0c5285f --- /dev/null +++ b/0003-NEWS-First-draft-of-2.02-entry.patch @@ -0,0 +1,163 @@ +From ef30fb83d10ce26adfc613837eb69366ab02338f Mon Sep 17 00:00:00 2001 +From: Colin Watson +Date: Fri, 27 Dec 2013 03:05:38 +0000 +Subject: [PATCH 003/112] * NEWS: First draft of 2.02 entry. + +--- + ChangeLog | 16 +++++++++ + NEWS | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 134 insertions(+) + +diff --git a/ChangeLog b/ChangeLog +index bbb0f31..5639fdc 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,19 @@ ++2013-12-28 Colin Watson ++ ++ * NEWS: The cmosclean command in fact dates back to 1.99. Remove ++ mention of it from 2.02. ++ ++2013-12-27 Vladimir Serbinenko ++ ++ * grub-core/kern/arm/cache_armv6.S: Remove .arch directive. ++ ++ As these functions are used on pre-ARMv6 CPUs as well we don't want ++ to make assembler assume that architecture is higher than default one. ++ ++2013-12-27 Colin Watson ++ ++ * NEWS: First draft of 2.02 entry. ++ + 2013-12-27 Colin Watson + + * INSTALL (Cross-compiling the GRUB): Fix some spelling mistakes. +diff --git a/NEWS b/NEWS +index 4bb5f98..b74c05f 100644 +--- a/NEWS ++++ b/NEWS +@@ -1,3 +1,121 @@ ++New in 2.02: ++ ++* New/improved filesystem and disk support: ++ * Big-endian UFS1. ++ * Experimental 64-bit ext2 support. ++ * Various fixes for non-512-byte sector devices. ++ * New `proc' filesystem framework, used by LUKS disks. ++ * Fix DM-RAID partition handling. ++ * New `nativedisk' command to switch from firmware to native disk drivers. ++ * Compressed HFS+. ++ * DragonFly BSD labels. ++ * CBFS (coreboot). ++ * Handle partitioned LVM properly. ++ * Use LVM UUIDs whenever possible. ++ * GPT PReP. ++ * New `progress' module that shows progress information while reading ++ files. ++ ++* New/improved terminal and video support: ++ * Monochrome text (matching `hercules' in GRUB Legacy). ++ * Morse code output using system speaker. ++ * `spkmodem' output (simple data protocol using system speaker). ++ * Handle Japanese special keys. ++ * coreboot framebuffer. ++ * Serial on ARC. ++ * Native vt100 handling for grub-emu, replacing the use of the curses ++ library. ++ * New gfxmenu options for terminal window positioning, theme background ++ image handling, and scrollbar padding, plus `item_pixmap_style' and ++ `highlight_overlay'. ++ * Support several more image types (paletted and greyscale). ++ ++* Boot protocol improvements: ++ * Support Apple FAT binaries on non-Apple platforms. ++ * Improve FreeDOS direct loading support compatibility. ++ * Enable `linux16' on all x86 platforms, not just BIOS. ++ * New TrueCrypt ISO loader. ++ ++* New/improved network support: ++ * New variables `net_default_*' containing properties of the default ++ interface. ++ * Autoload `http' and `tftp' modules if necessary. ++ * Improve TFTP robustness. ++ * Parse `nd' disk names in GRUB Legacy configuration files. ++ * Issue separate DNS queries for IPv4 and IPv6. ++ ++* New/improved platform support: ++ * New `efifwsetup' and `lsefi' commands on EFI platforms. ++ * New `cmosdump' and `cmosset' commands on platforms with CMOS support. ++ * New `cbmemc', `coreboot_boottime', and `lscoreboot' commands on ++ coreboot. ++ * Improve opcode parsing in ACPI halt implementation. ++ * Use the TSC as a possible time source on i386-ieee1275. ++ * Merge PowerPC grub-mkrescue implementation with the common one. ++ * Support grub-mkrescue on i386-ieee1275, sparc64, bootinfo machines such ++ as pSeries, and mips-arc. ++ * Make grub-mkrescue better support Apple Intel Macs on CD. ++ * Enable GRUB Legacy configuration file parsing on EFI. ++ * Support halt for Loongson 2E. ++ * ARM U-Boot and EFI ports. ++ * Reorganise platform-dependent code in utilities to avoid #ifdef mess. ++ * AROS and Haiku support for userspace utilities. ++ * Xen PV port. ++ * Fix EFI stack alignment. ++ * ARM64 EFI port. ++ * On Linux, read partition start offsets from sysfs if possible. ++ * New grub-macbless utility, and better integration with Mac firmware in ++ grub-install. ++ * Support Yeeloong 3A. ++ * Add `cpuid --pae' option to detect Physical Address Extension on x86. ++ ++* Security: ++ * Add optional facility to enforce that all files read by the core image ++ from disk have a valid detached digital signature. ++ ++* Performance: ++ * Avoid costly division operations in many places. ++ * New boot time analysis framework (`./configure --enable-boot-time'). ++ * Initialise USB ports in parallel. ++ * New `testspeed' command to test file read speed. ++ ++* Scripting: ++ * New `eval' and `tr' commands. ++ * grub-script-check fails on scripts containing no commands. ++ ++* Installation and other utility improvements: ++ * Add option to compress files on installation or image creation. ++ * Using grub-reboot no longer requires setting `GRUB_DEFAULT=saved'. ++ * Support probing EFI System Partition (requires os-prober >= 1.58). ++ * Fix inconsistent use of `GRUB_CRYPTODISK_ENABLE' and ++ `GRUB_ENABLE_CRYPTODISK'; the latter is now used consistently. ++ * grub-mount handles symbolic links to directories. ++ * Support disabling submenus with `GRUB_DISABLE_SUBMENU' configuration key ++ for grub-mkconfig. ++ * grub-install, grub-mknetdir, grub-mkrescue, and grub-mkstandalone ++ rewritten in C. They should now work in supported non-Unix-like ++ environments. ++ * Reorganise timeout handling using new `timeout_style' environment ++ variable and `GRUB_TIMEOUT_STYLE' configuration key for grub-mkconfig. ++ Menu hotkeys pressed during a hidden timeout now boot the corresponding ++ menu entry immediately. ++ * New `file' command and grub-file utility to check file types. ++ * New syslinux configuration file parser. ++ ++* Build system: ++ * Remove all uses of nested functions; GRUB no longer requires an ++ executable stack. ++ * Fix documentation build with Texinfo >= 5.1. ++ * More robust and documented cross-compiling support. ++ * Partial clang support for some platforms. ++ * Eliminate the use of AutoGen. This allowed some performance ++ improvements to the build system. ++ * Fix build with FreeType >= 2.5.1. ++ * Make gentpl.py compatible with Python 3. It now requires at least ++ Python 2.6. ++ ++* Revision control moved to git. ++ + New in 2.00: + + * Appearance: +-- +1.8.5.3 + diff --git a/0004-Use-linuxefi-and-initrdefi-where-appropriate.patch b/0004-Use-linuxefi-and-initrdefi-where-appropriate.patch deleted file mode 100644 index 7b75977..0000000 --- a/0004-Use-linuxefi-and-initrdefi-where-appropriate.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 9309e5ea7f0c65e9c575508de59c09a0ff732fcb Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Mon, 16 Jul 2012 18:57:11 -0400 -Subject: [PATCH 04/37] Use "linuxefi" and "initrdefi" where appropriate. - ---- - util/grub.d/10_linux.in | 18 ++++++++++++++++-- - 1 file changed, 16 insertions(+), 2 deletions(-) - -diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index 00d1931..ad34cc0 100644 ---- a/util/grub.d/10_linux.in -+++ b/util/grub.d/10_linux.in -@@ -127,17 +127,31 @@ linux_entry () - printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/" - fi - message="$(gettext_printf "Loading Linux %s ..." ${version})" -- sed "s/^/$submenu_indentation/" << EOF -+ if [ -d /sys/firmware/efi ]; then -+ sed "s/^/$submenu_indentation/" << EOF -+ echo '$(echo "$message" | grub_quote)' -+ linuxefi ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} -+EOF -+ else -+ sed "s/^/$submenu_indentation/" << EOF - echo '$(echo "$message" | grub_quote)' - linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} - EOF -+ fi - if test -n "${initrd}" ; then - # TRANSLATORS: ramdisk isn't identifier. Should be translated. - message="$(gettext_printf "Loading initial ramdisk ...")" -- sed "s/^/$submenu_indentation/" << EOF -+ if [ -d /sys/firmware/efi ]; then -+ sed "s/^/$submenu_indentation/" << EOF - echo '$(echo "$message" | grub_quote)' -+ initrdefi ${rel_dirname}/${initrd} -+EOF -+ else -+ sed "s/^/$submenu_indentation/" << EOF -+ echo '$message' - initrd ${rel_dirname}/${initrd} - EOF -+ fi - fi - sed "s/^/$submenu_indentation/" << EOF - } --- -1.8.4.2 - diff --git a/0004-remove-unused-error.h-from-kern-emu-misc.c.patch b/0004-remove-unused-error.h-from-kern-emu-misc.c.patch new file mode 100644 index 0000000..e49fd08 --- /dev/null +++ b/0004-remove-unused-error.h-from-kern-emu-misc.c.patch @@ -0,0 +1,39 @@ +From de40a1e74bd16b419f71f8e79cf7d62f69ef25a4 Mon Sep 17 00:00:00 2001 +From: Andrey Borzenkov +Date: Sat, 28 Dec 2013 09:01:20 +0400 +Subject: [PATCH 004/112] remove unused error.h from kern/emu/misc.c + +Fixes compilation on mingw32, where include is apparently missing. +--- + ChangeLog | 5 +++++ + grub-core/kern/emu/misc.c | 1 - + 2 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index 5639fdc..d2e9f19 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,8 @@ ++2013-12-28 Andrey Borzenkov ++ ++ * grub-core/kern/emu/misc.c: Remove unused error.h; fixes compilation ++ on mingw. ++ + 2013-12-28 Colin Watson + + * NEWS: The cmosclean command in fact dates back to 1.99. Remove +diff --git a/grub-core/kern/emu/misc.c b/grub-core/kern/emu/misc.c +index 43471b4..bb606da 100644 +--- a/grub-core/kern/emu/misc.c ++++ b/grub-core/kern/emu/misc.c +@@ -20,7 +20,6 @@ + #include + + #include +-#include + #include + #include + #include +-- +1.8.5.3 + diff --git a/0005-Don-t-abort-on-unavailable-coreboot-tables-if-not-ru.patch b/0005-Don-t-abort-on-unavailable-coreboot-tables-if-not-ru.patch new file mode 100644 index 0000000..da4e477 --- /dev/null +++ b/0005-Don-t-abort-on-unavailable-coreboot-tables-if-not-ru.patch @@ -0,0 +1,70 @@ +From e0589d5bbec8c6203ba299b782438030295803d5 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Sat, 28 Dec 2013 17:25:14 +0100 +Subject: [PATCH 005/112] Don't abort() on unavailable coreboot tables + if not running on coreboot. + +--- + ChangeLog | 4 ++++ + grub-core/kern/i386/coreboot/cbtable.c | 2 +- + grub-core/kern/i386/coreboot/init.c | 5 +++++ + 3 files changed, 10 insertions(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index d2e9f19..67d80bd 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,7 @@ ++2013-12-28 Vladimir Serbinenko ++ ++ Don't abort() on unavailable coreboot tables if not running on coreboot. ++ + 2013-12-28 Andrey Borzenkov + + * grub-core/kern/emu/misc.c: Remove unused error.h; fixes compilation +diff --git a/grub-core/kern/i386/coreboot/cbtable.c b/grub-core/kern/i386/coreboot/cbtable.c +index e3bb7b2..1669bc0 100644 +--- a/grub-core/kern/i386/coreboot/cbtable.c ++++ b/grub-core/kern/i386/coreboot/cbtable.c +@@ -55,7 +55,7 @@ grub_linuxbios_table_iterate (int (*hook) (grub_linuxbios_table_item_t, + if (check_signature (table_header)) + goto signature_found; + +- grub_fatal ("Could not find coreboot table\n"); ++ return 0; + + signature_found: + +diff --git a/grub-core/kern/i386/coreboot/init.c b/grub-core/kern/i386/coreboot/init.c +index 6b150b4..3314f02 100644 +--- a/grub-core/kern/i386/coreboot/init.c ++++ b/grub-core/kern/i386/coreboot/init.c +@@ -51,6 +51,7 @@ grub_exit (void) + + grub_addr_t grub_modbase = GRUB_KERNEL_I386_COREBOOT_MODULES_ADDR; + static grub_uint64_t modend; ++static int have_memory = 0; + + /* Helper for grub_machine_init. */ + static int +@@ -82,6 +83,8 @@ heap_init (grub_uint64_t addr, grub_uint64_t size, grub_memory_type_t type, + + grub_mm_init_region ((void *) (grub_addr_t) begin, (grub_size_t) (end - begin)); + ++ have_memory = 1; ++ + return 0; + } + +@@ -97,6 +100,8 @@ grub_machine_init (void) + grub_vga_text_init (); + + grub_machine_mmap_iterate (heap_init, NULL); ++ if (!have_memory) ++ grub_fatal ("No memory found"); + + grub_video_coreboot_fb_late_init (); + +-- +1.8.5.3 + diff --git a/0005-Don-t-allow-insmod-when-secure-boot-is-enabled.patch b/0005-Don-t-allow-insmod-when-secure-boot-is-enabled.patch deleted file mode 100644 index 15037e6..0000000 --- a/0005-Don-t-allow-insmod-when-secure-boot-is-enabled.patch +++ /dev/null @@ -1,117 +0,0 @@ -From 926684b8498a820b2e1446b697ab9c746f5302ba Mon Sep 17 00:00:00 2001 -From: Colin Watson -Date: Tue, 23 Oct 2012 10:40:49 -0400 -Subject: [PATCH 05/37] Don't allow insmod when secure boot is enabled. - -Hi, - -Fedora's patch to forbid insmod in UEFI Secure Boot environments is fine -as far as it goes. However, the insmod command is not the only way that -modules can be loaded. In particular, the 'normal' command, which -implements the usual GRUB menu and the fully-featured command prompt, -will implicitly load commands not currently loaded into memory. This -permits trivial Secure Boot violations by writing commands implementing -whatever you want to do and pointing $prefix at the malicious code. - -I'm currently test-building this patch (replacing your current -grub-2.00-no-insmod-on-sb.patch), but this should be more correct. It -moves the check into grub_dl_load_file. ---- - grub-core/kern/dl.c | 21 +++++++++++++++++++++ - grub-core/kern/efi/efi.c | 28 ++++++++++++++++++++++++++++ - include/grub/efi/efi.h | 1 + - 3 files changed, 50 insertions(+) - -diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c -index 6850e04..b0b0405 100644 ---- a/grub-core/kern/dl.c -+++ b/grub-core/kern/dl.c -@@ -38,6 +38,14 @@ - #define GRUB_MODULES_MACHINE_READONLY - #endif - -+#ifdef GRUB_MACHINE_EMU -+#include -+#endif -+ -+#ifdef GRUB_MACHINE_EFI -+#include -+#endif -+ - - - #pragma GCC diagnostic ignored "-Wcast-align" -@@ -680,6 +688,19 @@ grub_dl_load_file (const char *filename) - void *core = 0; - grub_dl_t mod = 0; - -+#ifdef GRUB_MACHINE_EFI -+ if (grub_efi_secure_boot ()) -+ { -+#if 0 -+ /* This is an error, but grub2-mkconfig still generates a pile of -+ * insmod commands, so emitting it would be mostly just obnoxious. */ -+ grub_error (GRUB_ERR_ACCESS_DENIED, -+ "Secure Boot forbids loading module from %s", filename); -+#endif -+ return 0; -+ } -+#endif -+ - grub_boot_time ("Loading module %s", filename); - - file = grub_file_open (filename); -diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c -index b253141..aa81322 100644 ---- a/grub-core/kern/efi/efi.c -+++ b/grub-core/kern/efi/efi.c -@@ -259,6 +259,34 @@ grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, - return NULL; - } - -+grub_efi_boolean_t -+grub_efi_secure_boot (void) -+{ -+ grub_efi_guid_t efi_var_guid = GRUB_EFI_GLOBAL_VARIABLE_GUID; -+ grub_size_t datasize; -+ char *secure_boot = NULL; -+ char *setup_mode = NULL; -+ grub_efi_boolean_t ret = 0; -+ -+ secure_boot = grub_efi_get_variable("SecureBoot", &efi_var_guid, &datasize); -+ -+ if (datasize != 1 || !secure_boot) -+ goto out; -+ -+ setup_mode = grub_efi_get_variable("SetupMode", &efi_var_guid, &datasize); -+ -+ if (datasize != 1 || !setup_mode) -+ goto out; -+ -+ if (*secure_boot && !*setup_mode) -+ ret = 1; -+ -+ out: -+ grub_free (secure_boot); -+ grub_free (setup_mode); -+ return ret; -+} -+ - #pragma GCC diagnostic ignored "-Wcast-align" - - /* Search the mods section from the PE32/PE32+ image. This code uses -diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h -index 9370fd5..a000c38 100644 ---- a/include/grub/efi/efi.h -+++ b/include/grub/efi/efi.h -@@ -72,6 +72,7 @@ EXPORT_FUNC (grub_efi_set_variable) (const char *var, - const grub_efi_guid_t *guid, - void *data, - grub_size_t datasize); -+grub_efi_boolean_t EXPORT_FUNC (grub_efi_secure_boot) (void); - int - EXPORT_FUNC (grub_efi_compare_device_paths) (const grub_efi_device_path_t *dp1, - const grub_efi_device_path_t *dp2); --- -1.8.4.2 - diff --git a/0006-NEWS-Add-few-missing-entries.-Correct-existing-ones.patch b/0006-NEWS-Add-few-missing-entries.-Correct-existing-ones.patch new file mode 100644 index 0000000..54dd1ba --- /dev/null +++ b/0006-NEWS-Add-few-missing-entries.-Correct-existing-ones.patch @@ -0,0 +1,121 @@ +From 300c13fa40729ad32e85610a650c26516c66a560 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Mon, 30 Dec 2013 06:49:15 +0100 +Subject: [PATCH 006/112] * NEWS: Add few missing entries. Correct + existing ones. + +--- + ChangeLog | 4 ++++ + NEWS | 27 ++++++++++++++++++++++----- + 2 files changed, 26 insertions(+), 5 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 67d80bd..226f2a3 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,7 @@ ++2013-12-30 Vladimir Serbinenko ++ ++ * NEWS: Add few missing entries. Correct existing ones. ++ + 2013-12-28 Vladimir Serbinenko + + Don't abort() on unavailable coreboot tables if not running on coreboot. +diff --git a/NEWS b/NEWS +index b74c05f..49a2459 100644 +--- a/NEWS ++++ b/NEWS +@@ -35,6 +35,8 @@ New in 2.02: + * Improve FreeDOS direct loading support compatibility. + * Enable `linux16' on all x86 platforms, not just BIOS. + * New TrueCrypt ISO loader. ++ * multiboot2 boot-services EFI specification. ++ * multiboot2 full-file specfication. + + * New/improved network support: + * New variables `net_default_*' containing properties of the default +@@ -44,11 +46,17 @@ New in 2.02: + * Parse `nd' disk names in GRUB Legacy configuration files. + * Issue separate DNS queries for IPv4 and IPv6. + ++* Coreboot improvements: ++ * CBFS support both in on-disk images (loopback) and flash. ++ * Ability to launch another payload from flash or disk ++ * Coreboot framebuffer ++ * CBMEMC support (both logging and inspecting logs) ++ * Inspecting coreboot timestamps. ++ * Inspecting coreboot tables. ++ + * New/improved platform support: + * New `efifwsetup' and `lsefi' commands on EFI platforms. + * New `cmosdump' and `cmosset' commands on platforms with CMOS support. +- * New `cbmemc', `coreboot_boottime', and `lscoreboot' commands on +- coreboot. + * Improve opcode parsing in ACPI halt implementation. + * Use the TSC as a possible time source on i386-ieee1275. + * Merge PowerPC grub-mkrescue implementation with the common one. +@@ -68,6 +76,7 @@ New in 2.02: + grub-install. + * Support Yeeloong 3A. + * Add `cpuid --pae' option to detect Physical Address Extension on x86. ++ * Support for USB debug dongles. + + * Security: + * Add optional facility to enforce that all files read by the core image +@@ -78,6 +87,7 @@ New in 2.02: + * New boot time analysis framework (`./configure --enable-boot-time'). + * Initialise USB ports in parallel. + * New `testspeed' command to test file read speed. ++ * Speed-up gfxterm by storing intermediate results in more compact format. + + * Scripting: + * New `eval' and `tr' commands. +@@ -95,6 +105,7 @@ New in 2.02: + * grub-install, grub-mknetdir, grub-mkrescue, and grub-mkstandalone + rewritten in C. They should now work in supported non-Unix-like + environments. ++ * Native mingw support, including ability to install on EFI under windows. + * Reorganise timeout handling using new `timeout_style' environment + variable and `GRUB_TIMEOUT_STYLE' configuration key for grub-mkconfig. + Menu hotkeys pressed during a hidden timeout now boot the corresponding +@@ -107,12 +118,19 @@ New in 2.02: + executable stack. + * Fix documentation build with Texinfo >= 5.1. + * More robust and documented cross-compiling support. +- * Partial clang support for some platforms. ++ * Partial clang support for some platforms (experimental). ++ * Partial mingw64 x86_64-efi compile support (highly experimental). ++ * Partial mingw32 i386-* (other than already present i386-pc) ++ compile support (highly experimental). + * Eliminate the use of AutoGen. This allowed some performance + improvements to the build system. ++ * Remove variable length arrays. ++ * OpenBSD compile and tools support (NetBSD and FreeBSD were already supported). + * Fix build with FreeType >= 2.5.1. + * Make gentpl.py compatible with Python 3. It now requires at least + Python 2.6. ++ * modinfo.sh contains build information now. ++ * Added many new tests to improve robustness. + + * Revision control moved to git. + +@@ -142,7 +160,6 @@ New in 2.00: + * IEEE1275 serial. + * EFI serial. + * Network stack for BIOS, IEEE1275, EMU and EFI, including TFTP, HTTP and DNS. +- * VBE on coreboot support. + + * New filesystem, filters and disks formats: + * DVH partition map. +@@ -166,7 +183,7 @@ New in 2.00: + * multidevice, mirrored and raidz(2,3) ZFS support. + * RAID LVM (internal RAIDing) support. + * ZFS crypto support. +- * ZLE and GZIP on ZFS support. ++ * ZLE, LZ4 and GZIP on ZFS support. + * Support ZFS up to 33. + * HFS string is now treated like mac-roman and not UTF-8 + * HFS mtime support. +-- +1.8.5.3 + diff --git a/0006-Pass-x-hex-hex-straight-through-unmolested.patch b/0006-Pass-x-hex-hex-straight-through-unmolested.patch deleted file mode 100644 index 7877886..0000000 --- a/0006-Pass-x-hex-hex-straight-through-unmolested.patch +++ /dev/null @@ -1,183 +0,0 @@ -From 0e470ac45edd8c3e6cd06d2c6bdd5cdcf389af34 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Mon, 1 Oct 2012 13:24:37 -0400 -Subject: [PATCH 06/37] Pass "\x[[:hex:]][[:hex:]]" straight through - unmolested. - ---- - grub-core/commands/wildcard.c | 16 +++++++++++++++- - grub-core/lib/cmdline.c | 34 ++++++++++++++++++++++++++++++++-- - grub-core/script/execute.c | 43 +++++++++++++++++++++++++++++++++++++------ - 3 files changed, 84 insertions(+), 9 deletions(-) - -diff --git a/grub-core/commands/wildcard.c b/grub-core/commands/wildcard.c -index 2807f80..0f40e04 100644 ---- a/grub-core/commands/wildcard.c -+++ b/grub-core/commands/wildcard.c -@@ -458,6 +458,12 @@ check_file (const char *dir, const char *basename) - return ctx.found; - } - -+static int -+is_hex(char c) -+{ -+ return ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); -+} -+ - static void - unescape (char *out, const char *in, const char *end) - { -@@ -466,7 +472,15 @@ unescape (char *out, const char *in, const char *end) - - for (optr = out, iptr = in; iptr < end;) - { -- if (*iptr == '\\' && iptr + 1 < end) -+ if (*iptr == '\\' && iptr + 3 < end && iptr[1] == 'x' && is_hex(iptr[2]) && is_hex(iptr[3])) -+ { -+ *optr++ = *iptr++; -+ *optr++ = *iptr++; -+ *optr++ = *iptr++; -+ *optr++ = *iptr++; -+ continue; -+ } -+ else if (*iptr == '\\' && iptr + 1 < end) - { - *optr++ = iptr[1]; - iptr += 2; -diff --git a/grub-core/lib/cmdline.c b/grub-core/lib/cmdline.c -index d5e10ee..0a5b2af 100644 ---- a/grub-core/lib/cmdline.c -+++ b/grub-core/lib/cmdline.c -@@ -20,6 +20,12 @@ - #include - #include - -+static int -+is_hex(char c) -+{ -+ return ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); -+} -+ - static unsigned int check_arg (char *c, int *has_space) - { - int space = 0; -@@ -27,7 +33,13 @@ static unsigned int check_arg (char *c, int *has_space) - - while (*c) - { -- if (*c == '\\' || *c == '\'' || *c == '"') -+ if (*c == '\\' && *(c+1) == 'x' && is_hex(*(c+2)) && is_hex(*(c+3))) -+ { -+ size += 4; -+ c += 4; -+ continue; -+ } -+ else if (*c == '\\' || *c == '\'' || *c == '"') - size++; - else if (*c == ' ') - space = 1; -@@ -85,7 +97,25 @@ int grub_create_loader_cmdline (int argc, char *argv[], char *buf, - - while (*c) - { -- if (*c == '\\' || *c == '\'' || *c == '"') -+ if (*c == ' ') -+ { -+ *buf++ = '\\'; -+ *buf++ = 'x'; -+ *buf++ = '2'; -+ *buf++ = '0'; -+ c++; -+ continue; -+ } -+ else if (*c == '\\' && *(c+1) == 'x' && -+ is_hex(*(c+2)) && is_hex(*(c+3))) -+ { -+ *buf++ = *c++; -+ *buf++ = *c++; -+ *buf++ = *c++; -+ *buf++ = *c++; -+ continue; -+ } -+ else if (*c == '\\' || *c == '\'' || *c == '"') - *buf++ = '\\'; - - *buf++ = *c; -diff --git a/grub-core/script/execute.c b/grub-core/script/execute.c -index afd5513..8f01c1b 100644 ---- a/grub-core/script/execute.c -+++ b/grub-core/script/execute.c -@@ -52,6 +52,12 @@ static struct grub_script_scope *scope = 0; - /* Wildcard translator for GRUB script. */ - struct grub_script_wildcard_translator *grub_wildcard_translator; - -+static int -+is_hex(char c) -+{ -+ return ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); -+} -+ - static char* - wildcard_escape (const char *s) - { -@@ -68,7 +74,15 @@ wildcard_escape (const char *s) - i = 0; - while ((ch = *s++)) - { -- if (ch == '*' || ch == '\\' || ch == '?') -+ if (ch == '\\' && s[0] == 'x' && is_hex(s[1]) && is_hex(s[2])) -+ { -+ p[i++] = ch; -+ p[i++] = *s++; -+ p[i++] = *s++; -+ p[i++] = *s++; -+ continue; -+ } -+ else if (ch == '*' || ch == '\\' || ch == '?') - p[i++] = '\\'; - p[i++] = ch; - } -@@ -92,7 +106,14 @@ wildcard_unescape (const char *s) - i = 0; - while ((ch = *s++)) - { -- if (ch == '\\') -+ if (ch == '\\' && s[0] == 'x' && is_hex(s[1]) && is_hex(s[2])) -+ { -+ p[i++] = '\\'; -+ p[i++] = *s++; -+ p[i++] = *s++; -+ p[i++] = *s++; -+ } -+ else if (ch == '\\') - p[i++] = *s++; - else - p[i++] = ch; -@@ -394,10 +415,20 @@ parse_string (const char *str, - switch (*ptr) - { - case '\\': -- escaped = !escaped; -- if (!escaped && put) -- *(put++) = '\\'; -- ptr++; -+ if (!escaped && put && *(ptr+1) == 'x' && is_hex(*(ptr+2)) && is_hex(*(ptr+3))) -+ { -+ *(put++) = *ptr++; -+ *(put++) = *ptr++; -+ *(put++) = *ptr++; -+ *(put++) = *ptr++; -+ } -+ else -+ { -+ escaped = !escaped; -+ if (!escaped && put) -+ *(put++) = '\\'; -+ ptr++; -+ } - break; - case '$': - if (escaped) --- -1.8.4.2 - diff --git a/0007-Fix-crash-on-http.patch b/0007-Fix-crash-on-http.patch deleted file mode 100644 index ee9d23d..0000000 --- a/0007-Fix-crash-on-http.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 24dd7353a3c7691714661ddfdc1de1c0d8386d7f Mon Sep 17 00:00:00 2001 -From: Gustavo Luiz Duarte -Date: Tue, 25 Sep 2012 18:40:55 -0400 -Subject: [PATCH 07/37] Fix crash on http - -Don't free file->data on receiving FIN flag since it is used all over without -checking. http_close() will be called later to free that memory. -https://bugzilla.redhat.com/show_bug.cgi?id=860834 ---- - grub-core/net/http.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/grub-core/net/http.c b/grub-core/net/http.c -index 4684f8b..ef9538c 100644 ---- a/grub-core/net/http.c -+++ b/grub-core/net/http.c -@@ -393,7 +393,7 @@ http_establish (struct grub_file *file, grub_off_t offset, int initial) - - data->sock = grub_net_tcp_open (file->device->net->server, - HTTP_PORT, http_receive, -- http_err, http_err, -+ http_err, NULL, - file); - if (!data->sock) - { --- -1.8.4.2 - diff --git a/0007-strip-.eh_frame-section-from-arm64-efi-kernel.patch b/0007-strip-.eh_frame-section-from-arm64-efi-kernel.patch new file mode 100644 index 0000000..e935324 --- /dev/null +++ b/0007-strip-.eh_frame-section-from-arm64-efi-kernel.patch @@ -0,0 +1,39 @@ +From b0e9367a147134da3599cf4d5485c0f29c93a73a Mon Sep 17 00:00:00 2001 +From: Andrey Borzenkov +Date: Mon, 30 Dec 2013 12:56:19 +0000 +Subject: [PATCH 007/112] strip .eh_frame section from arm64-efi kernel + +Fixes grub-mkimage error "relocation 0x105 is not implemented yet." +--- + ChangeLog | 4 ++++ + grub-core/Makefile.core.def | 2 +- + 2 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index 226f2a3..16372cd 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,7 @@ ++2013-12-30 Andrey Borzenkov ++ ++ * grub-core/Makefile.core.def: strip .eh_frame section for arm64-efi. ++ + 2013-12-30 Vladimir Serbinenko + + * NEWS: Add few missing entries. Correct existing ones. +diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def +index c916246..42443bc 100644 +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -66,7 +66,7 @@ kernel = { + arm_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version'; + + arm64_efi_ldflags = '-Wl,-r,-d'; +- arm64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version'; ++ arm64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version -R .eh_frame'; + + i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; + i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000'; +-- +1.8.5.3 + diff --git a/0008-IBM-client-architecture-CAS-reboot-support.patch b/0008-IBM-client-architecture-CAS-reboot-support.patch deleted file mode 100644 index f0035e5..0000000 --- a/0008-IBM-client-architecture-CAS-reboot-support.patch +++ /dev/null @@ -1,174 +0,0 @@ -From 2d1f5f8f92f230c6c1e7cf84deacb1224d8cca1a Mon Sep 17 00:00:00 2001 -From: Paulo Flabiano Smorigo -Date: Thu, 20 Sep 2012 18:07:39 -0300 -Subject: [PATCH 08/37] IBM client architecture (CAS) reboot support - -This is an implementation of IBM client architecture (CAS) reboot for GRUB. - -There are cases where the POWER firmware must reboot in order to support -specific features requested by a kernel. The kernel calls -ibm,client-architecture-support and it may either return or reboot with the new -feature set. eg: - -Calling ibm,client-architecture-support.../ -Elapsed time since release of system processors: 70959 mins 50 secs -Welcome to GRUB! - -Instead of return to the GRUB menu, it will check if the flag for CAS reboot is -set. If so, grub will automatically boot the last booted kernel using the same -parameters ---- - grub-core/kern/ieee1275/openfw.c | 62 ++++++++++++++++++++++++++++++++++++++++ - grub-core/normal/main.c | 19 ++++++++++++ - grub-core/script/execute.c | 7 +++++ - include/grub/ieee1275/ieee1275.h | 2 ++ - 4 files changed, 90 insertions(+) - -diff --git a/grub-core/kern/ieee1275/openfw.c b/grub-core/kern/ieee1275/openfw.c -index ddb7783..6db8b98 100644 ---- a/grub-core/kern/ieee1275/openfw.c -+++ b/grub-core/kern/ieee1275/openfw.c -@@ -561,3 +561,65 @@ grub_ieee1275_canonicalise_devname (const char *path) - return NULL; - } - -+/* Check if it's a CAS reboot. If so, set the script to be executed. */ -+int -+grub_ieee1275_cas_reboot (char *script) -+{ -+ grub_uint32_t ibm_ca_support_reboot; -+ grub_uint32_t ibm_fw_nbr_reboots; -+ char property_value[10]; -+ grub_ssize_t actual; -+ grub_ieee1275_ihandle_t options; -+ -+ if (grub_ieee1275_finddevice ("/options", &options) < 0) -+ return -1; -+ -+ /* Check two properties, one is enough to get cas reboot value */ -+ ibm_ca_support_reboot = 0; -+ if (grub_ieee1275_get_integer_property (grub_ieee1275_chosen, -+ "ibm,client-architecture-support-reboot", -+ &ibm_ca_support_reboot, -+ sizeof (ibm_ca_support_reboot), -+ &actual) >= 0) -+ grub_dprintf("ieee1275", "ibm,client-architecture-support-reboot: %u\n", -+ ibm_ca_support_reboot); -+ -+ ibm_fw_nbr_reboots = 0; -+ if (grub_ieee1275_get_property (options, "ibm,fw-nbr-reboots", -+ property_value, sizeof (property_value), -+ &actual) >= 0) -+ { -+ property_value[sizeof (property_value) - 1] = 0; -+ ibm_fw_nbr_reboots = (grub_uint8_t) grub_strtoul (property_value, 0, 10); -+ grub_dprintf("ieee1275", "ibm,fw-nbr-reboots: %u\n", ibm_fw_nbr_reboots); -+ } -+ -+ if (ibm_ca_support_reboot || ibm_fw_nbr_reboots) -+ { -+ if (! grub_ieee1275_get_property_length (options, "boot-last-label", &actual)) -+ { -+ if (actual > 1024) -+ script = grub_realloc (script, actual + 1); -+ grub_ieee1275_get_property (options, "boot-last-label", script, actual, -+ &actual); -+ return 0; -+ } -+ } -+ -+ grub_ieee1275_set_boot_last_label (""); -+ -+ return -1; -+} -+ -+int grub_ieee1275_set_boot_last_label (const char *text) -+{ -+ grub_ieee1275_ihandle_t options; -+ grub_ssize_t actual; -+ -+ grub_dprintf("ieee1275", "set boot_last_label (size: %u)\n", grub_strlen(text)); -+ if (! grub_ieee1275_finddevice ("/options", &options) && -+ options != (grub_ieee1275_ihandle_t) -1) -+ grub_ieee1275_set_property (options, "boot-last-label", text, -+ grub_strlen (text), &actual); -+ return 0; -+} -diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c -index 243b9d6..4ce71fc 100644 ---- a/grub-core/normal/main.c -+++ b/grub-core/normal/main.c -@@ -32,6 +32,9 @@ - #include - #include - #include -+#ifdef GRUB_MACHINE_IEEE1275 -+#include -+#endif - - GRUB_MOD_LICENSE ("GPLv3+"); - -@@ -267,6 +270,22 @@ grub_normal_execute (const char *config, int nested, int batch) - { - menu = read_config_file (config); - -+#ifdef GRUB_MACHINE_IEEE1275 -+ int boot; -+ boot = 0; -+ char *script; -+ script = grub_malloc (1024); -+ if (! grub_ieee1275_cas_reboot (script)) -+ { -+ char *dummy[1] = { NULL }; -+ if (! grub_script_execute_sourcecode (script, 0, dummy)) -+ boot = 1; -+ } -+ grub_free (script); -+ if (boot) -+ grub_command_execute ("boot", 0, 0); -+#endif -+ - /* Ignore any error. */ - grub_errno = GRUB_ERR_NONE; - } -diff --git a/grub-core/script/execute.c b/grub-core/script/execute.c -index 8f01c1b..cec9539 100644 ---- a/grub-core/script/execute.c -+++ b/grub-core/script/execute.c -@@ -27,6 +27,9 @@ - #include - #include - #include -+#ifdef GRUB_MACHINE_IEEE1275 -+#include -+#endif - - /* Max digits for a char is 3 (0xFF is 255), similarly for an int it - is sizeof (int) * 3, and one extra for a possible -ve sign. */ -@@ -892,6 +895,10 @@ grub_script_execute_sourcecode (const char *source) - grub_err_t ret = 0; - struct grub_script *parsed_script; - -+#ifdef GRUB_MACHINE_IEEE1275 -+ grub_ieee1275_set_boot_last_label (source); -+#endif -+ - while (source) - { - char *line; -diff --git a/include/grub/ieee1275/ieee1275.h b/include/grub/ieee1275/ieee1275.h -index dc54bea..35618f4 100644 ---- a/include/grub/ieee1275/ieee1275.h -+++ b/include/grub/ieee1275/ieee1275.h -@@ -233,6 +233,8 @@ int EXPORT_FUNC(grub_ieee1275_devalias_next) (struct grub_ieee1275_devalias *ali - void EXPORT_FUNC(grub_ieee1275_children_peer) (struct grub_ieee1275_devalias *alias); - void EXPORT_FUNC(grub_ieee1275_children_first) (const char *devpath, - struct grub_ieee1275_devalias *alias); -+int EXPORT_FUNC(grub_ieee1275_cas_reboot) (char *script); -+int EXPORT_FUNC(grub_ieee1275_set_boot_last_label) (const char *text); - - #define FOR_IEEE1275_DEVALIASES(alias) for (grub_ieee1275_devalias_init_iterator (&(alias)); grub_ieee1275_devalias_next (&(alias));) - --- -1.8.4.2 - diff --git a/0008-use-grub-boot-aa64.efi-for-boot-images-on-AArch64.patch b/0008-use-grub-boot-aa64.efi-for-boot-images-on-AArch64.patch new file mode 100644 index 0000000..4c0c6d9 --- /dev/null +++ b/0008-use-grub-boot-aa64.efi-for-boot-images-on-AArch64.patch @@ -0,0 +1,37 @@ +From d0bf697add07d1bcc2d4c648d66f5b49de8ba80d Mon Sep 17 00:00:00 2001 +From: Andrey Borzenkov +Date: Tue, 7 Jan 2014 10:38:54 +0400 +Subject: [PATCH 008/112] use {grub,boot}aa64.efi for boot images on AArch64 + +According to UEFI 2.4 specification, default boot file name on AArch64 +is BOOTAA64.EFI (3.4.1.1 Removable Media Boot Behavior). Also set default +GRUB image name to grubaa64.efi to match it. +--- + util/grub-install.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/util/grub-install.c b/util/grub-install.c +index 8cfe0ea..4608b80 100644 +--- a/util/grub-install.c ++++ b/util/grub-install.c +@@ -1091,7 +1091,7 @@ main (int argc, char *argv[]) + efi_file = "BOOTARM.EFI"; + break; + case GRUB_INSTALL_PLATFORM_ARM64_EFI: +- efi_file = "BOOTAARCH64.EFI"; ++ efi_file = "BOOTAA64.EFI"; + break; + default: + grub_util_error ("%s", _("You've found a bug")); +@@ -1118,7 +1118,7 @@ main (int argc, char *argv[]) + efi_file = "grubarm.efi"; + break; + case GRUB_INSTALL_PLATFORM_ARM64_EFI: +- efi_file = "grubarm64.efi"; ++ efi_file = "grubaa64.efi"; + break; + default: + efi_file = "grub.efi"; +-- +1.8.5.3 + diff --git a/0009-Add-vlan-tag-support.patch b/0009-Add-vlan-tag-support.patch deleted file mode 100644 index f879b7f..0000000 --- a/0009-Add-vlan-tag-support.patch +++ /dev/null @@ -1,186 +0,0 @@ -From f002b23fc4b892ae630d8e5cb8f0101ae7321ea5 Mon Sep 17 00:00:00 2001 -From: Paulo Flabiano Smorigo -Date: Tue, 30 Oct 2012 15:19:39 -0200 -Subject: [PATCH 09/37] Add vlan-tag support - -This patch adds support for virtual LAN (VLAN) tagging. VLAN tagging allows -multiple VLANs in a bridged network to share the same physical network link but -maintain isolation: - -http://en.wikipedia.org/wiki/IEEE_802.1Q - -This patch should fix this bugzilla: -https://bugzilla.redhat.com/show_bug.cgi?id=871563 ---- - grub-core/kern/ieee1275/init.c | 1 + - grub-core/kern/ieee1275/openfw.c | 30 ++++++++++++++++++++++++++++ - grub-core/net/ethernet.c | 42 +++++++++++++++++++++++++++++++++++++--- - include/grub/ieee1275/ieee1275.h | 1 + - include/grub/net.h | 2 ++ - 5 files changed, 73 insertions(+), 3 deletions(-) - -diff --git a/grub-core/kern/ieee1275/init.c b/grub-core/kern/ieee1275/init.c -index 89b2822..f43f6b9 100644 ---- a/grub-core/kern/ieee1275/init.c -+++ b/grub-core/kern/ieee1275/init.c -@@ -118,6 +118,7 @@ grub_machine_get_bootlocation (char **device, char **path) - char *dev, *canon; - char *ptr; - dev = grub_ieee1275_get_aliasdevname (bootpath); -+ grub_ieee1275_parse_net_options (bootpath); - canon = grub_ieee1275_canonicalise_devname (dev); - ptr = canon + grub_strlen (canon) - 1; - while (ptr > canon && (*ptr == ',' || *ptr == ':')) -diff --git a/grub-core/kern/ieee1275/openfw.c b/grub-core/kern/ieee1275/openfw.c -index 6db8b98..81276fa 100644 ---- a/grub-core/kern/ieee1275/openfw.c -+++ b/grub-core/kern/ieee1275/openfw.c -@@ -23,6 +23,7 @@ - #include - #include - #include -+#include - - enum grub_ieee1275_parse_type - { -@@ -451,6 +452,35 @@ fail: - return ret; - } - -+int -+grub_ieee1275_parse_net_options (const char *path) -+{ -+ char *comma; -+ char *args; -+ char *option = 0; -+ -+ args = grub_ieee1275_get_devargs (path); -+ if (!args) -+ /* There is no option. */ -+ return -1; -+ -+ do -+ { -+ comma = grub_strchr (args, ','); -+ if (! comma) -+ option = grub_strdup (args); -+ else -+ option = grub_strndup (args, (grub_size_t)(comma - args)); -+ args = comma + 1; -+ -+ if (! grub_strncmp(option, "vtag", 4)) -+ grub_env_set ("vlan-tag", option + grub_strlen("vtag=")); -+ -+ } while (comma); -+ -+ return 0; -+} -+ - char * - grub_ieee1275_get_device_type (const char *path) - { -diff --git a/grub-core/net/ethernet.c b/grub-core/net/ethernet.c -index c397b1b..faaca67 100644 ---- a/grub-core/net/ethernet.c -+++ b/grub-core/net/ethernet.c -@@ -23,6 +23,7 @@ - #include - #include - #include -+#include - #include - #include - -@@ -56,10 +57,19 @@ send_ethernet_packet (struct grub_net_network_level_interface *inf, - { - struct etherhdr *eth; - grub_err_t err; -+ grub_uint32_t vlantag = 0; -+ grub_uint8_t etherhdr_size; - -- COMPILE_TIME_ASSERT (sizeof (*eth) < GRUB_NET_MAX_LINK_HEADER_SIZE); -+ etherhdr_size = sizeof (*eth); -+ COMPILE_TIME_ASSERT (sizeof (*eth) + 4 < GRUB_NET_MAX_LINK_HEADER_SIZE); - -- err = grub_netbuff_push (nb, sizeof (*eth)); -+ const char *vlantag_text = grub_env_get ("vlan-tag"); -+ if (vlantag_text != 0) { -+ etherhdr_size += 4; -+ vlantag = grub_strtoul (vlantag_text, 0, 16); -+ } -+ -+ err = grub_netbuff_push (nb, etherhdr_size); - if (err) - return err; - eth = (struct etherhdr *) nb->data; -@@ -76,6 +86,19 @@ send_ethernet_packet (struct grub_net_network_level_interface *inf, - return err; - inf->card->opened = 1; - } -+ -+ /* Check if a vlan-tag is needed. */ -+ if (vlantag != 0) -+ { -+ /* Move eth type to the right */ -+ grub_memcpy((char *) nb->data + etherhdr_size - 2, -+ (char *) nb->data + etherhdr_size - 6, 2); -+ -+ /* Add the tag in the middle */ -+ grub_memcpy((char *) nb->data + etherhdr_size - 6, -+ &vlantag, 4); -+ } -+ - return inf->card->driver->send (inf->card, nb); - } - -@@ -90,10 +113,23 @@ grub_net_recv_ethernet_packet (struct grub_net_buff *nb, - grub_net_link_level_address_t hwaddress; - grub_net_link_level_address_t src_hwaddress; - grub_err_t err; -+ grub_uint8_t etherhdr_size = sizeof (*eth); -+ -+ grub_uint16_t vlantag_identifier = 0; -+ grub_memcpy (&vlantag_identifier, nb->data + etherhdr_size - 2, 2); -+ -+ /* Check if a vlan-tag is present. */ -+ if (vlantag_identifier == VLANTAG_IDENTIFIER) -+ { -+ etherhdr_size += 4; -+ /* Move eth type to the original position */ -+ grub_memcpy((char *) nb->data + etherhdr_size - 6, -+ (char *) nb->data + etherhdr_size - 2, 2); -+ } - - eth = (struct etherhdr *) nb->data; - type = grub_be_to_cpu16 (eth->type); -- err = grub_netbuff_pull (nb, sizeof (*eth)); -+ err = grub_netbuff_pull (nb, etherhdr_size); - if (err) - return err; - -diff --git a/include/grub/ieee1275/ieee1275.h b/include/grub/ieee1275/ieee1275.h -index 35618f4..2b64a92 100644 ---- a/include/grub/ieee1275/ieee1275.h -+++ b/include/grub/ieee1275/ieee1275.h -@@ -235,6 +235,7 @@ void EXPORT_FUNC(grub_ieee1275_children_first) (const char *devpath, - struct grub_ieee1275_devalias *alias); - int EXPORT_FUNC(grub_ieee1275_cas_reboot) (char *script); - int EXPORT_FUNC(grub_ieee1275_set_boot_last_label) (const char *text); -+int EXPORT_FUNC(grub_ieee1275_parse_net_options) (const char *path); - - #define FOR_IEEE1275_DEVALIASES(alias) for (grub_ieee1275_devalias_init_iterator (&(alias)); grub_ieee1275_devalias_next (&(alias));) - -diff --git a/include/grub/net.h b/include/grub/net.h -index de6259e..c8ce8db 100644 ---- a/include/grub/net.h -+++ b/include/grub/net.h -@@ -533,4 +533,6 @@ extern char *grub_net_default_server; - #define GRUB_NET_TRIES 40 - #define GRUB_NET_INTERVAL 400 - -+#define VLANTAG_IDENTIFIER 0x8100 -+ - #endif /* ! GRUB_NET_HEADER */ --- -1.8.4.2 - diff --git a/0009-fix-32-bit-compilation-on-MinGW-w64.patch b/0009-fix-32-bit-compilation-on-MinGW-w64.patch new file mode 100644 index 0000000..3b0234f --- /dev/null +++ b/0009-fix-32-bit-compilation-on-MinGW-w64.patch @@ -0,0 +1,45 @@ +From 5a062ab806006fd9f1d9268ddc7eb706782a1c22 Mon Sep 17 00:00:00 2001 +From: Andrey Borzenkov +Date: Tue, 7 Jan 2014 18:43:02 +0400 +Subject: [PATCH 009/112] fix 32 bit compilation on MinGW-w64 + +Use _FILE_OFFSET_BITS macro to distinguish between native MinGW and +32 bit under MinGW-64. The latter does not require fseeko/ftello +redefinition which it already does in case of _FILE_OFFSET_BITS=64. +--- + ChangeLog | 5 +++++ + include/grub/osdep/hostfile_windows.h | 3 +++ + 2 files changed, 8 insertions(+) + +diff --git a/ChangeLog b/ChangeLog +index 16372cd..3489d53 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,8 @@ ++2014-01-07 Andrey Borzenkov ++ ++ * include/grub/osdep/hostfile_windows.h: Do not redefine fseeko/ftello ++ on MinGW-64 when compiling for 32 bits. ++ + 2013-12-30 Andrey Borzenkov + + * grub-core/Makefile.core.def: strip .eh_frame section for arm64-efi. +diff --git a/include/grub/osdep/hostfile_windows.h b/include/grub/osdep/hostfile_windows.h +index 36615b2..79efcfa 100644 +--- a/include/grub/osdep/hostfile_windows.h ++++ b/include/grub/osdep/hostfile_windows.h +@@ -69,8 +69,11 @@ enum grub_util_fd_open_flags_t + + #if defined (__MINGW32__) && !defined (__MINGW64__) + ++/* 32 bit on MinGW-64 already redefines them if _FILE_OFFSET_BITS=64 */ ++#if !defined(_FILE_OFFSET_BITS) + #define fseeko fseeko64 + #define ftello ftello64 ++#endif + + #endif + +-- +1.8.5.3 + diff --git a/0010-Add-X-option-to-printf-functions.patch b/0010-Add-X-option-to-printf-functions.patch deleted file mode 100644 index 984f3ef..0000000 --- a/0010-Add-X-option-to-printf-functions.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 5541dfb70397abc279cf4cb858eb9bf76bceadbd Mon Sep 17 00:00:00 2001 -From: Paulo Flabiano Smorigo -Date: Tue, 27 Nov 2012 16:58:39 -0200 -Subject: [PATCH 10/37] Add %X option to printf functions. - ---- - grub-core/kern/misc.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c -index 54db2e1..50f7f53 100644 ---- a/grub-core/kern/misc.c -+++ b/grub-core/kern/misc.c -@@ -759,7 +759,7 @@ __umoddi3 (grub_uint64_t a, grub_uint64_t b) - static inline char * - grub_lltoa (char *str, int c, unsigned long long n) - { -- unsigned base = (c == 'x') ? 16 : 10; -+ unsigned base = ((c == 'x') || (c == 'X')) ? 16 : 10; - char *p; - - if ((long long) n < 0 && c == 'd') -@@ -774,7 +774,7 @@ grub_lltoa (char *str, int c, unsigned long long n) - do - { - unsigned d = (unsigned) (n & 0xf); -- *p++ = (d > 9) ? d + 'a' - 10 : d + '0'; -+ *p++ = (d > 9) ? d + ((c == 'x') ? 'a' : 'A') - 10 : d + '0'; - } - while (n >>= 4); - else -@@ -847,6 +847,7 @@ parse_printf_args (const char *fmt0, struct printf_args *args, - { - case 'p': - case 'x': -+ case 'X': - case 'u': - case 'd': - case 'c': -@@ -927,6 +928,7 @@ parse_printf_args (const char *fmt0, struct printf_args *args, - switch (c) - { - case 'x': -+ case 'X': - case 'u': - args->ptr[curn].type = UNSIGNED_INT + longfmt; - break; -@@ -1064,6 +1066,7 @@ grub_vsnprintf_real (char *str, grub_size_t max_len, const char *fmt0, - c = 'x'; - /* Fall through. */ - case 'x': -+ case 'X': - case 'u': - case 'd': - { --- -1.8.4.2 - diff --git a/0010-Change-grub-mkrescue-to-use-bootaa64.efi-too.patch b/0010-Change-grub-mkrescue-to-use-bootaa64.efi-too.patch new file mode 100644 index 0000000..e7810a3 --- /dev/null +++ b/0010-Change-grub-mkrescue-to-use-bootaa64.efi-too.patch @@ -0,0 +1,44 @@ +From 510402f407ab09f1e4892fbc33833818d6561eeb Mon Sep 17 00:00:00 2001 +From: Andrey Borzenkov +Date: Tue, 7 Jan 2014 20:34:25 +0400 +Subject: [PATCH 010/112] Change grub-mkrescue to use bootaa64.efi too + +Also add ChangeLog entry for previous change. +--- + ChangeLog | 7 +++++++ + util/grub-mkrescue.c | 2 +- + 2 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index 3489d53..bb73343 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,12 @@ + 2014-01-07 Andrey Borzenkov + ++ * util/grub-install.c: Use bootaa64.efi instead of bootaarch64.efi on ++ arm64 to comply with EFI specification. Also use grubaa64.efi for ++ consistency. ++ * util/grub-mkrescue.c: Change to use bootaa64.efi too. ++ ++2014-01-07 Andrey Borzenkov ++ + * include/grub/osdep/hostfile_windows.h: Do not redefine fseeko/ftello + on MinGW-64 when compiling for 32 bits. + +diff --git a/util/grub-mkrescue.c b/util/grub-mkrescue.c +index 317879d..0d03e55 100644 +--- a/util/grub-mkrescue.c ++++ b/util/grub-mkrescue.c +@@ -663,7 +663,7 @@ main (int argc, char *argv[]) + make_image_fwdisk_abs (GRUB_INSTALL_PLATFORM_ARM_EFI, "arm-efi", imgname); + free (imgname); + +- imgname = grub_util_path_concat (2, efidir_efi_boot, "bootaarch64.efi"); ++ imgname = grub_util_path_concat (2, efidir_efi_boot, "bootaa64.efi"); + make_image_fwdisk_abs (GRUB_INSTALL_PLATFORM_ARM64_EFI, "arm64-efi", + imgname); + free (imgname); +-- +1.8.5.3 + diff --git a/0011-DHCP-client-ID-and-UUID-options-added.patch b/0011-DHCP-client-ID-and-UUID-options-added.patch deleted file mode 100644 index a001581..0000000 --- a/0011-DHCP-client-ID-and-UUID-options-added.patch +++ /dev/null @@ -1,110 +0,0 @@ -From 35135f5d14fb0f2dc86f76874973f9c5f34f4255 Mon Sep 17 00:00:00 2001 -From: Paulo Flabiano Smorigo -Date: Tue, 27 Nov 2012 17:18:53 -0200 -Subject: [PATCH 11/37] DHCP client ID and UUID options added. - ---- - grub-core/net/bootp.c | 52 +++++++++++++++++++++++++++++++++++++++++++-------- - include/grub/net.h | 2 ++ - 2 files changed, 46 insertions(+), 8 deletions(-) - -diff --git a/grub-core/net/bootp.c b/grub-core/net/bootp.c -index c14e9de..656bb71 100644 ---- a/grub-core/net/bootp.c -+++ b/grub-core/net/bootp.c -@@ -60,6 +60,14 @@ set_env_limn_ro (const char *intername, const char *suffix, - grub_free (varvalue); - } - -+static char -+hexdigit (grub_uint8_t val) -+{ -+ if (val < 10) -+ return val + '0'; -+ return val + 'a' - 10; -+} -+ - static void - parse_dhcp_vendor (const char *name, const void *vend, int limit, int *mask) - { -@@ -90,6 +98,9 @@ parse_dhcp_vendor (const char *name, const void *vend, int limit, int *mask) - - taglength = *ptr++; - -+ grub_dprintf("net", "DHCP option %u (0x%02x) found with length %u.\n", -+ tagtype, tagtype, taglength); -+ - switch (tagtype) - { - case GRUB_NET_BOOTP_NETMASK: -@@ -151,6 +162,39 @@ parse_dhcp_vendor (const char *name, const void *vend, int limit, int *mask) - set_env_limn_ro (name, "extensionspath", (const char *) ptr, taglength); - break; - -+ case GRUB_NET_BOOTP_CLIENT_ID: -+ set_env_limn_ro (name, "clientid", (char *) ptr, taglength); -+ break; -+ -+ case GRUB_NET_BOOTP_CLIENT_UUID: -+ { -+ if (taglength != 17) -+ break; -+ -+ /* The format is 9cfe245e-d0c8-bd45-a79f-54ea5fbd3d97 */ -+ -+ ptr += 1; -+ taglength -= 1; -+ -+ char *val = grub_malloc (2 * taglength + 4 + 1); -+ int i = 0; -+ int j = 0; -+ for (i = 0; i < taglength; i++) -+ { -+ val[2 * i + j] = hexdigit (ptr[i] >> 4); -+ val[2 * i + 1 + j] = hexdigit (ptr[i] & 0xf); -+ -+ if ((i == 3) || (i == 5) || (i == 7) || (i == 9)) -+ { -+ j++; -+ val[2 * i + 1+ j] = '-'; -+ } -+ } -+ -+ set_env_limn_ro (name, "clientuuid", (char *) val, 2 * taglength + 4); -+ } -+ break; -+ - /* If you need any other options please contact GRUB - development team. */ - } -@@ -319,14 +363,6 @@ grub_net_process_dhcp (struct grub_net_buff *nb, - } - } - --static char --hexdigit (grub_uint8_t val) --{ -- if (val < 10) -- return val + '0'; -- return val + 'a' - 10; --} -- - static grub_err_t - grub_cmd_dhcpopt (struct grub_command *cmd __attribute__ ((unused)), - int argc, char **args) -diff --git a/include/grub/net.h b/include/grub/net.h -index c8ce8db..ea4978d 100644 ---- a/include/grub/net.h -+++ b/include/grub/net.h -@@ -433,6 +433,8 @@ enum - GRUB_NET_BOOTP_DOMAIN = 0x0f, - GRUB_NET_BOOTP_ROOT_PATH = 0x11, - GRUB_NET_BOOTP_EXTENSIONS_PATH = 0x12, -+ GRUB_NET_BOOTP_CLIENT_ID = 0x3d, -+ GRUB_NET_BOOTP_CLIENT_UUID = 0x61, - GRUB_NET_BOOTP_END = 0xff - }; - --- -1.8.4.2 - diff --git a/0011-arm64-set-correct-length-of-device-path-end-entry.patch b/0011-arm64-set-correct-length-of-device-path-end-entry.patch new file mode 100644 index 0000000..b740427 --- /dev/null +++ b/0011-arm64-set-correct-length-of-device-path-end-entry.patch @@ -0,0 +1,43 @@ +From c02a376131f807a04ed2cf8e9160a461b1568854 Mon Sep 17 00:00:00 2001 +From: Leif Lindholm +Date: Tue, 7 Jan 2014 17:52:50 +0000 +Subject: [PATCH 011/112] arm64: set correct length of device path end entry + +The length of the Device Path End entry in the grub_linux_boot() +function was incorrectly set to 0. This triggers an assert failure +in debug builds of Tianocore. + +Set it to sizeof (grub_efi_device_path_t). +--- + ChangeLog | 4 ++++ + grub-core/loader/arm64/linux.c | 2 +- + 2 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index bb73343..13f3273 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,7 @@ ++2014-01-07 Leif Lindholm ++ ++ * grub-core/loader/arm64/linux.c: correctly set device path end length. ++ + 2014-01-07 Andrey Borzenkov + + * util/grub-install.c: Use bootaa64.efi instead of bootaarch64.efi on +diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c +index 9d15aad..75ad871 100644 +--- a/grub-core/loader/arm64/linux.c ++++ b/grub-core/loader/arm64/linux.c +@@ -268,7 +268,7 @@ grub_linux_boot (void) + + mempath[1].header.type = GRUB_EFI_END_DEVICE_PATH_TYPE; + mempath[1].header.subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; +- mempath[1].header.length = 0; ++ mempath[1].header.length = sizeof (grub_efi_device_path_t); + + b = grub_efi_system_table->boot_services; + status = b->load_image (0, grub_efi_image_handle, +-- +1.8.5.3 + diff --git a/0012-Makefile.util.def-grub-macbless-Change-mansection-to.patch b/0012-Makefile.util.def-grub-macbless-Change-mansection-to.patch new file mode 100644 index 0000000..b954ce6 --- /dev/null +++ b/0012-Makefile.util.def-grub-macbless-Change-mansection-to.patch @@ -0,0 +1,39 @@ +From efb1d140dd18b4e1141e443c96dfd87e613e8dad Mon Sep 17 00:00:00 2001 +From: Colin Watson +Date: Wed, 8 Jan 2014 11:05:20 +0000 +Subject: [PATCH 012/112] * Makefile.util.def (grub-macbless): Change + mansection to 8. + +--- + ChangeLog | 4 ++++ + Makefile.util.def | 2 +- + 2 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index 13f3273..61f33ce 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,7 @@ ++2014-01-08 Colin Watson ++ ++ * Makefile.util.def (grub-macbless): Change mansection to 8. ++ + 2014-01-07 Leif Lindholm + + * grub-core/loader/arm64/linux.c: correctly set device path end length. +diff --git a/Makefile.util.def b/Makefile.util.def +index 985e76c..3c99be2 100644 +--- a/Makefile.util.def ++++ b/Makefile.util.def +@@ -405,7 +405,7 @@ program = { + program = { + name = grub-macbless; + installdir = sbin; +- mansection = 1; ++ mansection = 8; + common = util/grub-macbless.c; + common = grub-core/osdep/init.c; + common = grub-core/kern/emu/argp_common.c; +-- +1.8.5.3 + diff --git a/0012-Search-for-specific-config-file-for-netboot.patch b/0012-Search-for-specific-config-file-for-netboot.patch deleted file mode 100644 index acb7580..0000000 --- a/0012-Search-for-specific-config-file-for-netboot.patch +++ /dev/null @@ -1,203 +0,0 @@ -From 464d6b12534735a09c2e634c4cab99bc186d34ca Mon Sep 17 00:00:00 2001 -From: Paulo Flabiano Smorigo -Date: Tue, 27 Nov 2012 17:22:07 -0200 -Subject: [PATCH 12/37] Search for specific config file for netboot - -This patch implements a search for a specific configuration when the config -file is on a remoteserver. It uses the following order: - 1) DHCP client UUID option. - 2) MAC address (in lower case hexadecimal with dash separators); - 3) IP (in upper case hexadecimal) or IPv6; - 4) The original grub.cfg file. - -This procedure is similar to what is used by pxelinux and yaboot: -http://www.syslinux.org/wiki/index.php/PXELINUX#config - -This should close the bugzilla: -https://bugzilla.redhat.com/show_bug.cgi?id=873406 ---- - grub-core/net/net.c | 118 ++++++++++++++++++++++++++++++++++++++++++++++++ - grub-core/normal/main.c | 18 ++++++-- - include/grub/net.h | 3 ++ - 3 files changed, 135 insertions(+), 4 deletions(-) - -diff --git a/grub-core/net/net.c b/grub-core/net/net.c -index 0e57e93..f1eefe0 100644 ---- a/grub-core/net/net.c -+++ b/grub-core/net/net.c -@@ -1663,6 +1663,124 @@ grub_net_restore_hw (void) - return GRUB_ERR_NONE; - } - -+grub_err_t -+grub_net_search_configfile (char *config) -+{ -+ grub_size_t config_len; -+ char *suffix; -+ -+ auto int search_through (grub_size_t num_tries, grub_size_t slice_size); -+ int search_through (grub_size_t num_tries, grub_size_t slice_size) -+ { -+ while (num_tries-- > 0) -+ { -+ grub_dprintf ("net", "probe %s\n", config); -+ -+ grub_file_t file; -+ file = grub_file_open (config); -+ -+ if (file) -+ { -+ grub_file_close (file); -+ grub_dprintf ("net", "found!\n"); -+ return 0; -+ } -+ else -+ { -+ if (grub_errno == GRUB_ERR_IO) -+ grub_errno = GRUB_ERR_NONE; -+ } -+ -+ if (grub_strlen (suffix) < slice_size) -+ break; -+ -+ config[grub_strlen (config) - slice_size] = '\0'; -+ } -+ -+ return 1; -+ } -+ -+ config_len = grub_strlen (config); -+ config[config_len] = '-'; -+ suffix = config + config_len + 1; -+ -+ struct grub_net_network_level_interface *inf; -+ FOR_NET_NETWORK_LEVEL_INTERFACES (inf) -+ { -+ /* By the Client UUID. */ -+ -+ char client_uuid_var[sizeof ("net_") + grub_strlen (inf->name) + -+ sizeof ("_clientuuid") + 1]; -+ grub_snprintf (client_uuid_var, sizeof (client_uuid_var), -+ "net_%s_clientuuid", inf->name); -+ -+ const char *client_uuid; -+ client_uuid = grub_env_get (client_uuid_var); -+ -+ if (client_uuid) -+ { -+ grub_strcpy (suffix, client_uuid); -+ if (search_through (1, 0) == 0) return GRUB_ERR_NONE; -+ } -+ -+ /* By the MAC address. */ -+ -+ /* Add ethernet type */ -+ grub_strcpy (suffix, "01-"); -+ -+ grub_net_hwaddr_to_str (&inf->hwaddress, suffix + 3); -+ -+ char *ptr; -+ for (ptr = suffix; *ptr; ptr++) -+ if (*ptr == ':') -+ *ptr = '-'; -+ -+ if (search_through (1, 0) == 0) return GRUB_ERR_NONE; -+ -+ /* By IP address */ -+ -+ switch ((&inf->address)->type) -+ { -+ case GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV4: -+ { -+ grub_uint32_t n = grub_be_to_cpu32 ((&inf->address)->ipv4); -+ grub_snprintf (suffix, GRUB_NET_MAX_STR_ADDR_LEN, "%02X%02X%02X%02X", \ -+ ((n >> 24) & 0xff), ((n >> 16) & 0xff), \ -+ ((n >> 8) & 0xff), ((n >> 0) & 0xff)); -+ -+ if (search_through (8, 1) == 0) return GRUB_ERR_NONE; -+ break; -+ } -+ case GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV6: -+ { -+ char buf[GRUB_NET_MAX_STR_ADDR_LEN]; -+ struct grub_net_network_level_address base; -+ base.type = GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV6; -+ grub_memcpy (&base.ipv6, ((&inf->address)->ipv6), 16); -+ grub_net_addr_to_str (&base, buf); -+ -+ for (ptr = buf; *ptr; ptr++) -+ if (*ptr == ':') -+ *ptr = '-'; -+ -+ grub_snprintf (suffix, GRUB_NET_MAX_STR_ADDR_LEN, "%s", buf); -+ if (search_through (1, 0) == 0) return GRUB_ERR_NONE; -+ break; -+ } -+ case GRUB_NET_NETWORK_LEVEL_PROTOCOL_DHCP_RECV: -+ return grub_error (GRUB_ERR_BUG, "shouldn't reach here"); -+ default: -+ return grub_error (GRUB_ERR_BUG, -+ "unsupported address type %d", (&inf->address)->type); -+ } -+ } -+ -+ /* Remove the remaining minus sign at the end. */ -+ config[config_len] = '\0'; -+ -+ return GRUB_ERR_NONE; -+} -+ - static struct grub_preboot *fini_hnd; - - static grub_command_t cmd_addaddr, cmd_deladdr, cmd_addroute, cmd_delroute; -diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c -index 4ce71fc..ac4ee63 100644 ---- a/grub-core/normal/main.c -+++ b/grub-core/normal/main.c -@@ -32,6 +32,7 @@ - #include - #include - #include -+#include - #ifdef GRUB_MACHINE_IEEE1275 - #include - #endif -@@ -357,10 +358,19 @@ grub_cmd_normal (struct grub_command *cmd __attribute__ ((unused)), - - prefix = grub_env_get ("prefix"); - if (prefix) -- { -- config = grub_xasprintf ("%s/grub.cfg", prefix); -- if (! config) -- goto quit; -+ { -+ grub_size_t config_len; -+ config_len = grub_strlen (prefix) + -+ sizeof ("/grub.cfg-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"); -+ config = grub_malloc (config_len); -+ -+ if (! config) -+ goto quit; -+ -+ grub_snprintf (config, config_len, "%s/grub.cfg", prefix); -+ -+ if (grub_strncmp (prefix + 1, "tftp", sizeof ("tftp") - 1) == 0) -+ grub_net_search_configfile (config); - - grub_enter_normal_mode (config); - grub_free (config); -diff --git a/include/grub/net.h b/include/grub/net.h -index ea4978d..314a610 100644 ---- a/include/grub/net.h -+++ b/include/grub/net.h -@@ -537,4 +537,7 @@ extern char *grub_net_default_server; - - #define VLANTAG_IDENTIFIER 0x8100 - -+grub_err_t -+grub_net_search_configfile (char *config); -+ - #endif /* ! GRUB_NET_HEADER */ --- -1.8.4.2 - diff --git a/0013-add-part_apple-to-EFI-rescue-image-to-fix-missing-pr.patch b/0013-add-part_apple-to-EFI-rescue-image-to-fix-missing-pr.patch new file mode 100644 index 0000000..0c8a14e --- /dev/null +++ b/0013-add-part_apple-to-EFI-rescue-image-to-fix-missing-pr.patch @@ -0,0 +1,48 @@ +From f887a3908a5f3ad124e6f447c64514e5e45a9192 Mon Sep 17 00:00:00 2001 +From: Andrey Borzenkov +Date: Sun, 12 Jan 2014 15:29:21 +0400 +Subject: [PATCH 013/112] add part_apple to EFI rescue image to fix missing + prefix + +On Mac rescue image is booted from HFS+ partition, so bootpath looks like +/ACPI(a0341d0,0)/PCI(1,1f)/ATAPI(0,0,0)/HD(3,5d1,ca3,0000000000000000,20,0)/EndEntire + +grub fails to find device for this path because it cannot scan partition +table. The simplest fix is to add part_apple by default. +--- + util/grub-mkrescue.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/util/grub-mkrescue.c b/util/grub-mkrescue.c +index 0d03e55..34e0b7a 100644 +--- a/util/grub-mkrescue.c ++++ b/util/grub-mkrescue.c +@@ -653,11 +653,15 @@ main (int argc, char *argv[]) + make_image_fwdisk_abs (GRUB_INSTALL_PLATFORM_IA64_EFI, "ia64-efi", imgname); + free (imgname); + ++ grub_install_push_module ("part_apple"); + img64 = grub_util_path_concat (2, efidir_efi_boot, "bootx64.efi"); + make_image_fwdisk_abs (GRUB_INSTALL_PLATFORM_X86_64_EFI, "x86_64-efi", img64); ++ grub_install_pop_module (); + ++ grub_install_push_module ("part_apple"); + img32 = grub_util_path_concat (2, efidir_efi_boot, "bootia32.efi"); + make_image_fwdisk_abs (GRUB_INSTALL_PLATFORM_I386_EFI, "i386-efi", img32); ++ grub_install_pop_module (); + + imgname = grub_util_path_concat (2, efidir_efi_boot, "bootarm.efi"); + make_image_fwdisk_abs (GRUB_INSTALL_PLATFORM_ARM_EFI, "arm-efi", imgname); +@@ -707,7 +711,9 @@ main (int argc, char *argv[]) + free (efidir); + } + ++ grub_install_push_module ("part_apple"); + make_image_fwdisk (GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275, "powerpc-ieee1275", "powerpc-ieee1275/core.elf"); ++ grub_install_pop_module (); + + if (source_dirs[GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275]) + { +-- +1.8.5.3 + diff --git a/0013-blscfg-add-blscfg-module-to-parse-Boot-Loader-Specif.patch b/0013-blscfg-add-blscfg-module-to-parse-Boot-Loader-Specif.patch deleted file mode 100644 index 51c5027..0000000 --- a/0013-blscfg-add-blscfg-module-to-parse-Boot-Loader-Specif.patch +++ /dev/null @@ -1,251 +0,0 @@ -From 2fc621a2a9869ee83269a0b7a41c40b04fe8258e Mon Sep 17 00:00:00 2001 -From: Fedora Ninjas -Date: Tue, 22 Jan 2013 06:31:38 +0100 -Subject: [PATCH 13/37] blscfg: add blscfg module to parse Boot Loader - Specification snippets - -http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec - -Works like this: - - insmod blscfg - bls_import - -Done! You should now have menu items for your snippets in place. - -Signed-off-by: Peter Jones ---- - grub-core/Makefile.core.def | 8 ++ - grub-core/commands/blscfg.c | 201 ++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 209 insertions(+) - create mode 100644 grub-core/commands/blscfg.c - -diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def -index 8c246c6..25d80ee 100644 ---- a/grub-core/Makefile.core.def -+++ b/grub-core/Makefile.core.def -@@ -747,6 +747,14 @@ module = { - }; - - module = { -+ name = blscfg; -+ common = commands/blscfg.c; -+ enable = i386_efi; -+ enable = x86_64_efi; -+ enable = i386_pc; -+}; -+ -+module = { - name = boot; - common = commands/boot.c; - i386_pc = lib/i386/pc/biosnum.c; -diff --git a/grub-core/commands/blscfg.c b/grub-core/commands/blscfg.c -new file mode 100644 -index 0000000..4274aca ---- /dev/null -+++ b/grub-core/commands/blscfg.c -@@ -0,0 +1,201 @@ -+/*-*- Mode: C; c-basic-offset: 2; indent-tabs-mode: t -*-*/ -+ -+/* bls.c - implementation of the boot loader spec */ -+ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * -+ * 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 . -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+GRUB_MOD_LICENSE ("GPLv3+"); -+ -+#ifdef GRUB_MACHINE_EFI -+#define GRUB_LINUX_CMD "linuxefi" -+#define GRUB_INITRD_CMD "initrdefi" -+#define GRUB_BLS_CONFIG_PATH "/EFI/fedora/loader/entries/" -+#define GRUB_BOOT_DEVICE "($boot)" -+#else -+#define GRUB_LINUX_CMD "linux" -+#define GRUB_INITRD_CMD "initrd" -+#define GRUB_BLS_CONFIG_PATH "/loader/entries/" -+#define GRUB_BOOT_DEVICE "($root)" -+#endif -+ -+static int parse_entry ( -+ const char *filename, -+ const struct grub_dirhook_info *info __attribute__ ((unused)), -+ void *data __attribute__ ((unused))) -+{ -+ grub_size_t n; -+ char *p; -+ grub_file_t f = NULL; -+ grub_off_t sz; -+ char *title = NULL, *options = NULL, *clinux = NULL, *initrd = NULL, *src = NULL; -+ const char *args[2] = { NULL, NULL }; -+ -+ if (filename[0] == '.') -+ return 0; -+ -+ n = grub_strlen (filename); -+ if (n <= 5) -+ return 0; -+ -+ if (grub_strcmp (filename + n - 5, ".conf") != 0) -+ return 0; -+ -+ p = grub_xasprintf (GRUB_BLS_CONFIG_PATH "%s", filename); -+ -+ f = grub_file_open (p); -+ if (!f) -+ goto finish; -+ -+ sz = grub_file_size (f); -+ if (sz == GRUB_FILE_SIZE_UNKNOWN || sz > 1024*1024) -+ goto finish; -+ -+ for (;;) -+ { -+ char *buf; -+ -+ buf = grub_file_getline (f); -+ if (!buf) -+ break; -+ -+ if (grub_strncmp (buf, "title ", 6) == 0) -+ { -+ grub_free (title); -+ title = grub_strdup (buf + 6); -+ if (!title) -+ goto finish; -+ } -+ else if (grub_strncmp (buf, "options ", 8) == 0) -+ { -+ grub_free (options); -+ options = grub_strdup (buf + 8); -+ if (!options) -+ goto finish; -+ } -+ else if (grub_strncmp (buf, "linux ", 6) == 0) -+ { -+ grub_free (clinux); -+ clinux = grub_strdup (buf + 6); -+ if (!clinux) -+ goto finish; -+ } -+ else if (grub_strncmp (buf, "initrd ", 7) == 0) -+ { -+ grub_free (initrd); -+ initrd = grub_strdup (buf + 7); -+ if (!initrd) -+ goto finish; -+ } -+ -+ grub_free(buf); -+ } -+ -+ if (!linux) -+ { -+ grub_printf ("Skipping file %s with no 'linux' key.", p); -+ goto finish; -+ } -+ -+ args[0] = title ? title : filename; -+ -+ src = grub_xasprintf ("load_video\n" -+ "set gfx_payload=keep\n" -+ "insmod gzio\n" -+ GRUB_LINUX_CMD " %s%s%s%s\n" -+ "%s%s%s%s", -+ GRUB_BOOT_DEVICE, clinux, options ? " " : "", options ? options : "", -+ initrd ? GRUB_INITRD_CMD " " : "", initrd ? GRUB_BOOT_DEVICE : "", initrd ? initrd : "", initrd ? "\n" : ""); -+ -+ grub_normal_add_menu_entry (1, args, NULL, NULL, "bls", NULL, NULL, src, 0); -+ -+finish: -+ grub_free (p); -+ grub_free (title); -+ grub_free (options); -+ grub_free (clinux); -+ grub_free (initrd); -+ grub_free (src); -+ -+ if (f) -+ grub_file_close (f); -+ -+ return 0; -+} -+ -+static grub_err_t -+grub_cmd_bls_import (grub_extcmd_context_t ctxt __attribute__ ((unused)), -+ int argc __attribute__ ((unused)), -+ char **args __attribute__ ((unused))) -+{ -+ grub_fs_t fs; -+ grub_device_t dev; -+ static grub_err_t r; -+ const char *devid; -+ -+ devid = grub_env_get ("root"); -+ if (!devid) -+ return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"), "root"); -+ -+ dev = grub_device_open (devid); -+ if (!dev) -+ return grub_errno; -+ -+ fs = grub_fs_probe (dev); -+ if (!fs) -+ { -+ r = grub_errno; -+ goto finish; -+ } -+ -+ r = fs->dir (dev, GRUB_BLS_CONFIG_PATH, parse_entry, NULL); -+ -+finish: -+ if (dev) -+ grub_device_close (dev); -+ -+ return r; -+} -+ -+static grub_extcmd_t cmd; -+ -+GRUB_MOD_INIT(bls) -+{ -+ cmd = grub_register_extcmd ("bls_import", -+ grub_cmd_bls_import, -+ 0, -+ NULL, -+ N_("Import Boot Loader Specification snippets."), -+ NULL); -+} -+ -+GRUB_MOD_FINI(bls) -+{ -+ grub_unregister_extcmd (cmd); -+} --- -1.8.4.2 - diff --git a/0014-Move-bash-completion-script-922997.patch b/0014-Move-bash-completion-script-922997.patch deleted file mode 100644 index 483a6ec..0000000 --- a/0014-Move-bash-completion-script-922997.patch +++ /dev/null @@ -1,26 +0,0 @@ -From aa984a032856f825c07fc8112f92582e0b483ebb Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Wed, 3 Apr 2013 14:35:34 -0400 -Subject: [PATCH 14/37] Move bash completion script (#922997) - -Apparently these go in a new place now. ---- - util/bash-completion.d/Makefile.am | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/util/bash-completion.d/Makefile.am b/util/bash-completion.d/Makefile.am -index 136287c..0bcdb06 100644 ---- a/util/bash-completion.d/Makefile.am -+++ b/util/bash-completion.d/Makefile.am -@@ -6,7 +6,7 @@ EXTRA_DIST = $(bash_completion_source) - - CLEANFILES = $(bash_completion_script) config.log - --bashcompletiondir = $(sysconfdir)/bash_completion.d -+bashcompletiondir = $(datarootdir)/bash-completion/completions - bashcompletion_DATA = $(bash_completion_script) - - $(bash_completion_script): $(bash_completion_source) $(top_builddir)/config.status --- -1.8.4.2 - diff --git a/0014-freebsd-hostdisk.c-is-only-ever-compiled-on-FreeBSD.patch b/0014-freebsd-hostdisk.c-is-only-ever-compiled-on-FreeBSD.patch new file mode 100644 index 0000000..cc899a3 --- /dev/null +++ b/0014-freebsd-hostdisk.c-is-only-ever-compiled-on-FreeBSD.patch @@ -0,0 +1,48 @@ +From 1ce3cb44b6488abe1ae0eb58902a5e968ee9aca8 Mon Sep 17 00:00:00 2001 +From: Colin Watson +Date: Fri, 17 Jan 2014 02:30:52 +0000 +Subject: [PATCH 014/112] freebsd/hostdisk.c is only ever compiled on FreeBSD + +* grub-core/osdep/freebsd/hostdisk.c (grub_util_fd_open): Remove +redundant preprocessor conditional. +--- + ChangeLog | 5 +++++ + grub-core/osdep/freebsd/hostdisk.c | 2 -- + 2 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 61f33ce..4268e76 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,8 @@ ++2014-01-17 Colin Watson ++ ++ * grub-core/osdep/freebsd/hostdisk.c (grub_util_fd_open): Remove ++ redundant preprocessor conditional. ++ + 2014-01-08 Colin Watson + + * Makefile.util.def (grub-macbless): Change mansection to 8. +diff --git a/grub-core/osdep/freebsd/hostdisk.c b/grub-core/osdep/freebsd/hostdisk.c +index bd5fddb..eb202dc 100644 +--- a/grub-core/osdep/freebsd/hostdisk.c ++++ b/grub-core/osdep/freebsd/hostdisk.c +@@ -108,7 +108,6 @@ grub_util_fd_open (const char *os_dev, int flags) + + ret = open (os_dev, flags, S_IROTH | S_IRGRP | S_IRUSR | S_IWUSR); + +-#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + if (! (sysctl_oldflags & 0x10) + && sysctlbyname ("kern.geom.debugflags", NULL , 0, &sysctl_oldflags, sysctl_size)) + { +@@ -116,7 +115,6 @@ grub_util_fd_open (const char *os_dev, int flags) + close (ret); + return GRUB_UTIL_FD_INVALID; + } +-#endif + + return ret; + } +-- +1.8.5.3 + diff --git a/0015-Prefer-more-portable-test-1-constructs.patch b/0015-Prefer-more-portable-test-1-constructs.patch new file mode 100644 index 0000000..9a317a3 --- /dev/null +++ b/0015-Prefer-more-portable-test-1-constructs.patch @@ -0,0 +1,109 @@ +From ae7cb4e6c3d74ddc3c3e61e62380d1807358a901 Mon Sep 17 00:00:00 2001 +From: Colin Watson +Date: Fri, 17 Jan 2014 15:24:50 +0000 +Subject: [PATCH 015/112] Prefer more portable test(1) constructs + +* util/grub.d/00_header.in (make_timeout): Use && rather than test +-a. +* util/grub.d/10_windows.in: Likewise. +* util/grub.d/10_netbsd.in (netbsd_load_fs_module): Use || rather +than test -o. +* util/grub.d/30_os-prober.in: Use && rather than test -a, and || +rather than test -o. +--- + ChangeLog | 12 +++++++++++- + util/grub.d/00_header.in | 2 +- + util/grub.d/10_netbsd.in | 2 +- + util/grub.d/10_windows.in | 4 ++-- + util/grub.d/30_os-prober.in | 4 ++-- + 5 files changed, 17 insertions(+), 7 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 4268e76..0710c08 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,4 +1,14 @@ +-2014-01-17 Colin Watson ++2014-01-17 Colin Watson ++ ++ * util/grub.d/00_header.in (make_timeout): Use && rather than test ++ -a. ++ * util/grub.d/10_windows.in: Likewise. ++ * util/grub.d/10_netbsd.in (netbsd_load_fs_module): Use || rather ++ than test -o. ++ * util/grub.d/30_os-prober.in: Use && rather than test -a, and || ++ rather than test -o. ++ ++2014-01-17 Colin Watson + + * grub-core/osdep/freebsd/hostdisk.c (grub_util_fd_open): Remove + redundant preprocessor conditional. +diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in +index 0c82f23..ce2ec81 100644 +--- a/util/grub.d/00_header.in ++++ b/util/grub.d/00_header.in +@@ -285,7 +285,7 @@ make_timeout () + if [ "x${3}" != "x" ] ; then + timeout="${2}" + style="${3}" +- elif [ "x${1}" != "x" -a "x${1}" != "x0" ] ; then ++ elif [ "x${1}" != "x" ] && [ "x${1}" != "x0" ] ; then + # Handle the deprecated GRUB_HIDDEN_TIMEOUT scheme. + timeout="${1}" + if [ "x${2}" != "x0" ] ; then +diff --git a/util/grub.d/10_netbsd.in b/util/grub.d/10_netbsd.in +index 29a0e41..9988a42 100644 +--- a/util/grub.d/10_netbsd.in ++++ b/util/grub.d/10_netbsd.in +@@ -69,7 +69,7 @@ netbsd_load_fs_module () + kversion=$(zcat -f "${kernel}" | strings | sed -n -e '/^@(#)NetBSD/ { s/^@(#)NetBSD \([0-9\.]*\) .*$/\1/g ; p ; q ; }') + kmodule="/stand/${karch}/${kversion}/modules/${kmod}/${kmod}.kmod" + +- if test -z "$karch" -o -z "$kversion" -o ! -f "${kmodule}"; then ++ if test -z "$karch" || test -z "$kversion" || test ! -f "${kmodule}"; then + return + fi + +diff --git a/util/grub.d/10_windows.in b/util/grub.d/10_windows.in +index 9025914..48bd955 100644 +--- a/util/grub.d/10_windows.in ++++ b/util/grub.d/10_windows.in +@@ -66,11 +66,11 @@ for drv in $drives ; do + osid= + + # Check for Vista bootmgr. +- if [ -f "$dir"/bootmgr -a -f "$dir"/boot/bcd ] ; then ++ if [ -f "$dir"/bootmgr ] && [ -f "$dir"/boot/bcd ] ; then + OS="$(gettext "Windows Vista/7 (loader)")" + osid=bootmgr + # Check for NTLDR. +- elif [ -f "$dir"/ntldr -a -f "$dir"/ntdetect.com -a -f "$dir"/boot.ini ] ; then ++ elif [ -f "$dir"/ntldr ] && [ -f "$dir"/ntdetect.com ] && [ -f "$dir"/boot.ini ] ; then + OS=`get_os_name_from_boot_ini "$dir"/boot.ini` || OS="$(gettext "Windows NT/2000/XP (loader)")" + osid=ntldr + needmap=t +diff --git a/util/grub.d/30_os-prober.in b/util/grub.d/30_os-prober.in +index 0470e66..7cf8487 100644 +--- a/util/grub.d/30_os-prober.in ++++ b/util/grub.d/30_os-prober.in +@@ -30,7 +30,7 @@ if [ "x${GRUB_DISABLE_OS_PROBER}" = "xtrue" ]; then + exit 0 + fi + +-if [ -z "`which os-prober 2> /dev/null`" -o -z "`which linux-boot-prober 2> /dev/null`" ] ; then ++if [ -z "`which os-prober 2> /dev/null`" ] || [ -z "`which linux-boot-prober 2> /dev/null`" ] ; then + # missing os-prober and/or linux-boot-prober + exit 0 + fi +@@ -119,7 +119,7 @@ for OS in ${OSPROBED} ; do + EXPUUID="${EXPUUID}@${DEVICE#*@}" + fi + +- if [ "x${GRUB_OS_PROBER_SKIP_LIST}" != "x" -a "x`echo ${GRUB_OS_PROBER_SKIP_LIST} | grep -i -e '\b'${EXPUUID}'\b'`" != "x" ] ; then ++ if [ "x${GRUB_OS_PROBER_SKIP_LIST}" != "x" ] && [ "x`echo ${GRUB_OS_PROBER_SKIP_LIST} | grep -i -e '\b'${EXPUUID}'\b'`" != "x" ] ; then + echo "Skipped ${LONGNAME} on ${DEVICE} by user request." >&2 + continue + fi +-- +1.8.5.3 + diff --git a/0015-for-ppc-reset-console-display-attr-when-clear-screen.patch b/0015-for-ppc-reset-console-display-attr-when-clear-screen.patch deleted file mode 100644 index d48b451..0000000 --- a/0015-for-ppc-reset-console-display-attr-when-clear-screen.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 8977267e31aa10ad15ba31b236a2d2bf08c268de Mon Sep 17 00:00:00 2001 -From: Paulo Flabiano Smorigo -Date: Wed, 24 Apr 2013 10:51:48 -0300 -Subject: [PATCH 15/37] for ppc, reset console display attr when clear screen - -This should fix this bugzilla: -https://bugzilla.redhat.com/show_bug.cgi?id=908519 ---- - grub-core/term/terminfo.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/grub-core/term/terminfo.c b/grub-core/term/terminfo.c -index 3d48b19..0825ca2 100644 ---- a/grub-core/term/terminfo.c -+++ b/grub-core/term/terminfo.c -@@ -151,7 +151,7 @@ grub_terminfo_set_current (struct grub_term_output *term, - /* Clear the screen. Using serial console, screen(1) only recognizes the - * ANSI escape sequence. Using video console, Apple Open Firmware - * (version 3.1.1) only recognizes the literal ^L. So use both. */ -- data->cls = grub_strdup (" \e[2J"); -+ data->cls = grub_strdup (" \e[2J\e[m"); - data->reverse_video_on = grub_strdup ("\e[7m"); - data->reverse_video_off = grub_strdup ("\e[m"); - if (grub_strcmp ("ieee1275", str) == 0) --- -1.8.4.2 - diff --git a/0016-Don-t-write-messages-to-the-screen.patch b/0016-Don-t-write-messages-to-the-screen.patch deleted file mode 100644 index 988e8ea..0000000 --- a/0016-Don-t-write-messages-to-the-screen.patch +++ /dev/null @@ -1,158 +0,0 @@ -From eae0ba1000eaa6bcba04cd4708ef705526eb0a10 Mon Sep 17 00:00:00 2001 -From: William Jon McCann -Date: Wed, 15 May 2013 13:30:20 -0400 -Subject: [PATCH 16/37] Don't write messages to the screen - -Writing messages to the screen before the menus or boot splash -happens so quickly it looks like something is wrong and isn't -very appealing. ---- - grub-core/boot/i386/pc/boot.S | 3 --- - grub-core/boot/i386/pc/diskboot.S | 5 ----- - grub-core/gettext/gettext.c | 15 --------------- - grub-core/kern/main.c | 5 ----- - util/grub.d/10_linux.in | 7 ------- - 5 files changed, 35 deletions(-) - -diff --git a/grub-core/boot/i386/pc/boot.S b/grub-core/boot/i386/pc/boot.S -index b4975e2..432a472 100644 ---- a/grub-core/boot/i386/pc/boot.S -+++ b/grub-core/boot/i386/pc/boot.S -@@ -249,9 +249,6 @@ real_start: - /* save drive reference first thing! */ - pushw %dx - -- /* print a notification message on the screen */ -- MSG(notification_string) -- - /* set %si to the disk address packet */ - movw $disk_address_packet, %si - -diff --git a/grub-core/boot/i386/pc/diskboot.S b/grub-core/boot/i386/pc/diskboot.S -index d030a14..a494d02 100644 ---- a/grub-core/boot/i386/pc/diskboot.S -+++ b/grub-core/boot/i386/pc/diskboot.S -@@ -50,11 +50,6 @@ _start: - /* save drive reference first thing! */ - pushw %dx - -- /* print a notification message on the screen */ -- pushw %si -- MSG(notification_string) -- popw %si -- - /* this sets up for the first run through "bootloop" */ - movw $LOCAL(firstlist), %di - -diff --git a/grub-core/gettext/gettext.c b/grub-core/gettext/gettext.c -index 4880cef..1e5c21d 100644 ---- a/grub-core/gettext/gettext.c -+++ b/grub-core/gettext/gettext.c -@@ -437,13 +437,9 @@ grub_gettext_env_write_lang (struct grub_env_var *var - grub_err_t err; - err = grub_gettext_init_ext (&main_context, val, grub_env_get ("locale_dir"), - grub_env_get ("prefix")); -- if (err) -- grub_print_error (); - - err = grub_gettext_init_ext (&secondary_context, val, - grub_env_get ("secondary_locale_dir"), 0); -- if (err) -- grub_print_error (); - - return grub_strdup (val); - } -@@ -455,8 +451,6 @@ grub_gettext_reread_prefix (const char *val) - err = grub_gettext_init_ext (&main_context, grub_env_get ("lang"), - grub_env_get ("locale_dir"), - val); -- if (err) -- grub_print_error (); - } - - static char * -@@ -466,8 +460,6 @@ read_main (struct grub_env_var *var - grub_err_t err; - err = grub_gettext_init_ext (&main_context, grub_env_get ("lang"), val, - grub_env_get ("prefix")); -- if (err) -- grub_print_error (); - return grub_strdup (val); - } - -@@ -478,9 +470,6 @@ read_secondary (struct grub_env_var *var - grub_err_t err; - err = grub_gettext_init_ext (&secondary_context, grub_env_get ("lang"), val, - 0); -- if (err) -- grub_print_error (); -- - return grub_strdup (val); - } - -@@ -506,12 +495,8 @@ GRUB_MOD_INIT (gettext) - - err = grub_gettext_init_ext (&main_context, lang, grub_env_get ("locale_dir"), - grub_env_get ("prefix")); -- if (err) -- grub_print_error (); - err = grub_gettext_init_ext (&secondary_context, lang, - grub_env_get ("secondary_locale_dir"), 0); -- if (err) -- grub_print_error (); - - grub_register_variable_hook ("locale_dir", NULL, read_main); - grub_register_variable_hook ("secondary_locale_dir", NULL, read_secondary); -diff --git a/grub-core/kern/main.c b/grub-core/kern/main.c -index 8ab7794..da47b18 100644 ---- a/grub-core/kern/main.c -+++ b/grub-core/kern/main.c -@@ -268,11 +268,6 @@ grub_main (void) - - grub_boot_time ("After machine init."); - -- /* Hello. */ -- grub_setcolorstate (GRUB_TERM_COLOR_HIGHLIGHT); -- grub_printf ("Welcome to GRUB!\n\n"); -- grub_setcolorstate (GRUB_TERM_COLOR_STANDARD); -- - grub_load_config (); - - grub_boot_time ("Before loading embedded modules."); -diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index ad34cc0..e762e1f 100644 ---- a/util/grub.d/10_linux.in -+++ b/util/grub.d/10_linux.in -@@ -126,29 +126,22 @@ linux_entry () - fi - printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/" - fi -- message="$(gettext_printf "Loading Linux %s ..." ${version})" - if [ -d /sys/firmware/efi ]; then - sed "s/^/$submenu_indentation/" << EOF -- echo '$(echo "$message" | grub_quote)' - linuxefi ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} - EOF - else - sed "s/^/$submenu_indentation/" << EOF -- echo '$(echo "$message" | grub_quote)' - linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} - EOF - fi - if test -n "${initrd}" ; then -- # TRANSLATORS: ramdisk isn't identifier. Should be translated. -- message="$(gettext_printf "Loading initial ramdisk ...")" - if [ -d /sys/firmware/efi ]; then - sed "s/^/$submenu_indentation/" << EOF -- echo '$(echo "$message" | grub_quote)' - initrdefi ${rel_dirname}/${initrd} - EOF - else - sed "s/^/$submenu_indentation/" << EOF -- echo '$message' - initrd ${rel_dirname}/${initrd} - EOF - fi --- -1.8.4.2 - diff --git a/0016-NEWS-Add-few-missing-entries.patch b/0016-NEWS-Add-few-missing-entries.patch new file mode 100644 index 0000000..1aa0483 --- /dev/null +++ b/0016-NEWS-Add-few-missing-entries.patch @@ -0,0 +1,100 @@ +From 30ad0dfbb129fb6d7d072fd52fe127a5f053aa9c Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Sat, 18 Jan 2014 16:31:10 +0100 +Subject: [PATCH 016/112] * NEWS: Add few missing entries. + +--- + ChangeLog | 4 ++++ + NEWS | 18 +++++++++++++++--- + 2 files changed, 19 insertions(+), 3 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 0710c08..a5474d1 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,7 @@ ++2014-01-18 Vladimir Serbinenko ++ ++ * NEWS: Add few missing entries. ++ + 2014-01-17 Colin Watson + + * util/grub.d/00_header.in (make_timeout): Use && rather than test +diff --git a/NEWS b/NEWS +index 49a2459..a61df94 100644 +--- a/NEWS ++++ b/NEWS +@@ -15,6 +15,8 @@ New in 2.02: + * GPT PReP. + * New `progress' module that shows progress information while reading + files. ++ * ZFS features support. ++ * ZFS LZ4 support. + + * New/improved terminal and video support: + * Monochrome text (matching `hercules' in GRUB Legacy). +@@ -36,6 +38,7 @@ New in 2.02: + * Enable `linux16' on all x86 platforms, not just BIOS. + * New TrueCrypt ISO loader. + * multiboot2 boot-services EFI specification. ++ * multiboot2 EFI memory map specification. + * multiboot2 full-file specfication. + + * New/improved network support: +@@ -51,12 +54,15 @@ New in 2.02: + * Ability to launch another payload from flash or disk + * Coreboot framebuffer + * CBMEMC support (both logging and inspecting logs) +- * Inspecting coreboot timestamps. +- * Inspecting coreboot tables. ++ * Command for inspecting coreboot timestamps (`coreboot_boottime'). ++ * Command for inspecting coreboot tables (`lscoreboot'). ++ * New target default_payload.elf. ++ * Increased maximal core size. + + * New/improved platform support: + * New `efifwsetup' and `lsefi' commands on EFI platforms. + * New `cmosdump' and `cmosset' commands on platforms with CMOS support. ++ * New command `pcidump' for PCI platforms. + * Improve opcode parsing in ACPI halt implementation. + * Use the TSC as a possible time source on i386-ieee1275. + * Merge PowerPC grub-mkrescue implementation with the common one. +@@ -77,6 +83,8 @@ New in 2.02: + * Support Yeeloong 3A. + * Add `cpuid --pae' option to detect Physical Address Extension on x86. + * Support for USB debug dongles. ++ * Support for *-emu on all platforms (previously only i386/x86_64 worked). ++ * Support *-emu on Windows. + + * Security: + * Add optional facility to enforce that all files read by the core image +@@ -88,6 +96,8 @@ New in 2.02: + * Initialise USB ports in parallel. + * New `testspeed' command to test file read speed. + * Speed-up gfxterm by storing intermediate results in more compact format. ++ * Lazy LVM/mdraid scan. ++ * Disk hints. + + * Scripting: + * New `eval' and `tr' commands. +@@ -105,7 +115,8 @@ New in 2.02: + * grub-install, grub-mknetdir, grub-mkrescue, and grub-mkstandalone + rewritten in C. They should now work in supported non-Unix-like + environments. +- * Native mingw support, including ability to install on EFI under windows. ++ * Native mingw support. ++ * Ability to install on EFI under windows. + * Reorganise timeout handling using new `timeout_style' environment + variable and `GRUB_TIMEOUT_STYLE' configuration key for grub-mkconfig. + Menu hotkeys pressed during a hidden timeout now boot the corresponding +@@ -122,6 +133,7 @@ New in 2.02: + * Partial mingw64 x86_64-efi compile support (highly experimental). + * Partial mingw32 i386-* (other than already present i386-pc) + compile support (highly experimental). ++ * Support for grub-mkpasswd on Windows. + * Eliminate the use of AutoGen. This allowed some performance + improvements to the build system. + * Remove variable length arrays. +-- +1.8.5.3 + diff --git a/0017-Don-t-print-GNU-GRUB-header.patch b/0017-Don-t-print-GNU-GRUB-header.patch deleted file mode 100644 index 1780007..0000000 --- a/0017-Don-t-print-GNU-GRUB-header.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 2881f5032ed87e9220298cf9c83d30d94a1806ae Mon Sep 17 00:00:00 2001 -From: William Jon McCann -Date: Wed, 15 May 2013 13:53:48 -0400 -Subject: [PATCH 17/37] Don't print GNU GRUB header - -No one cares. ---- - grub-core/normal/main.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c -index ac4ee63..3edb687 100644 ---- a/grub-core/normal/main.c -+++ b/grub-core/normal/main.c -@@ -204,6 +204,7 @@ grub_normal_init_page (struct grub_term_output *term, - - grub_term_cls (term); - -+#if 0 - msg_formatted = grub_xasprintf (_("GNU GRUB version %s"), PACKAGE_VERSION); - if (!msg_formatted) - return; -@@ -227,6 +228,7 @@ grub_normal_init_page (struct grub_term_output *term, - grub_putcode ('\n', term); - grub_putcode ('\n', term); - grub_free (unicode_msg); -+#endif - } - - static void --- -1.8.4.2 - diff --git a/0017-grub-core-kern-efi-efi.c-Ensure-that-the-result-star.patch b/0017-grub-core-kern-efi-efi.c-Ensure-that-the-result-star.patch new file mode 100644 index 0000000..1f172df --- /dev/null +++ b/0017-grub-core-kern-efi-efi.c-Ensure-that-the-result-star.patch @@ -0,0 +1,90 @@ +From dc4cae71d718d12f6ddc01dd7296ad8d659e35ad Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Sat, 18 Jan 2014 16:41:47 +0100 +Subject: [PATCH 017/112] * grub-core/kern/efi/efi.c: Ensure that the + result starts with / and has no //. + +--- + ChangeLog | 5 +++++ + grub-core/kern/efi/efi.c | 25 +++++++++++++++++-------- + 2 files changed, 22 insertions(+), 8 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index a5474d1..9dd67e4 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,10 @@ + 2014-01-18 Vladimir Serbinenko + ++ * grub-core/kern/efi/efi.c: Ensure that the result starts with / ++ and has no //. ++ ++2014-01-18 Vladimir Serbinenko ++ + * NEWS: Add few missing entries. + + 2014-01-17 Colin Watson +diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c +index b253141..b9eb1ab 100644 +--- a/grub-core/kern/efi/efi.c ++++ b/grub-core/kern/efi/efi.c +@@ -309,7 +309,7 @@ grub_efi_modules_addr (void) + char * + grub_efi_get_filename (grub_efi_device_path_t *dp0) + { +- char *name = 0, *p; ++ char *name = 0, *p, *pi; + grub_size_t filesize = 0; + grub_efi_device_path_t *dp; + +@@ -328,7 +328,7 @@ grub_efi_get_filename (grub_efi_device_path_t *dp0) + grub_efi_uint16_t len; + len = ((GRUB_EFI_DEVICE_PATH_LENGTH (dp) - 4) + / sizeof (grub_efi_char16_t)); +- filesize += GRUB_MAX_UTF8_PER_UTF16 * len + 1; ++ filesize += GRUB_MAX_UTF8_PER_UTF16 * len + 2; + } + + dp = GRUB_EFI_NEXT_DEVICE_PATH (dp); +@@ -356,12 +356,12 @@ grub_efi_get_filename (grub_efi_device_path_t *dp0) + grub_efi_file_path_device_path_t *fp; + grub_efi_uint16_t len; + +- if (p != name) +- *p++ = '/'; ++ *p++ = '/'; + + len = ((GRUB_EFI_DEVICE_PATH_LENGTH (dp) - 4) + / sizeof (grub_efi_char16_t)); + fp = (grub_efi_file_path_device_path_t *) dp; ++ + p = (char *) grub_utf16_to_utf8 ((unsigned char *) p, fp->path_name, len); + } + +@@ -370,10 +370,19 @@ grub_efi_get_filename (grub_efi_device_path_t *dp0) + + *p = '\0'; + +- /* EFI breaks paths with backslashes. */ +- for (p = name; *p; p++) +- if (*p == '\\') +- *p = '/'; ++ for (pi = name, p = name; *pi;) ++ { ++ /* EFI breaks paths with backslashes. */ ++ if (*pi == '\\' || *pi == '/') ++ { ++ *p++ = '/'; ++ while (*pi == '\\' || *pi == '/') ++ pi++; ++ continue; ++ } ++ *p++ = *pi++; ++ } ++ *p = '\0'; + + return name; + } +-- +1.8.5.3 + diff --git a/0018-Don-t-add-to-highlighted-row.patch b/0018-Don-t-add-to-highlighted-row.patch deleted file mode 100644 index 60d9850..0000000 --- a/0018-Don-t-add-to-highlighted-row.patch +++ /dev/null @@ -1,26 +0,0 @@ -From b3102b1ff224c355cf0433e6709c86eaeb16960f Mon Sep 17 00:00:00 2001 -From: William Jon McCann -Date: Wed, 15 May 2013 17:49:45 -0400 -Subject: [PATCH 18/37] Don't add '*' to highlighted row - -It is already highlighted. ---- - grub-core/normal/menu_text.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c -index 2ff2941..daf92b5 100644 ---- a/grub-core/normal/menu_text.c -+++ b/grub-core/normal/menu_text.c -@@ -242,7 +242,7 @@ print_entry (int y, int highlight, grub_menu_entry_t entry, - unicode_title[i] = ' '; - - if (data->geo.num_entries > 1) -- grub_putcode (highlight ? '*' : ' ', data->term); -+ grub_putcode (' ', term); - - grub_print_ucs4_menu (unicode_title, - unicode_title + len, --- -1.8.4.2 - diff --git a/0018-util-grub-mount.c-Extend-GCC-warning-workaround-to-g.patch b/0018-util-grub-mount.c-Extend-GCC-warning-workaround-to-g.patch new file mode 100644 index 0000000..d938cba --- /dev/null +++ b/0018-util-grub-mount.c-Extend-GCC-warning-workaround-to-g.patch @@ -0,0 +1,47 @@ +From c7c98ae6f72c00c569b2977e0a3e2a931286562b Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Sat, 18 Jan 2014 16:43:29 +0100 +Subject: [PATCH 018/112] * util/grub-mount.c: Extend GCC warning + workaround to grub-mount. + +--- + ChangeLog | 4 ++++ + util/grub-mount.c | 7 ++++++- + 2 files changed, 10 insertions(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index 9dd67e4..acebfc5 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,9 @@ + 2014-01-18 Vladimir Serbinenko + ++ * util/grub-mount.c: Extend GCC warning workaround to grub-mount. ++ ++2014-01-18 Vladimir Serbinenko ++ + * grub-core/kern/efi/efi.c: Ensure that the result starts with / + and has no //. + +diff --git a/util/grub-mount.c b/util/grub-mount.c +index 118881e..19de2e6 100644 +--- a/util/grub-mount.c ++++ b/util/grub-mount.c +@@ -41,8 +41,13 @@ + #include + #include + ++#pragma GCC diagnostic ignored "-Wmissing-prototypes" ++#pragma GCC diagnostic ignored "-Wmissing-declarations" ++#include ++#pragma GCC diagnostic error "-Wmissing-prototypes" ++#pragma GCC diagnostic error "-Wmissing-declarations" ++ + #include "progname.h" +-#include "argp.h" + + static const char *root = NULL; + grub_device_t dev = NULL; +-- +1.8.5.3 + diff --git a/0019-Don-t-add-to-highlighted-row.patch b/0019-Don-t-add-to-highlighted-row.patch deleted file mode 100644 index b64716e..0000000 --- a/0019-Don-t-add-to-highlighted-row.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 454c328a5e7ba487feb695a9c0dad54ca993c578 Mon Sep 17 00:00:00 2001 -From: William Jon McCann -Date: Wed, 15 May 2013 17:49:45 -0400 -Subject: [PATCH 19/37] Don't add '*' to highlighted row - -It is already highlighted. ---- - grub-core/normal/menu_text.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c -index daf92b5..2f84fcc 100644 ---- a/grub-core/normal/menu_text.c -+++ b/grub-core/normal/menu_text.c -@@ -242,7 +242,7 @@ print_entry (int y, int highlight, grub_menu_entry_t entry, - unicode_title[i] = ' '; - - if (data->geo.num_entries > 1) -- grub_putcode (' ', term); -+ grub_putcode (' ', data->term); - - grub_print_ucs4_menu (unicode_title, - unicode_title + len, --- -1.8.4.2 - diff --git a/0019-reintroduce-BUILD_LDFLAGS-for-the-cross-compile-case.patch b/0019-reintroduce-BUILD_LDFLAGS-for-the-cross-compile-case.patch new file mode 100644 index 0000000..a064b02 --- /dev/null +++ b/0019-reintroduce-BUILD_LDFLAGS-for-the-cross-compile-case.patch @@ -0,0 +1,153 @@ +From 823eab7afd99564aebcf6c553de97a5dde8cc140 Mon Sep 17 00:00:00 2001 +From: Andrey Borzenkov +Date: Sat, 18 Jan 2014 19:50:54 +0400 +Subject: [PATCH 019/112] reintroduce BUILD_LDFLAGS for the cross-compile case + +This allows providing separate LDFLAGS for build and host environments, which +are not necessary the same for cross-compile case. In particular, it allows +building host programs statically to not depend on presence of libraries at +run-time (e.g. MinGW DLLs on Windows) while continue to use default dynamic +linking at build time. + +Also fix obsolete comments in confgure.ac - we do use different environment +for build and host now. +--- + ChangeLog | 7 +++++++ + INSTALL | 3 ++- + Makefile.am | 8 ++++---- + configure.ac | 13 ++++++++----- + grub-core/Makefile.am | 6 +++--- + 5 files changed, 24 insertions(+), 13 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index acebfc5..8a82048 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,10 @@ ++2014-01-07 Andrey Borzenkov ++ ++ * configure.ac: Add support for BUILD_LDFLAGS. ++ * Makefile.am: Use BUILD_LDFLAGS for build time programs here ... ++ * grub-core/Makefile.am: ... and here. ++ * INSTALL: Mention BUILD_LDFLAGS. ++ + 2014-01-18 Vladimir Serbinenko + + * util/grub-mount.c: Extend GCC warning workaround to grub-mount. +diff --git a/INSTALL b/INSTALL +index db12530..b67cd7f 100644 +--- a/INSTALL ++++ b/INSTALL +@@ -168,7 +168,8 @@ corresponding platform are not needed for the platform in question. + generate sin and cos tables. + 2. BUILD_CFLAGS= for C options for build. + 3. BUILD_CPPFLAGS= for C preprocessor options for build. +- 4. BUILD_FREETYPE= for freetype-config for build (optional). ++ 4. BUILD_LDFLAGS= for linker options for build. ++ 5. BUILD_FREETYPE= for freetype-config for build (optional). + + - For host + 1. --host= to autoconf name of host. +diff --git a/Makefile.am b/Makefile.am +index 320e86f..1bbec0e 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -67,20 +67,20 @@ endif + starfield_theme_files = $(srcdir)/themes/starfield/blob_w.png $(srcdir)/themes/starfield/boot_menu_c.png $(srcdir)/themes/starfield/boot_menu_e.png $(srcdir)/themes/starfield/boot_menu_ne.png $(srcdir)/themes/starfield/boot_menu_n.png $(srcdir)/themes/starfield/boot_menu_nw.png $(srcdir)/themes/starfield/boot_menu_se.png $(srcdir)/themes/starfield/boot_menu_s.png $(srcdir)/themes/starfield/boot_menu_sw.png $(srcdir)/themes/starfield/boot_menu_w.png $(srcdir)/themes/starfield/slider_c.png $(srcdir)/themes/starfield/slider_n.png $(srcdir)/themes/starfield/slider_s.png $(srcdir)/themes/starfield/starfield.png $(srcdir)/themes/starfield/terminal_box_c.png $(srcdir)/themes/starfield/terminal_box_e.png $(srcdir)/themes/starfield/terminal_box_ne.png $(srcdir)/themes/starfield/terminal_box_n.png $(srcdir)/themes/starfield/terminal_box_nw.png $(srcdir)/themes/starfield/terminal_box_se.png $(srcdir)/themes/starfield/terminal_box_s.png $(srcdir)/themes/starfield/terminal_box_sw.png $(srcdir)/themes/starfield/terminal_box_w.png $(srcdir)/themes/starfield/theme.txt $(srcdir)/themes/starfield/README $(srcdir)/themes/starfield/COPYING.CC-BY-SA-3.0 + + build-grub-mkfont: util/grub-mkfont.c grub-core/unidata.c grub-core/kern/emu/misc.c util/misc.c +- $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-mkfont\" $^ $(build_freetype_cflags) $(build_freetype_libs) ++ $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-mkfont\" $^ $(build_freetype_cflags) $(build_freetype_libs) + CLEANFILES += build-grub-mkfont + + garbage-gen: util/garbage-gen.c +- $(BUILD_CC) -o $@ $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $^ ++ $(BUILD_CC) -o $@ $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $^ + CLEANFILES += garbage-gen + EXTRA_DIST += util/garbage-gen.c + + build-grub-gen-asciih: util/grub-gen-asciih.c +- $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror ++ $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror + CLEANFILES += build-grub-gen-asciih + + build-grub-gen-widthspec: util/grub-gen-widthspec.c +- $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror ++ $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror + CLEANFILES += build-grub-gen-widthspec + + if COND_STARFIELD +diff --git a/configure.ac b/configure.ac +index 7c5d080..2e4cf3c 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -26,11 +26,10 @@ dnl This is necessary because the target type in autoconf does not + dnl describe such a system very well. + dnl + dnl The current strategy is to use variables with no prefix (such as +-dnl CC, CFLAGS, etc.) for the host type as well as the build type, +-dnl because GRUB does not need to use those variables for the build +-dnl type, so there is no conflict. Variables with the prefix "TARGET_" +-dnl (such as TARGET_CC, TARGET_CFLAGS, etc.) are used for the target +-dnl type. ++dnl CC, CFLAGS, etc.) for the host type, variables with prefix "BUILD_" ++dnl (such as BUILD_CC, BUILD_CFLAGS, etc.) for the build type and variables ++dnl with the prefix "TARGET_" (such as TARGET_CC, TARGET_CFLAGS, etc.) are ++dnl used for the target type. See INSTALL for full list of variables. + + AC_INIT([GRUB],[2.02~beta2],[bug-grub@gnu.org]) + +@@ -477,6 +476,7 @@ AC_SUBST(HOST_CC) + AC_SUBST(BUILD_CC) + AC_SUBST(BUILD_CFLAGS) + AC_SUBST(BUILD_CPPFLAGS) ++AC_SUBST(BUILD_LDFLAGS) + AC_SUBST(TARGET_CC) + AC_SUBST(TARGET_NM) + AC_SUBST(TARGET_RANLIB) +@@ -1290,10 +1290,12 @@ SAVED_CC="$CC" + SAVED_CPP="$CPP" + SAVED_CFLAGS="$CFLAGS" + SAVED_CPPFLAGS="$CPPFLAGS" ++SAVED_LDFLAGS="$LDFLAGS" + CC="$BUILD_CC" + CPP="$BUILD_CPP" + CFLAGS="$BUILD_CFLAGS" + CPPFLAGS="$BUILD_CPPFLAGS" ++LDFLAGS="$BUILD_LDFAGS" + + unset ac_cv_c_bigendian + unset ac_cv_header_ft2build_h +@@ -1356,6 +1358,7 @@ CC="$SAVED_CC" + CPP="$SAVED_CPP" + CFLAGS="$SAVED_CFLAGS" + CPPFLAGS="$SAVED_CPPFLAGS" ++LDFLAGS="$SAVED_LDFLAGS" + + + DJVU_FONT_SOURCE= +diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am +index 1b3142d..13b7979 100644 +--- a/grub-core/Makefile.am ++++ b/grub-core/Makefile.am +@@ -27,14 +27,14 @@ CPPFLAGS_LIBRARY += $(CPPFLAGS_PLATFORM) + CCASFLAGS_LIBRARY += $(CCASFLAGS_PLATFORM) + + build-grub-pep2elf: $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c +- $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=64 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pep2elf\" $^ ++ $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=64 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pep2elf\" $^ + + build-grub-pe2elf: $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c +- $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=32 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pe2elf\" $^ ++ $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=32 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pe2elf\" $^ + + # gentrigtables + gentrigtables: gentrigtables.c +- $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $< $(BUILD_LIBM) ++ $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $< $(BUILD_LIBM) + CLEANFILES += gentrigtables + + # trigtables.c +-- +1.8.5.3 + diff --git a/0020-Message-string-cleanups.patch b/0020-Message-string-cleanups.patch deleted file mode 100644 index 4b1914d..0000000 --- a/0020-Message-string-cleanups.patch +++ /dev/null @@ -1,71 +0,0 @@ -From ad9df3ea0720e27d3883c59888aeae46361cba5d Mon Sep 17 00:00:00 2001 -From: William Jon McCann -Date: Fri, 7 Jun 2013 11:09:04 -0400 -Subject: [PATCH 20/37] Message string cleanups - -Make use of terminology consistent. Remove jargon. ---- - grub-core/normal/menu_text.c | 21 +++++++++------------ - 1 file changed, 9 insertions(+), 12 deletions(-) - -diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c -index 2f84fcc..9d20c6b 100644 ---- a/grub-core/normal/menu_text.c -+++ b/grub-core/normal/menu_text.c -@@ -157,9 +157,8 @@ print_message (int nested, int edit, struct grub_term_output *term, int dry_run) - - if (edit) - { -- ret += grub_print_message_indented_real (_("Minimum Emacs-like screen editing is \ --supported. TAB lists completions. Press Ctrl-x or F10 to boot, Ctrl-c or F2 for a \ --command-line or ESC to discard edits and return to the GRUB menu."), -+ ret += grub_print_message_indented_real (_("Press Ctrl-x or F10 to start, Ctrl-c or F2 for a \ -+command prompt or Escape to discard edits and return to the menu. Pressing Tab lists possible completions."), - STANDARD_MARGIN, STANDARD_MARGIN, - term, dry_run); - } -@@ -167,8 +166,8 @@ command-line or ESC to discard edits and return to the GRUB menu."), - { - char *msg_translated; - -- msg_translated = grub_xasprintf (_("Use the %C and %C keys to select which " -- "entry is highlighted."), -+ msg_translated = grub_xasprintf (_("Use the %C and %C keys to change the " -+ "selection."), - GRUB_UNICODE_UPARROW, - GRUB_UNICODE_DOWNARROW); - if (!msg_translated) -@@ -181,17 +180,15 @@ command-line or ESC to discard edits and return to the GRUB menu."), - if (nested) - { - ret += grub_print_message_indented_real -- (_("Press enter to boot the selected OS, " -- "`e' to edit the commands before booting " -- "or `c' for a command-line. ESC to return previous menu."), -+ (_("Press 'e' to edit the selected item, " -+ "or 'c' for a command prompt. Press Escape to return to the previous menu."), - STANDARD_MARGIN, STANDARD_MARGIN, term, dry_run); - } - else - { - ret += grub_print_message_indented_real -- (_("Press enter to boot the selected OS, " -- "`e' to edit the commands before booting " -- "or `c' for a command-line."), -+ (_("Press 'e' to edit the selected item, " -+ "or 'c' for a command prompt."), - STANDARD_MARGIN, STANDARD_MARGIN, term, dry_run); - } - } -@@ -440,7 +437,7 @@ menu_text_print_timeout (int timeout, void *dataptr) - || data->timeout_msg == TIMEOUT_TERSE_NO_MARGIN) - msg_translated = grub_xasprintf (_("%ds"), timeout); - else -- msg_translated = grub_xasprintf (_("The highlighted entry will be executed automatically in %ds."), timeout); -+ msg_translated = grub_xasprintf (_("The selected entry will be started automatically in %ds."), timeout); - if (!msg_translated) - { - grub_print_error (); --- -1.8.4.2 - diff --git a/0020-grub-core-term-terminfo.c-Recognize-keys-F1-F12.patch b/0020-grub-core-term-terminfo.c-Recognize-keys-F1-F12.patch new file mode 100644 index 0000000..c0bfd91 --- /dev/null +++ b/0020-grub-core-term-terminfo.c-Recognize-keys-F1-F12.patch @@ -0,0 +1,155 @@ +From aee2201f80c42a44da152d918849860be73fd6a7 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Sat, 18 Jan 2014 16:57:35 +0100 +Subject: [PATCH 020/112] * grub-core/term/terminfo.c: Recognize keys + F1-F12. + +--- + ChangeLog | 4 +++ + grub-core/term/terminfo.c | 86 +++++++++++++++++++++++++++-------------------- + 2 files changed, 54 insertions(+), 36 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 8a82048..57f77be 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,7 @@ ++2014-01-18 Vladimir Serbinenko ++ ++ * grub-core/term/terminfo.c: Recognize keys F1-F12. ++ + 2014-01-07 Andrey Borzenkov + + * configure.ac: Add support for BUILD_LDFLAGS. +diff --git a/grub-core/term/terminfo.c b/grub-core/term/terminfo.c +index 3d48b19..f0d3e3d 100644 +--- a/grub-core/term/terminfo.c ++++ b/grub-core/term/terminfo.c +@@ -460,28 +460,31 @@ grub_terminfo_readkey (struct grub_term_input *term, int *keys, int *len, + {'@', GRUB_TERM_KEY_INSERT}, + }; + +- static struct +- { +- char key; +- unsigned ascii; +- } +- four_code_table[] = ++ static unsigned four_code_table[] = + { +- {'1', GRUB_TERM_KEY_HOME}, +- {'3', GRUB_TERM_KEY_DC}, +- {'5', GRUB_TERM_KEY_PPAGE}, +- {'6', GRUB_TERM_KEY_NPAGE}, +- {'7', GRUB_TERM_KEY_HOME}, +- {'8', GRUB_TERM_KEY_END} ++ [1] = GRUB_TERM_KEY_HOME, ++ [3] = GRUB_TERM_KEY_DC, ++ [5] = GRUB_TERM_KEY_PPAGE, ++ [6] = GRUB_TERM_KEY_NPAGE, ++ [7] = GRUB_TERM_KEY_HOME, ++ [8] = GRUB_TERM_KEY_END, ++ [17] = GRUB_TERM_KEY_F6, ++ [18] = GRUB_TERM_KEY_F7, ++ [19] = GRUB_TERM_KEY_F8, ++ [20] = GRUB_TERM_KEY_F9, ++ [21] = GRUB_TERM_KEY_F10, ++ [23] = GRUB_TERM_KEY_F11, ++ [24] = GRUB_TERM_KEY_F12, + }; + char fx_key[] = + { 'P', 'Q', 'w', 'x', 't', 'u', +- 'q', 'r', 'p', 'M', 'A', 'B' }; ++ 'q', 'r', 'p', 'M', 'A', 'B', 'H', 'F' }; + unsigned fx_code[] = + { GRUB_TERM_KEY_F1, GRUB_TERM_KEY_F2, GRUB_TERM_KEY_F3, + GRUB_TERM_KEY_F4, GRUB_TERM_KEY_F5, GRUB_TERM_KEY_F6, + GRUB_TERM_KEY_F7, GRUB_TERM_KEY_F8, GRUB_TERM_KEY_F9, +- GRUB_TERM_KEY_F10, GRUB_TERM_KEY_F11, GRUB_TERM_KEY_F12 }; ++ GRUB_TERM_KEY_F10, GRUB_TERM_KEY_F11, GRUB_TERM_KEY_F12, ++ GRUB_TERM_KEY_HOME, GRUB_TERM_KEY_END }; + unsigned i; + + if (c == '\e') +@@ -492,19 +495,13 @@ grub_terminfo_readkey (struct grub_term_input *term, int *keys, int *len, + { + CONTINUE_READ; + +- switch (c) +- { +- case 'H': +- keys[0] = GRUB_TERM_KEY_HOME; +- *len = 1; +- return; +- case 'F': +- keys[0] = GRUB_TERM_KEY_END; +- *len = 1; +- return; +- default: +- return; +- } ++ for (i = 0; i < ARRAY_SIZE (fx_key); i++) ++ if (fx_key[i] == c) ++ { ++ keys[0] = fx_code[i]; ++ *len = 1; ++ return; ++ } + } + + if (c != '[') +@@ -523,6 +520,15 @@ grub_terminfo_readkey (struct grub_term_input *term, int *keys, int *len, + + switch (c) + { ++ case '[': ++ CONTINUE_READ; ++ if (c >= 'A' && c <= 'E') ++ { ++ keys[0] = GRUB_TERM_KEY_F1 + c - 'A'; ++ *len = 1; ++ return; ++ } ++ return; + case 'O': + CONTINUE_READ; + for (i = 0; i < ARRAY_SIZE (fx_key); i++) +@@ -555,18 +561,26 @@ grub_terminfo_readkey (struct grub_term_input *term, int *keys, int *len, + return; + } + +- default: +- for (i = 0; i < ARRAY_SIZE (four_code_table); i++) +- if (four_code_table[i].key == c) ++ case '1' ... '9': ++ { ++ unsigned val = c - '0'; ++ CONTINUE_READ; ++ if (c >= '0' && c <= '9') + { ++ val = val * 10 + (c - '0'); + CONTINUE_READ; +- if (c != '~') +- return; +- keys[0] = four_code_table[i].ascii; +- *len = 1; +- return; + } +- return; ++ if (c != '~') ++ return; ++ if (val >= ARRAY_SIZE (four_code_table) ++ || four_code_table[val] == 0) ++ return; ++ keys[0] = four_code_table[val]; ++ *len = 1; ++ return; ++ } ++ default: ++ return; + } + } + #undef CONTINUE_READ +-- +1.8.5.3 + diff --git a/0021-Fix-ChangeLog-date.patch b/0021-Fix-ChangeLog-date.patch new file mode 100644 index 0000000..2d5c433 --- /dev/null +++ b/0021-Fix-ChangeLog-date.patch @@ -0,0 +1,25 @@ +From c2e61b87fb4f7d7b9363bb1b5c58c03a0566e106 Mon Sep 17 00:00:00 2001 +From: Andrey Borzenkov +Date: Sat, 18 Jan 2014 20:01:16 +0400 +Subject: [PATCH 021/112] Fix ChangeLog date + +--- + ChangeLog | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index 57f77be..459ac23 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -2,7 +2,7 @@ + + * grub-core/term/terminfo.c: Recognize keys F1-F12. + +-2014-01-07 Andrey Borzenkov ++2014-01-18 Andrey Borzenkov + + * configure.ac: Add support for BUILD_LDFLAGS. + * Makefile.am: Use BUILD_LDFLAGS for build time programs here ... +-- +1.8.5.3 + diff --git a/0021-Fix-border-spacing-now-that-we-aren-t-displaying-it.patch b/0021-Fix-border-spacing-now-that-we-aren-t-displaying-it.patch deleted file mode 100644 index f16c759..0000000 --- a/0021-Fix-border-spacing-now-that-we-aren-t-displaying-it.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 978679e2e8f568a7a9cccc423588875697c8ea42 Mon Sep 17 00:00:00 2001 -From: William Jon McCann -Date: Fri, 7 Jun 2013 14:08:23 -0400 -Subject: [PATCH 21/37] Fix border spacing now that we aren't displaying it - ---- - grub-core/normal/menu_text.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c -index 9d20c6b..aa3454f 100644 ---- a/grub-core/normal/menu_text.c -+++ b/grub-core/normal/menu_text.c -@@ -331,12 +331,12 @@ grub_menu_init_page (int nested, int edit, - int empty_lines = 1; - int version_msg = 1; - -- geo->border = 1; -- geo->first_entry_x = 1 /* margin */ + 1 /* border */; -+ geo->border = 0; -+ geo->first_entry_x = 0 /* margin */ + 0 /* border */; - geo->entry_width = grub_term_width (term) - 5; - - geo->first_entry_y = 2 /* two empty lines*/ -- + 1 /* GNU GRUB version text */ + 1 /* top border */; -+ + 0 /* GNU GRUB version text */ + 1 /* top border */; - - geo->timeout_lines = 2; - --- -1.8.4.2 - diff --git a/0022-Use-_W64-to-detect-MinGW-W64-32-instead-of-_FILE_OFF.patch b/0022-Use-_W64-to-detect-MinGW-W64-32-instead-of-_FILE_OFF.patch new file mode 100644 index 0000000..6087714 --- /dev/null +++ b/0022-Use-_W64-to-detect-MinGW-W64-32-instead-of-_FILE_OFF.patch @@ -0,0 +1,47 @@ +From b6f6d31b007ddbc4c6f7285afb36010af8f2af7a Mon Sep 17 00:00:00 2001 +From: Andrey Borzenkov +Date: Sat, 18 Jan 2014 20:04:11 +0400 +Subject: [PATCH 022/112] Use _W64 to detect MinGW W64-32 instead of + _FILE_OFFSET_BITS + +In 94cee4a4c201bb506377b2c26e072eee8cb19d6f I overlooked that config.h +unconditionally sets _FILE_OFFSET_BITS, so it cannot be used to detect +MinGW W64 environment. It looks like Emacs folks already found +solution; instead of _FILE_OFFSET_BITS use _W64 as suggested in +http://lists.gnu.org/archive/html/emacs-devel/2013-03/msg00723.html +--- + ChangeLog | 5 +++++ + include/grub/osdep/hostfile_windows.h | 4 ++-- + 2 files changed, 7 insertions(+), 2 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 459ac23..3c45a35 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,8 @@ ++2014-01-18 Andrey Borzenkov ++ ++ * include/grub/osdep/hostfile_windows.h: Use _W64 instead of ++ FILE_OFFSET_BITS to differentiate between native MinGW and Mingw W64. ++ + 2014-01-18 Vladimir Serbinenko + + * grub-core/term/terminfo.c: Recognize keys F1-F12. +diff --git a/include/grub/osdep/hostfile_windows.h b/include/grub/osdep/hostfile_windows.h +index 79efcfa..bf6451b 100644 +--- a/include/grub/osdep/hostfile_windows.h ++++ b/include/grub/osdep/hostfile_windows.h +@@ -69,8 +69,8 @@ enum grub_util_fd_open_flags_t + + #if defined (__MINGW32__) && !defined (__MINGW64__) + +-/* 32 bit on MinGW-64 already redefines them if _FILE_OFFSET_BITS=64 */ +-#if !defined(_FILE_OFFSET_BITS) ++/* 32 bit on Mingw-w64 already redefines them if _FILE_OFFSET_BITS=64 */ ++#ifndef _W64 + #define fseeko fseeko64 + #define ftello ftello64 + #endif +-- +1.8.5.3 + diff --git a/0022-Use-the-correct-indentation-for-the-term-help-text.patch b/0022-Use-the-correct-indentation-for-the-term-help-text.patch deleted file mode 100644 index 67d0d00..0000000 --- a/0022-Use-the-correct-indentation-for-the-term-help-text.patch +++ /dev/null @@ -1,28 +0,0 @@ -From c8b5bbff3c0537f6c0703c36de3a7d48cb239db9 Mon Sep 17 00:00:00 2001 -From: William Jon McCann -Date: Fri, 7 Jun 2013 14:08:49 -0400 -Subject: [PATCH 22/37] Use the correct indentation for the term help text - -That is consistent with the menu help text ---- - grub-core/normal/main.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c -index 3edb687..6c24a07 100644 ---- a/grub-core/normal/main.c -+++ b/grub-core/normal/main.c -@@ -418,8 +418,8 @@ grub_normal_reader_init (int nested) - grub_normal_init_page (term, 1); - grub_term_setcursor (term, 1); - -- if (grub_term_width (term) > 3 + STANDARD_MARGIN + 20) -- grub_print_message_indented (msg_formatted, 3, STANDARD_MARGIN, term); -+ if (grub_term_width (term) > 2 * STANDARD_MARGIN + 20) -+ grub_print_message_indented (msg_formatted, STANDARD_MARGIN, STANDARD_MARGIN, term); - else - grub_print_message_indented (msg_formatted, 0, 0, term); - grub_putcode ('\n', term); --- -1.8.4.2 - diff --git a/0023-Indent-menu-entries.patch b/0023-Indent-menu-entries.patch deleted file mode 100644 index d4ace8c..0000000 --- a/0023-Indent-menu-entries.patch +++ /dev/null @@ -1,26 +0,0 @@ -From c40c055022f5b5984422e32d5bf588a47147121d Mon Sep 17 00:00:00 2001 -From: William Jon McCann -Date: Fri, 7 Jun 2013 14:30:55 -0400 -Subject: [PATCH 23/37] Indent menu entries - ---- - grub-core/normal/menu_text.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c -index aa3454f..01b6f1c 100644 ---- a/grub-core/normal/menu_text.c -+++ b/grub-core/normal/menu_text.c -@@ -239,7 +239,8 @@ print_entry (int y, int highlight, grub_menu_entry_t entry, - unicode_title[i] = ' '; - - if (data->geo.num_entries > 1) -- grub_putcode (' ', data->term); -+ for (i = 0; i < STANDARD_MARGIN; i++) -+ grub_putcode (' ', data->term); - - grub_print_ucs4_menu (unicode_title, - unicode_title + len, --- -1.8.4.2 - diff --git a/0023-add-BUILD_EXEEXT-support-to-fix-make-clean-on-Window.patch b/0023-add-BUILD_EXEEXT-support-to-fix-make-clean-on-Window.patch new file mode 100644 index 0000000..6e8f0f9 --- /dev/null +++ b/0023-add-BUILD_EXEEXT-support-to-fix-make-clean-on-Window.patch @@ -0,0 +1,174 @@ +From 53478c3297bdc638f3742d35c8ace197f2abba3a Mon Sep 17 00:00:00 2001 +From: Andrey Borzenkov +Date: Sat, 18 Jan 2014 20:41:24 +0400 +Subject: [PATCH 023/112] add BUILD_EXEEXT support to fix make clean on Windows + +Add $(BUILD_EXEEXT) to ensure files are removed. Also add CLEANFILES where +appropriate. +--- + ChangeLog | 7 +++++++ + Makefile.am | 16 ++++++++-------- + Makefile.util.def | 2 +- + configure.ac | 21 ++++++++++++++++----- + grub-core/Makefile.am | 14 ++++++++------ + 5 files changed, 40 insertions(+), 20 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 3c45a35..130888a 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,12 @@ + 2014-01-18 Andrey Borzenkov + ++ * configure.ac: Add support for BUILD_EXEEXT and use it ... ++ * Makefile.am: ... here. ++ * Makefile.util.def: ... and here. ++ * grub-core/Makefile.am: ... and here. ++ ++2014-01-18 Andrey Borzenkov ++ + * include/grub/osdep/hostfile_windows.h: Use _W64 instead of + FILE_OFFSET_BITS to differentiate between native MinGW and Mingw W64. + +diff --git a/Makefile.am b/Makefile.am +index 1bbec0e..aa526f5 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -66,22 +66,22 @@ endif + + starfield_theme_files = $(srcdir)/themes/starfield/blob_w.png $(srcdir)/themes/starfield/boot_menu_c.png $(srcdir)/themes/starfield/boot_menu_e.png $(srcdir)/themes/starfield/boot_menu_ne.png $(srcdir)/themes/starfield/boot_menu_n.png $(srcdir)/themes/starfield/boot_menu_nw.png $(srcdir)/themes/starfield/boot_menu_se.png $(srcdir)/themes/starfield/boot_menu_s.png $(srcdir)/themes/starfield/boot_menu_sw.png $(srcdir)/themes/starfield/boot_menu_w.png $(srcdir)/themes/starfield/slider_c.png $(srcdir)/themes/starfield/slider_n.png $(srcdir)/themes/starfield/slider_s.png $(srcdir)/themes/starfield/starfield.png $(srcdir)/themes/starfield/terminal_box_c.png $(srcdir)/themes/starfield/terminal_box_e.png $(srcdir)/themes/starfield/terminal_box_ne.png $(srcdir)/themes/starfield/terminal_box_n.png $(srcdir)/themes/starfield/terminal_box_nw.png $(srcdir)/themes/starfield/terminal_box_se.png $(srcdir)/themes/starfield/terminal_box_s.png $(srcdir)/themes/starfield/terminal_box_sw.png $(srcdir)/themes/starfield/terminal_box_w.png $(srcdir)/themes/starfield/theme.txt $(srcdir)/themes/starfield/README $(srcdir)/themes/starfield/COPYING.CC-BY-SA-3.0 + +-build-grub-mkfont: util/grub-mkfont.c grub-core/unidata.c grub-core/kern/emu/misc.c util/misc.c ++build-grub-mkfont$(BUILD_EXEEXT): util/grub-mkfont.c grub-core/unidata.c grub-core/kern/emu/misc.c util/misc.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-mkfont\" $^ $(build_freetype_cflags) $(build_freetype_libs) +-CLEANFILES += build-grub-mkfont ++CLEANFILES += build-grub-mkfont$(BUILD_EXEEXT) + +-garbage-gen: util/garbage-gen.c ++garbage-gen$(BUILD_EXEEXT): util/garbage-gen.c + $(BUILD_CC) -o $@ $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $^ +-CLEANFILES += garbage-gen ++CLEANFILES += garbage-gen$(BUILD_EXEEXT) + EXTRA_DIST += util/garbage-gen.c + +-build-grub-gen-asciih: util/grub-gen-asciih.c ++build-grub-gen-asciih$(BUILD_EXEEXT): util/grub-gen-asciih.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror +-CLEANFILES += build-grub-gen-asciih ++CLEANFILES += build-grub-gen-asciih$(BUILD_EXEEXT) + +-build-grub-gen-widthspec: util/grub-gen-widthspec.c ++build-grub-gen-widthspec$(BUILD_EXEEXT): util/grub-gen-widthspec.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror +-CLEANFILES += build-grub-gen-widthspec ++CLEANFILES += build-grub-gen-widthspec$(BUILD_EXEEXT) + + if COND_STARFIELD + starfield_DATA = dejavu_10.pf2 dejavu_12.pf2 dejavu_bold_14.pf2 dejavu_14.pf2 dejavu_16.pf2 $(starfield_theme_files) +diff --git a/Makefile.util.def b/Makefile.util.def +index 3c99be2..83df212 100644 +--- a/Makefile.util.def ++++ b/Makefile.util.def +@@ -708,7 +708,7 @@ script = { + name = grub-fs-tester; + common = tests/util/grub-fs-tester.in; + installdir = noinst; +- dependencies = garbage-gen; ++ dependencies = 'garbage-gen$(BUILD_EXEEXT)'; + }; + + script = { +diff --git a/configure.ac b/configure.ac +index 2e4cf3c..cf3de3b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -38,7 +38,8 @@ AC_CONFIG_AUX_DIR([build-aux]) + # We don't want -g -O2 by default in CFLAGS + : ${CFLAGS=""} + +-# Checks for host and target systems. ++# Checks for build, host and target systems. ++AC_CANONICAL_BUILD + AC_CANONICAL_HOST + save_program_prefix="${program_prefix}" + AC_CANONICAL_TARGET +@@ -422,6 +423,16 @@ case "$build_os" in + haiku*) BUILD_LIBM= ;; + *) BUILD_LIBM=-lm ;; + esac ++ ++dnl FIXME proper test seems to require too deep dive into Autoconf internals. ++dnl For now just list known platforms that we support. ++ ++case "$build_os" in ++ cygwin*|mingw32*|mingw64*) BUILD_EXEEXT=.exe ;; ++ *) BUILD_EXEEXT= ;; ++esac ++AC_SUBST(BUILD_EXEEXT) ++ + # For gnulib. + gl_INIT + +@@ -765,11 +776,11 @@ if test x"$platform" = xemu ; then + *windows* | *cygwin* | *mingw*) + if test x${target_cpu} = xi386 ; then + grub_cv_target_cc_link_format=-mi386pe; +- TARGET_OBJ2ELF='./build-grub-pe2elf'; ++ TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'; + fi + if test x${target_cpu} = xx86_64 ; then + grub_cv_target_cc_link_format=-mi386pep; +- TARGET_OBJ2ELF='./build-grub-pep2elf'; ++ TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'; + fi + TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format" + ;; +@@ -803,10 +814,10 @@ elif test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then + fi + TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format" + if test x"$grub_cv_target_cc_link_format" = x-mi386pe ; then +- TARGET_OBJ2ELF='./build-grub-pe2elf'; ++ TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'; + fi + if test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then +- TARGET_OBJ2ELF='./build-grub-pep2elf'; ++ TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'; + fi + fi + +diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am +index 13b7979..826b3dd 100644 +--- a/grub-core/Makefile.am ++++ b/grub-core/Makefile.am +@@ -26,20 +26,22 @@ CFLAGS_LIBRARY += $(CFLAGS_PLATFORM) -fno-builtin + CPPFLAGS_LIBRARY += $(CPPFLAGS_PLATFORM) + CCASFLAGS_LIBRARY += $(CCASFLAGS_PLATFORM) + +-build-grub-pep2elf: $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c ++build-grub-pep2elf$(BUILD_EXEEXT): $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=64 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pep2elf\" $^ ++CLEANFILES += build-grub-pep2elf$(BUILD_EXEEXT) + +-build-grub-pe2elf: $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c ++build-grub-pe2elf$(BUILD_EXEEXT): $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=32 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pe2elf\" $^ ++CLEANFILES += build-grub-pe2elf$(BUILD_EXEEXT) + + # gentrigtables +-gentrigtables: gentrigtables.c ++gentrigtables$(BUILD_EXEEXT): gentrigtables.c + $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $< $(BUILD_LIBM) +-CLEANFILES += gentrigtables ++CLEANFILES += gentrigtables$(BUILD_EXEEXT) + + # trigtables.c +-trigtables.c: gentrigtables gentrigtables.c $(top_srcdir)/configure.ac +- ./gentrigtables > $@ ++trigtables.c: gentrigtables$(BUILD_EXEEXT) gentrigtables.c $(top_srcdir)/configure.ac ++ ./gentrigtables$(BUILD_EXEEXT) > $@ + CLEANFILES += trigtables.c + + # XXX Use Automake's LEX & YACC support +-- +1.8.5.3 + diff --git a/0024-Fix-margins.patch b/0024-Fix-margins.patch deleted file mode 100644 index 6f7f6ef..0000000 --- a/0024-Fix-margins.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 02153b5b456d33afff074454ac008fb4391533c4 Mon Sep 17 00:00:00 2001 -From: William Jon McCann -Date: Fri, 7 Jun 2013 14:59:36 -0400 -Subject: [PATCH 24/37] Fix margins - ---- - grub-core/normal/menu_text.c | 8 +++----- - 1 file changed, 3 insertions(+), 5 deletions(-) - -diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c -index 01b6f1c..ead3391 100644 ---- a/grub-core/normal/menu_text.c -+++ b/grub-core/normal/menu_text.c -@@ -333,17 +333,15 @@ grub_menu_init_page (int nested, int edit, - int version_msg = 1; - - geo->border = 0; -- geo->first_entry_x = 0 /* margin */ + 0 /* border */; -- geo->entry_width = grub_term_width (term) - 5; -+ geo->first_entry_x = 0; /* no margin */ -+ geo->entry_width = grub_term_width (term) - 1; - -- geo->first_entry_y = 2 /* two empty lines*/ -- + 0 /* GNU GRUB version text */ + 1 /* top border */; -+ geo->first_entry_y = 3; /* three empty lines*/ - - geo->timeout_lines = 2; - - /* 3 lines for timeout message and bottom margin. 2 lines for the border. */ - geo->num_entries = grub_term_height (term) - geo->first_entry_y -- - 1 /* bottom border */ - - 1 /* empty line before info message*/ - - geo->timeout_lines /* timeout */ - - 1 /* empty final line */; --- -1.8.4.2 - diff --git a/0024-fix-include-loop-on-MinGW-due-to-libintl.h-pulling-s.patch b/0024-fix-include-loop-on-MinGW-due-to-libintl.h-pulling-s.patch new file mode 100644 index 0000000..3f178a9 --- /dev/null +++ b/0024-fix-include-loop-on-MinGW-due-to-libintl.h-pulling-s.patch @@ -0,0 +1,281 @@ +From 389b0154fe3978f7e74a7193be2d0d7a8cf0ef74 Mon Sep 17 00:00:00 2001 +From: Andrey Borzenkov +Date: Sat, 18 Jan 2014 21:22:57 +0400 +Subject: [PATCH 024/112] fix include loop on MinGW due to libintl.h pulling + stdio.h + +In file included from ./include/grub/dl.h:23:0, + from grub-core/lib/libgcrypt-grub/cipher/rfc2268.c:3: +./include/grub/list.h:34:18: warning: conflicting types for 'grub_list_push' [en +abled by default] + void EXPORT_FUNC(grub_list_push) (grub_list_t *head, grub_list_t item); + ^ +./include/grub/symbol.h:68:25: note: in definition of macro 'EXPORT_FUNC' + # define EXPORT_FUNC(x) x + ^ +In file included from ./include/grub/fs.h:30:0, + from ./include/grub/file.h:25, + from ./grub-core/lib/posix_wrap/stdio.h:23, + from c:\mingw\include\libintl.h:314, + from ./include/grub/i18n.h:33, + from ./include/grub/misc.h:27, + from ./include/grub/list.h:25, + from ./include/grub/dl.h:28, + from grub-core/lib/libgcrypt-grub/cipher/rfc2268.c:3: +./include/grub/partition.h:106:3: note: previous implicit declaration of 'grub_l +ist_push' was here + grub_list_push (GRUB_AS_LIST_P (&grub_partition_map_list), + ^ +list.h needs just ATTRIBUTE_ERROR from misc.h; split compiler features +into separate file grub/compiler.h and include it instead. +--- + ChangeLog | 14 +++++++++++ + grub-core/commands/fileXX.c | 1 + + grub-core/efiemu/prepare.c | 1 + + grub-core/loader/i386/xen_file.c | 1 + + grub-core/loader/i386/xen_fileXX.c | 1 + + grub-core/video/capture.c | 1 + + include/grub/command.h | 1 + + include/grub/compiler.h | 51 ++++++++++++++++++++++++++++++++++++++ + include/grub/dl.h | 1 + + include/grub/list.h | 4 +-- + include/grub/misc.h | 29 +--------------------- + include/grub/procfs.h | 1 + + 12 files changed, 76 insertions(+), 30 deletions(-) + create mode 100644 include/grub/compiler.h + +diff --git a/ChangeLog b/ChangeLog +index 130888a..283dd80 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,19 @@ + 2014-01-18 Andrey Borzenkov + ++ * include/grub/misc.h: Move macros for compiler features to ... ++ * include/grub/compiler.h: ... new file. ++ * include/grub/list.h: Include instead of . ++ * grub-core/commands/fileXX.c: Include . ++ * grub-core/efiemu/prepare.c: Include . ++ * grub-core/loader/i386/xen_file.c: Include . ++ * grub-core/loader/i386/xen_fileXX.c: Include . ++ * grub-core/video/capture.c: Include . ++ * include/grub/command.h: Include . ++ * include/grub/dl.h: Include . ++ * include/grub/procfs.h: Include . ++ ++2014-01-18 Andrey Borzenkov ++ + * configure.ac: Add support for BUILD_EXEEXT and use it ... + * Makefile.am: ... here. + * Makefile.util.def: ... and here. +diff --git a/grub-core/commands/fileXX.c b/grub-core/commands/fileXX.c +index c9857ff..58e1094 100644 +--- a/grub-core/commands/fileXX.c ++++ b/grub-core/commands/fileXX.c +@@ -18,6 +18,7 @@ + + #include + #include ++#include + + #pragma GCC diagnostic ignored "-Wcast-align" + +diff --git a/grub-core/efiemu/prepare.c b/grub-core/efiemu/prepare.c +index fb1b25d..84c3368 100644 +--- a/grub-core/efiemu/prepare.c ++++ b/grub-core/efiemu/prepare.c +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + #include + #include + +diff --git a/grub-core/loader/i386/xen_file.c b/grub-core/loader/i386/xen_file.c +index ebbf6aa..ff23235 100644 +--- a/grub-core/loader/i386/xen_file.c ++++ b/grub-core/loader/i386/xen_file.c +@@ -18,6 +18,7 @@ + + #include + #include ++#include + + grub_elf_t + grub_xen_file (grub_file_t file) +diff --git a/grub-core/loader/i386/xen_fileXX.c b/grub-core/loader/i386/xen_fileXX.c +index 6df0015..73a5f90 100644 +--- a/grub-core/loader/i386/xen_fileXX.c ++++ b/grub-core/loader/i386/xen_fileXX.c +@@ -17,6 +17,7 @@ + */ + + #include ++#include + + static grub_err_t + parse_xen_guest (grub_elf_t elf, struct grub_xen_file_info *xi, +diff --git a/grub-core/video/capture.c b/grub-core/video/capture.c +index 67c8edd..4f83c74 100644 +--- a/grub-core/video/capture.c ++++ b/grub-core/video/capture.c +@@ -4,6 +4,7 @@ + #include + #include + #include ++#include + + static struct + { +diff --git a/include/grub/command.h b/include/grub/command.h +index 8705a63..eee4e84 100644 +--- a/include/grub/command.h ++++ b/include/grub/command.h +@@ -22,6 +22,7 @@ + #include + #include + #include ++#include + + typedef enum grub_command_flags + { +diff --git a/include/grub/compiler.h b/include/grub/compiler.h +new file mode 100644 +index 0000000..c9e1d7a +--- /dev/null ++++ b/include/grub/compiler.h +@@ -0,0 +1,51 @@ ++/* compiler.h - macros for various compiler features */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2002,2003,2005,2006,2007,2008,2009,2010,2014 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 . ++ */ ++ ++#ifndef GRUB_COMPILER_HEADER ++#define GRUB_COMPILER_HEADER 1 ++ ++/* GCC version checking borrowed from glibc. */ ++#if defined(__GNUC__) && defined(__GNUC_MINOR__) ++# define GNUC_PREREQ(maj,min) \ ++ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) ++#else ++# define GNUC_PREREQ(maj,min) 0 ++#endif ++ ++/* Does this compiler support compile-time error attributes? */ ++#if GNUC_PREREQ(4,3) ++# define ATTRIBUTE_ERROR(msg) \ ++ __attribute__ ((__error__ (msg))) ++#else ++# define ATTRIBUTE_ERROR(msg) __attribute__ ((noreturn)) ++#endif ++ ++#if GNUC_PREREQ(4,4) ++# define GNU_PRINTF gnu_printf ++#else ++# define GNU_PRINTF printf ++#endif ++ ++#if GNUC_PREREQ(3,4) ++# define WARN_UNUSED_RESULT __attribute__ ((warn_unused_result)) ++#else ++# define WARN_UNUSED_RESULT ++#endif ++ ++#endif /* ! GRUB_COMPILER_HEADER */ +diff --git a/include/grub/dl.h b/include/grub/dl.h +index d29a899..9562fa6 100644 +--- a/include/grub/dl.h ++++ b/include/grub/dl.h +@@ -26,6 +26,7 @@ + #include + #include + #include ++#include + #endif + + /* +diff --git a/include/grub/list.h b/include/grub/list.h +index edd20ad..d170ff6 100644 +--- a/include/grub/list.h ++++ b/include/grub/list.h +@@ -21,8 +21,8 @@ + #define GRUB_LIST_HEADER 1 + + #include +-#include +-#include ++#include ++#include + + struct grub_list + { +diff --git a/include/grub/misc.h b/include/grub/misc.h +index 2cf74b5..c6cd456 100644 +--- a/include/grub/misc.h ++++ b/include/grub/misc.h +@@ -25,34 +25,7 @@ + #include + #include + #include +- +-/* GCC version checking borrowed from glibc. */ +-#if defined(__GNUC__) && defined(__GNUC_MINOR__) +-# define GNUC_PREREQ(maj,min) \ +- ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) +-#else +-# define GNUC_PREREQ(maj,min) 0 +-#endif +- +-/* Does this compiler support compile-time error attributes? */ +-#if GNUC_PREREQ(4,3) +-# define ATTRIBUTE_ERROR(msg) \ +- __attribute__ ((__error__ (msg))) +-#else +-# define ATTRIBUTE_ERROR(msg) __attribute__ ((noreturn)) +-#endif +- +-#if GNUC_PREREQ(4,4) +-# define GNU_PRINTF gnu_printf +-#else +-# define GNU_PRINTF printf +-#endif +- +-#if GNUC_PREREQ(3,4) +-# define WARN_UNUSED_RESULT __attribute__ ((warn_unused_result)) +-#else +-# define WARN_UNUSED_RESULT +-#endif ++#include + + #define ALIGN_UP(addr, align) \ + ((addr + (typeof (addr)) align - 1) & ~((typeof (addr)) align - 1)) +diff --git a/include/grub/procfs.h b/include/grub/procfs.h +index d393da7..8cc331d 100644 +--- a/include/grub/procfs.h ++++ b/include/grub/procfs.h +@@ -20,6 +20,7 @@ + #define GRUB_PROCFS_HEADER 1 + + #include ++#include + + struct grub_procfs_entry + { +-- +1.8.5.3 + diff --git a/0025-Add-support-for-UEFI-operating-systems-returned-by-o.patch b/0025-Add-support-for-UEFI-operating-systems-returned-by-o.patch deleted file mode 100644 index c480d78..0000000 --- a/0025-Add-support-for-UEFI-operating-systems-returned-by-o.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 306ea2bec37abaa5f35507766451061b946139ad Mon Sep 17 00:00:00 2001 -From: Matthew Garrett -Date: Wed, 12 Jun 2013 11:51:49 -0400 -Subject: [PATCH 25/37] Add support for UEFI operating systems returned by - os-prober - -os-prober returns UEFI operating systems in the form: - -path:long-name:name - -where path is the path under the EFI directory on the ESP. This is in -contrast to legacy OSes, where path is the device string. Handle this case. ---- - util/grub.d/30_os-prober.in | 22 ++++++++++++++++++---- - 1 file changed, 18 insertions(+), 4 deletions(-) - -diff --git a/util/grub.d/30_os-prober.in b/util/grub.d/30_os-prober.in -index 0470e66..8650a79 100644 ---- a/util/grub.d/30_os-prober.in -+++ b/util/grub.d/30_os-prober.in -@@ -319,9 +319,23 @@ EOF - EOF - ;; - *) -- echo -n " " -- # TRANSLATORS: %s is replaced by OS name. -- gettext_printf "%s is not yet supported by grub-mkconfig.\n" "${LONGNAME}" >&2 -- ;; -+ case ${DEVICE} in -+ *.efi) -+ cat << EOF -+menuentry '$(echo "${LONGNAME}" | grub_quote)' { -+EOF -+ save_default_entry | grub_add_tab -+ cat << EOF -+ chainloader /EFI/${DEVICE} -+ boot -+} -+EOF -+ ;; -+ *) -+ echo -n " " -+ # TRANSLATORS: %s is replaced by OS name. -+ gettext_printf "%s is not yet supported by grub-mkconfig.\n" "${LONGNAME}" >&2 -+ ;; -+ esac - esac - done --- -1.8.4.2 - diff --git a/0025-grub-core-commands-macbless.c-Rename-FILE-and-DIR-to.patch b/0025-grub-core-commands-macbless.c-Rename-FILE-and-DIR-to.patch new file mode 100644 index 0000000..c68a0bb --- /dev/null +++ b/0025-grub-core-commands-macbless.c-Rename-FILE-and-DIR-to.patch @@ -0,0 +1,61 @@ +From 2b945debd84085f04f45fe16db750528b12b3e6e Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Sat, 18 Jan 2014 19:26:40 +0100 +Subject: [PATCH 025/112] * grub-core/commands/macbless.c: Rename FILE + and DIR to avoid conflicts. + + Reported by: Andrey Borzenkov. +--- + ChangeLog | 7 +++++++ + grub-core/commands/macbless.c | 6 +++--- + 2 files changed, 10 insertions(+), 3 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 283dd80..7d11c52 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,10 @@ ++2014-01-18 Vladimir Serbinenko ++ ++ * grub-core/commands/macbless.c: Rename FILE and DIR to avoid ++ conflicts. ++ ++ Reported by: Andrey Borzenkov. ++ + 2014-01-18 Andrey Borzenkov + + * include/grub/misc.h: Move macros for compiler features to ... +diff --git a/grub-core/commands/macbless.c b/grub-core/commands/macbless.c +index c521083..4724edd 100644 +--- a/grub-core/commands/macbless.c ++++ b/grub-core/commands/macbless.c +@@ -37,7 +37,7 @@ struct find_node_context + grub_uint64_t inode_found; + char *dirname; + enum +- { NONE, FILE, DIR } found; ++ { FOUND_NONE, FOUND_FILE, FOUND_DIR } found; + }; + + static int +@@ -53,7 +53,7 @@ find_inode (const char *filename, + && grub_strcasecmp (ctx->dirname, filename) == 0))) + { + ctx->inode_found = info->inode; +- ctx->found = info->dir ? DIR : FILE; ++ ctx->found = info->dir ? FOUND_DIR : FOUND_FILE; + } + return 0; + } +@@ -175,7 +175,7 @@ grub_mac_bless_file (grub_device_t dev, const char *path_in, int intel) + grub_free (path); + + return grub_mac_bless_inode (dev, (grub_uint32_t) ctx.inode_found, +- (ctx.found == DIR), intel); ++ (ctx.found == FOUND_DIR), intel); + } + + static grub_err_t +-- +1.8.5.3 + diff --git a/0026-Disable-GRUB-video-support-for-IBM-power-machines.patch b/0026-Disable-GRUB-video-support-for-IBM-power-machines.patch deleted file mode 100644 index 9167d42..0000000 --- a/0026-Disable-GRUB-video-support-for-IBM-power-machines.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 7c23b55851824ce06ff8f32db0defe0a5409265e Mon Sep 17 00:00:00 2001 -From: Paulo Flabiano Smorigo -Date: Tue, 11 Jun 2013 15:14:05 -0300 -Subject: [PATCH 26/37] Disable GRUB video support for IBM power machines - -Should fix the problem in bugzilla: -https://bugzilla.redhat.com/show_bug.cgi?id=973205 ---- - grub-core/kern/ieee1275/cmain.c | 5 ++++- - grub-core/video/ieee1275.c | 9 ++++++--- - include/grub/ieee1275/ieee1275.h | 2 ++ - 3 files changed, 12 insertions(+), 4 deletions(-) - -diff --git a/grub-core/kern/ieee1275/cmain.c b/grub-core/kern/ieee1275/cmain.c -index d92ae14..409c922 100644 ---- a/grub-core/kern/ieee1275/cmain.c -+++ b/grub-core/kern/ieee1275/cmain.c -@@ -88,7 +88,10 @@ grub_ieee1275_find_options (void) - is_qemu = 1; - - if (rc >= 0 && grub_strncmp (tmp, "IBM", 3) == 0) -- grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_NO_TREE_SCANNING_FOR_DISKS); -+ { -+ grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_NO_TREE_SCANNING_FOR_DISKS); -+ grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_DISABLE_VIDEO_SUPPORT); -+ } - - /* Old Macs have no key repeat, newer ones have fully working one. - The ones inbetween when repeated key generates an escaoe sequence -diff --git a/grub-core/video/ieee1275.c b/grub-core/video/ieee1275.c -index 0b150ec..813ab38 100644 ---- a/grub-core/video/ieee1275.c -+++ b/grub-core/video/ieee1275.c -@@ -351,9 +351,12 @@ static struct grub_video_adapter grub_video_ieee1275_adapter = - - GRUB_MOD_INIT(ieee1275_fb) - { -- find_display (); -- if (display) -- grub_video_register (&grub_video_ieee1275_adapter); -+ if (! grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_DISABLE_VIDEO_SUPPORT)) -+ { -+ find_display (); -+ if (display) -+ grub_video_register (&grub_video_ieee1275_adapter); -+ } - } - - GRUB_MOD_FINI(ieee1275_fb) -diff --git a/include/grub/ieee1275/ieee1275.h b/include/grub/ieee1275/ieee1275.h -index 2b64a92..29f3a1d 100644 ---- a/include/grub/ieee1275/ieee1275.h -+++ b/include/grub/ieee1275/ieee1275.h -@@ -145,6 +145,8 @@ enum grub_ieee1275_flag - GRUB_IEEE1275_FLAG_BROKEN_REPEAT, - - GRUB_IEEE1275_FLAG_CURSORONOFF_ANSI_BROKEN, -+ -+ GRUB_IEEE1275_FLAG_DISABLE_VIDEO_SUPPORT - }; - - extern int EXPORT_FUNC(grub_ieee1275_test_flag) (enum grub_ieee1275_flag flag); --- -1.8.4.2 - diff --git a/0026-Makefile.util.def-Link-grub-ofpathname-with-zfs-libs.patch b/0026-Makefile.util.def-Link-grub-ofpathname-with-zfs-libs.patch new file mode 100644 index 0000000..5907f9b --- /dev/null +++ b/0026-Makefile.util.def-Link-grub-ofpathname-with-zfs-libs.patch @@ -0,0 +1,39 @@ +From a088c0ebf38e54325e10e2872bb56a02b3c97703 Mon Sep 17 00:00:00 2001 +From: Mike Gilbert +Date: Sat, 18 Jan 2014 19:41:15 +0100 +Subject: [PATCH 026/112] * Makefile.util.def: Link grub-ofpathname with + zfs libs. + +--- + ChangeLog | 4 ++++ + Makefile.util.def | 2 +- + 2 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index 7d11c52..0629bfc 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,7 @@ ++2014-01-01 Mike Gilbert ++ ++ * Makefile.util.def: Link grub-ofpathname with zfs libs. ++ + 2014-01-18 Vladimir Serbinenko + + * grub-core/commands/macbless.c: Rename FILE and DIR to avoid +diff --git a/Makefile.util.def b/Makefile.util.def +index 83df212..a286a89 100644 +--- a/Makefile.util.def ++++ b/Makefile.util.def +@@ -384,7 +384,7 @@ program = { + ldadd = libgrubgcry.a; + ldadd = libgrubkern.a; + ldadd = grub-core/gnulib/libgnu.a; +- ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBGEOM)'; ++ ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; + }; + + program = { +-- +1.8.5.3 + diff --git a/0027-Makefile.am-default_payload.elf-Add-modules.patch b/0027-Makefile.am-default_payload.elf-Add-modules.patch new file mode 100644 index 0000000..163e133 --- /dev/null +++ b/0027-Makefile.am-default_payload.elf-Add-modules.patch @@ -0,0 +1,42 @@ +From dddf94cbf0d8e07744f28d24684aa6e29f8c1780 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Sat, 18 Jan 2014 19:43:19 +0100 +Subject: [PATCH 027/112] * Makefile.am (default_payload.elf): Add + modules multiboot cbmemc linux16 gzio echo help. + +--- + ChangeLog | 7 ++++++- + Makefile.am | 2 +- + 2 files changed, 7 insertions(+), 2 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 0629bfc..ef0ab77 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,4 +1,9 @@ +-2014-01-01 Mike Gilbert ++2014-01-18 Vladimir Serbinenko ++ ++ * Makefile.am (default_payload.elf): Add modules ++ multiboot cbmemc linux16 gzio echo help. ++ ++2014-01-18 Mike Gilbert + + * Makefile.util.def: Link grub-ofpathname with zfs libs. + +diff --git a/Makefile.am b/Makefile.am +index aa526f5..97c062d 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -399,7 +399,7 @@ bootcheck: $(BOOTCHECKS) + + if COND_i386_coreboot + default_payload.elf: grub-mkstandalone grub-mkimage +- pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos xfs ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test serial' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg ++ pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos xfs ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test serial multiboot cbmemc linux16 gzio echo help' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg + endif + + windowsdir=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows +-- +1.8.5.3 + diff --git a/0027-Use-2-instead-of-1-for-our-right-hand-margin-so-line.patch b/0027-Use-2-instead-of-1-for-our-right-hand-margin-so-line.patch deleted file mode 100644 index 07f33c6..0000000 --- a/0027-Use-2-instead-of-1-for-our-right-hand-margin-so-line.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 4ff77afc3062ad26fb77319876c323f2f4448cf3 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Fri, 21 Jun 2013 14:44:08 -0400 -Subject: [PATCH 27/37] Use -2 instead of -1 for our right-hand margin, so - linewrapping works (#976643). - -Signed-off-by: Peter Jones ---- - grub-core/normal/menu_text.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c -index ead3391..bc1fc71 100644 ---- a/grub-core/normal/menu_text.c -+++ b/grub-core/normal/menu_text.c -@@ -334,7 +334,7 @@ grub_menu_init_page (int nested, int edit, - - geo->border = 0; - geo->first_entry_x = 0; /* no margin */ -- geo->entry_width = grub_term_width (term) - 1; -+ geo->entry_width = grub_term_width (term) - 2; - - geo->first_entry_y = 3; /* three empty lines*/ - --- -1.8.4.2 - diff --git a/0028-Use-linux16-when-appropriate-880840.patch b/0028-Use-linux16-when-appropriate-880840.patch deleted file mode 100644 index 6d2ffa5..0000000 --- a/0028-Use-linux16-when-appropriate-880840.patch +++ /dev/null @@ -1,52 +0,0 @@ -From af7aee883ca2308881a49020c83aca12859dc088 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Mon, 28 Oct 2013 10:05:07 -0400 -Subject: [PATCH 28/37] Use linux16 when appropriate (#880840) - -The kernel group really would prefer that we use the 16 bit entry point -on x86 bios machines. - -Resolves: rhbz#880840 - -Signed-off-by: Peter Jones ---- - util/grub.d/10_linux.in | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) - -diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index e762e1f..600bfd2 100644 ---- a/util/grub.d/10_linux.in -+++ b/util/grub.d/10_linux.in -@@ -74,6 +74,11 @@ linux_entry () - type="$3" - args="$4" - -+ sixteenbit="" -+ case "$machine" in -+ i?86|x86_64) sixteenbit="16" ;; -+ esac -+ - if [ -z "$boot_device_id" ]; then - boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")" - fi -@@ -132,7 +137,7 @@ linux_entry () - EOF - else - sed "s/^/$submenu_indentation/" << EOF -- linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} -+ linux${sixteenbit} ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} - EOF - fi - if test -n "${initrd}" ; then -@@ -142,7 +147,7 @@ EOF - EOF - else - sed "s/^/$submenu_indentation/" << EOF -- initrd ${rel_dirname}/${initrd} -+ initrd${sixteenbit} ${rel_dirname}/${initrd} - EOF - fi - fi --- -1.8.4.2 - diff --git a/0028-fix-removal-of-cpu-machine-links-on-mingw-msys.patch b/0028-fix-removal-of-cpu-machine-links-on-mingw-msys.patch new file mode 100644 index 0000000..d11884c --- /dev/null +++ b/0028-fix-removal-of-cpu-machine-links-on-mingw-msys.patch @@ -0,0 +1,55 @@ +From 02a2b7039c54c1786fc31ab2d34027eaec1c826a Mon Sep 17 00:00:00 2001 +From: Andrey Borzenkov +Date: Sat, 18 Jan 2014 22:48:04 +0400 +Subject: [PATCH 028/112] fix removal of {cpu,machine} links on mingw/msys + +At least on Windows 2003 using "ln -s dir1 dir2" in msys shell succeeds, +but results in what looks like hard link. Subsequent "rm -f dir2" (e.g. +during second config.status invocation) fails. Check that we also can +remove link to directory. + +Make it more clear in message that we are checking "ln -s". +--- + ChangeLog | 5 +++++ + acinclude.m4 | 6 +++--- + 2 files changed, 8 insertions(+), 3 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index ef0ab77..3c24157 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,8 @@ ++2014-01-18 Andrey Borzenkov ++ ++ * acinclude.m4 (grub_CHECK_LINK_DIR): Check that we can also remove ++ symbolic link to directory. It fails in Msys shell on Windows 2003. ++ + 2014-01-18 Vladimir Serbinenko + + * Makefile.am (default_payload.elf): Add modules +diff --git a/acinclude.m4 b/acinclude.m4 +index 32d5477..b2bb88d 100644 +--- a/acinclude.m4 ++++ b/acinclude.m4 +@@ -418,15 +418,15 @@ else + [fi] + ]) + +-dnl Check if ln can handle directories properly (mingw). ++dnl Check if ln -s can handle directories properly (mingw). + AC_DEFUN([grub_CHECK_LINK_DIR],[ +-AC_MSG_CHECKING([whether ln can handle directories properly]) ++AC_MSG_CHECKING([whether ln -s can handle directories properly]) + [mkdir testdir 2>/dev/null + case $srcdir in + [\\/$]* | ?:[\\/]* ) reldir=$srcdir/include/grub/util ;; + *) reldir=../$srcdir/include/grub/util ;; + esac +-if ln -s $reldir testdir/util 2>/dev/null ; then] ++if ln -s $reldir testdir/util 2>/dev/null && rm -f testdir/util 2>/dev/null ; then] + AC_MSG_RESULT([yes]) + [link_dir=yes + else +-- +1.8.5.3 + diff --git a/0029-Enable-pager-by-default.-985860.patch b/0029-Enable-pager-by-default.-985860.patch deleted file mode 100644 index 3cd89e9..0000000 --- a/0029-Enable-pager-by-default.-985860.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 06eb9bcde2d8460f00dfdafbcd1aa50bb04809b2 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Mon, 28 Oct 2013 10:09:27 -0400 -Subject: [PATCH 29/37] Enable pager by default. (#985860) - -Signed-off-by: Peter Jones ---- - util/grub.d/00_header.in | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in -index 0c82f23..dc6bbbb 100644 ---- a/util/grub.d/00_header.in -+++ b/util/grub.d/00_header.in -@@ -43,6 +43,8 @@ if [ "x${GRUB_DEFAULT_BUTTON}" = "xsaved" ] ; then GRUB_DEFAULT_BUTTON='${saved_ - if [ "x${GRUB_TIMEOUT_BUTTON}" = "x" ] ; then GRUB_TIMEOUT_BUTTON="$GRUB_TIMEOUT" ; fi - - cat << EOF -+set pager=1 -+ - if [ -s \$prefix/grubenv ]; then - load_env - fi --- -1.8.4.2 - diff --git a/0029-grub-core-normal-main.c-read_config_file-Buffer-conf.patch b/0029-grub-core-normal-main.c-read_config_file-Buffer-conf.patch new file mode 100644 index 0000000..b2b203f --- /dev/null +++ b/0029-grub-core-normal-main.c-read_config_file-Buffer-conf.patch @@ -0,0 +1,68 @@ +From b5453504f83bd29248fbae94d7c5ceea54ed65c6 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Sat, 18 Jan 2014 19:54:09 +0100 +Subject: [PATCH 029/112] * grub-core/normal/main.c (read_config_file): + Buffer config file. Reduces boot time. + +--- + ChangeLog | 5 +++++ + grub-core/normal/main.c | 14 +++++++++++--- + 2 files changed, 16 insertions(+), 3 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 3c24157..66e00d5 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,8 @@ ++2014-01-18 Vladimir Serbinenko ++ ++ * grub-core/normal/main.c (read_config_file): Buffer config file. ++ Reduces boot time. ++ + 2014-01-18 Andrey Borzenkov + + * acinclude.m4 (grub_CHECK_LINK_DIR): Check that we can also remove +diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c +index c36663f..3a926fc 100644 +--- a/grub-core/normal/main.c ++++ b/grub-core/normal/main.c +@@ -32,6 +32,7 @@ + #include + #include + #include ++#include + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -104,7 +105,7 @@ read_config_file_getline (char **line, int cont __attribute__ ((unused)), + static grub_menu_t + read_config_file (const char *config) + { +- grub_file_t file; ++ grub_file_t rawfile, file; + char *old_file = 0, *old_dir = 0; + char *config_dir, *ptr = 0; + const char *ctmp; +@@ -122,10 +123,17 @@ read_config_file (const char *config) + } + + /* Try to open the config file. */ +- file = grub_file_open (config); +- if (! file) ++ rawfile = grub_file_open (config); ++ if (! rawfile) + return 0; + ++ file = grub_bufio_open (rawfile, 0); ++ if (! file) ++ { ++ grub_file_close (file); ++ return 0; ++ } ++ + ctmp = grub_env_get ("config_file"); + if (ctmp) + old_file = grub_strdup (ctmp); +-- +1.8.5.3 + diff --git a/0030-F10-doesn-t-work-on-serial-so-don-t-tell-the-user-to.patch b/0030-F10-doesn-t-work-on-serial-so-don-t-tell-the-user-to.patch deleted file mode 100644 index 020f9b4..0000000 --- a/0030-F10-doesn-t-work-on-serial-so-don-t-tell-the-user-to.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 03693b39a4673347f24409fabae167b4b1386308 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Mon, 28 Oct 2013 10:13:27 -0400 -Subject: [PATCH 30/37] F10 doesn't work on serial, so don't tell the user to - hit it (#987443) - -Signed-off-by: Peter Jones ---- - grub-core/normal/menu_text.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c -index bc1fc71..6202c2a 100644 ---- a/grub-core/normal/menu_text.c -+++ b/grub-core/normal/menu_text.c -@@ -157,7 +157,7 @@ print_message (int nested, int edit, struct grub_term_output *term, int dry_run) - - if (edit) - { -- ret += grub_print_message_indented_real (_("Press Ctrl-x or F10 to start, Ctrl-c or F2 for a \ -+ ret += grub_print_message_indented_real (_("Press Ctrl-x to start, Ctrl-c for a \ - command prompt or Escape to discard edits and return to the menu. Pressing Tab lists possible completions."), - STANDARD_MARGIN, STANDARD_MARGIN, - term, dry_run); --- -1.8.4.2 - diff --git a/0030-util-grub-install.c-Fix-a-typo.patch b/0030-util-grub-install.c-Fix-a-typo.patch new file mode 100644 index 0000000..3dbd4fb --- /dev/null +++ b/0030-util-grub-install.c-Fix-a-typo.patch @@ -0,0 +1,40 @@ +From f11a0491a9ee60d66d5bd084841c7548db876be7 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Sat, 18 Jan 2014 20:02:51 +0100 +Subject: [PATCH 030/112] * util/grub-install.c: Fix a typo. + +--- + ChangeLog | 4 ++++ + util/grub-install.c | 2 +- + 2 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index 66e00d5..1b53ccd 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,9 @@ + 2014-01-18 Vladimir Serbinenko + ++ * util/grub-install.c: Fix a typo. ++ ++2014-01-18 Vladimir Serbinenko ++ + * grub-core/normal/main.c (read_config_file): Buffer config file. + Reduces boot time. + +diff --git a/util/grub-install.c b/util/grub-install.c +index 4608b80..5903f34 100644 +--- a/util/grub-install.c ++++ b/util/grub-install.c +@@ -1259,7 +1259,7 @@ main (int argc, char *argv[]) + + if (!config.is_cryptodisk_enabled && have_cryptodisk) + grub_util_error (_("attempt to install to encrypted disk without cryptodisk enabled. " +- "Set `%s' in file `%s'."), "GRUB_ENABLE_CRYPTODISK=1", ++ "Set `%s' in file `%s'."), "GRUB_ENABLE_CRYPTODISK=y", + grub_util_get_config_filename ()); + + if (disk_module && grub_strcmp (disk_module, "ata") == 0) +-- +1.8.5.3 + diff --git a/0031-Don-t-say-GNU-Linux-in-generated-menus.patch b/0031-Don-t-say-GNU-Linux-in-generated-menus.patch deleted file mode 100644 index 6c2cdb2..0000000 --- a/0031-Don-t-say-GNU-Linux-in-generated-menus.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 283624a8caaa0fb184c200eac370b184a23790c8 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Mon, 14 Mar 2011 14:27:42 -0400 -Subject: [PATCH 31/37] Don't say "GNU/Linux" in generated menus. - ---- - util/grub.d/10_linux.in | 4 ++-- - util/grub.d/20_linux_xen.in | 4 ++-- - 2 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index 600bfd2..c943a1e 100644 ---- a/util/grub.d/10_linux.in -+++ b/util/grub.d/10_linux.in -@@ -29,9 +29,9 @@ export TEXTDOMAINDIR="@localedir@" - CLASS="--class gnu-linux --class gnu --class os" - - if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then -- OS=GNU/Linux -+ OS="$(sed 's, release .*$,,g' /etc/system-release)" - else -- OS="${GRUB_DISTRIBUTOR} GNU/Linux" -+ OS="${GRUB_DISTRIBUTOR}" - CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}" - fi - -diff --git a/util/grub.d/20_linux_xen.in b/util/grub.d/20_linux_xen.in -index a608435..79d4e38 100644 ---- a/util/grub.d/20_linux_xen.in -+++ b/util/grub.d/20_linux_xen.in -@@ -29,9 +29,9 @@ export TEXTDOMAINDIR="@localedir@" - CLASS="--class gnu-linux --class gnu --class os --class xen" - - if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then -- OS=GNU/Linux -+ OS="$(sed 's, release .*$,,g' /etc/system-release)" - else -- OS="${GRUB_DISTRIBUTOR} GNU/Linux" -+ OS="${GRUB_DISTRIBUTOR}" - CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}" - fi - --- -1.8.4.2 - diff --git a/0031-use-MODULE_FILES-for-genemuinit-instead-of-MOD_FILES.patch b/0031-use-MODULE_FILES-for-genemuinit-instead-of-MOD_FILES.patch new file mode 100644 index 0000000..0b9811f --- /dev/null +++ b/0031-use-MODULE_FILES-for-genemuinit-instead-of-MOD_FILES.patch @@ -0,0 +1,91 @@ +From 9cc802e03875429ff772eb3f007ee11eb1ad0c25 Mon Sep 17 00:00:00 2001 +From: Andrey Borzenkov +Date: Sat, 18 Jan 2014 23:15:40 +0400 +Subject: [PATCH 031/112] use MODULE_FILES for genemuinit* instead of MOD_FILES + +MinGW native nm does not support ELF binaries. +--- + ChangeLog | 8 ++++++++ + grub-core/Makefile.am | 8 ++++---- + grub-core/genemuinit.sh | 4 ++-- + grub-core/genemuinitheader.sh | 4 ++-- + 4 files changed, 16 insertions(+), 8 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 1b53ccd..7d207e4 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,11 @@ ++2014-01-18 Andrey Borzenkov ++ ++ * grub-core/Makefile.am: Build grub_emu_init.[ch] from MODULE_FILES ++ instead of MOD_FILES. ++ * grub-core/genemuinit.sh: Simplify stripping of suffix so it works ++ both with and without .exe. ++ * grub-core/genemuinitheader.sh: Same. ++ + 2014-01-18 Vladimir Serbinenko + + * util/grub-install.c: Fix a typo. +diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am +index 826b3dd..5c087c8 100644 +--- a/grub-core/Makefile.am ++++ b/grub-core/Makefile.am +@@ -294,12 +294,12 @@ grub_emu-grub_emu_init.$(OBJEXT):grub_emu_init.h + kern/emu/grub_emu_dyn-main.$(OBJEXT):grub_emu_init.h + grub_emu_dyn-grub_emu_init.$(OBJEXT):grub_emu_init.h + +-grub_emu_init.h: genemuinitheader.sh $(MOD_FILES) +- rm -f $@; echo $(MOD_FILES) | sh $(srcdir)/genemuinitheader.sh $(TARGET_NM) > $@ ++grub_emu_init.h: genemuinitheader.sh $(MODULE_FILES) ++ rm -f $@; echo $(MODULE_FILES) | sh $(srcdir)/genemuinitheader.sh $(TARGET_NM) > $@ + CLEANFILES += grub_emu_init.h + +-grub_emu_init.c: grub_emu_init.h genemuinit.sh $(MOD_FILES) +- rm -f $@; echo $(MOD_FILES) | sh $(srcdir)/genemuinit.sh $(TARGET_NM) > $@ ++grub_emu_init.c: grub_emu_init.h genemuinit.sh $(MODULE_FILES) ++ rm -f $@; echo $(MODULE_FILES) | sh $(srcdir)/genemuinit.sh $(TARGET_NM) > $@ + CLEANFILES += grub_emu_init.c + endif + +diff --git a/grub-core/genemuinit.sh b/grub-core/genemuinit.sh +index 45c15ec..8c6bb1c 100644 +--- a/grub-core/genemuinit.sh ++++ b/grub-core/genemuinit.sh +@@ -47,7 +47,7 @@ EOF + read mods + for line in $mods; do + if ${nm} --defined-only -P -p ${line} | grep grub_mod_init > /dev/null; then +- echo "grub_${line}_init ();" | sed 's,\.mod,,g;' ++ echo "grub_${line%%.*}_init ();" + fi + done + +@@ -63,7 +63,7 @@ EOF + + for line in $mods; do + if ${nm} --defined-only -P -p ${line} | grep grub_mod_fini > /dev/null; then +- echo "grub_${line}_fini ();" | sed 's,\.mod,,g;' ++ echo "grub_${line%%.*}_fini ();" + fi + done + +diff --git a/grub-core/genemuinitheader.sh b/grub-core/genemuinitheader.sh +index 6b83f59..a99a15d 100644 +--- a/grub-core/genemuinitheader.sh ++++ b/grub-core/genemuinitheader.sh +@@ -44,9 +44,9 @@ EOF + read mods + for line in $mods; do + if ${nm} --defined-only -P -p ${line} | grep grub_mod_init > /dev/null; then +- echo "void grub_${line}_init (void);" | sed 's,\.mod,,g;' ++ echo "void grub_${line%%.*}_init (void);" + fi + if ${nm} --defined-only -P -p ${line} | grep grub_mod_fini > /dev/null; then +- echo "void grub_${line}_fini (void);" | sed 's,\.mod,,g;' ++ echo "void grub_${line%%.*}_fini (void);" + fi + done +-- +1.8.5.3 + diff --git a/0032-Don-t-draw-a-border-around-the-menu.patch b/0032-Don-t-draw-a-border-around-the-menu.patch deleted file mode 100644 index 52a7b61..0000000 --- a/0032-Don-t-draw-a-border-around-the-menu.patch +++ /dev/null @@ -1,74 +0,0 @@ -From 869a1495667b5fcff237c38d0a21067e7dded2dc Mon Sep 17 00:00:00 2001 -From: William Jon McCann -Date: Wed, 15 May 2013 16:47:33 -0400 -Subject: [PATCH 32/37] Don't draw a border around the menu - -It looks cleaner without it. ---- - grub-core/normal/menu_text.c | 43 ------------------------------------------- - 1 file changed, 43 deletions(-) - -diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c -index 6202c2a..beddd7f 100644 ---- a/grub-core/normal/menu_text.c -+++ b/grub-core/normal/menu_text.c -@@ -108,47 +108,6 @@ grub_print_message_indented (const char *msg, int margin_left, int margin_right, - grub_print_message_indented_real (msg, margin_left, margin_right, term, 0); - } - --static void --draw_border (struct grub_term_output *term, const struct grub_term_screen_geometry *geo) --{ -- int i; -- -- grub_term_setcolorstate (term, GRUB_TERM_COLOR_NORMAL); -- -- grub_term_gotoxy (term, (struct grub_term_coordinate) { geo->first_entry_x - 1, -- geo->first_entry_y - 1 }); -- grub_putcode (GRUB_UNICODE_CORNER_UL, term); -- for (i = 0; i < geo->entry_width + 1; i++) -- grub_putcode (GRUB_UNICODE_HLINE, term); -- grub_putcode (GRUB_UNICODE_CORNER_UR, term); -- -- for (i = 0; i < geo->num_entries; i++) -- { -- grub_term_gotoxy (term, (struct grub_term_coordinate) { geo->first_entry_x - 1, -- geo->first_entry_y + i }); -- grub_putcode (GRUB_UNICODE_VLINE, term); -- grub_term_gotoxy (term, -- (struct grub_term_coordinate) { geo->first_entry_x + geo->entry_width + 1, -- geo->first_entry_y + i }); -- grub_putcode (GRUB_UNICODE_VLINE, term); -- } -- -- grub_term_gotoxy (term, -- (struct grub_term_coordinate) { geo->first_entry_x - 1, -- geo->first_entry_y - 1 + geo->num_entries + 1 }); -- grub_putcode (GRUB_UNICODE_CORNER_LL, term); -- for (i = 0; i < geo->entry_width + 1; i++) -- grub_putcode (GRUB_UNICODE_HLINE, term); -- grub_putcode (GRUB_UNICODE_CORNER_LR, term); -- -- grub_term_setcolorstate (term, GRUB_TERM_COLOR_NORMAL); -- -- grub_term_gotoxy (term, -- (struct grub_term_coordinate) { geo->first_entry_x - 1, -- (geo->first_entry_y - 1 + geo->num_entries -- + GRUB_TERM_MARGIN + 1) }); --} -- - static int - print_message (int nested, int edit, struct grub_term_output *term, int dry_run) - { -@@ -403,8 +362,6 @@ grub_menu_init_page (int nested, int edit, - - grub_term_normal_color = grub_color_menu_normal; - grub_term_highlight_color = grub_color_menu_highlight; -- if (geo->border) -- draw_border (term, geo); - grub_term_normal_color = old_color_normal; - grub_term_highlight_color = old_color_highlight; - geo->timeout_y = geo->first_entry_y + geo->num_entries --- -1.8.4.2 - diff --git a/0032-Ignore-EPERM-when-modifying-kern.geom.debugflags.patch b/0032-Ignore-EPERM-when-modifying-kern.geom.debugflags.patch new file mode 100644 index 0000000..3ab062f --- /dev/null +++ b/0032-Ignore-EPERM-when-modifying-kern.geom.debugflags.patch @@ -0,0 +1,58 @@ +From d03d817508bd52995ce9ea6c1fa697856b66de46 Mon Sep 17 00:00:00 2001 +From: Colin Watson +Date: Fri, 17 Jan 2014 02:28:46 +0000 +Subject: [PATCH 032/112] Ignore EPERM when modifying kern.geom.debugflags + +Many tests fail when run as a non-root user on FreeBSD. The failures +all amount to an inability to open files using grub_util_fd_open, +because we cannot set the kern.geom.debugflags sysctl. This sysctl is +indeed important to allow us to do such things as installing GRUB to the +MBR, but if we need to do that and can't then we will get an error +later. Enforcing it here is unnecessary and prevents otherwise +perfectly reasonable operations. +--- + ChangeLog | 7 +++++++ + grub-core/osdep/freebsd/hostdisk.c | 12 ++++++++++-- + 2 files changed, 17 insertions(+), 2 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 7d207e4..cdeea66 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,10 @@ ++2014-01-19 Colin Watson ++ ++ * grub-core/osdep/freebsd/hostdisk.c (grub_util_fd_open): Ignore ++ EPERM when modifying kern.geom.debugflags. It is only a problem for ++ such things as installing GRUB to the MBR, in which case there'll be ++ an error later anyway, not for opening files during tests. ++ + 2014-01-18 Andrey Borzenkov + + * grub-core/Makefile.am: Build grub_emu_init.[ch] from MODULE_FILES +diff --git a/grub-core/osdep/freebsd/hostdisk.c b/grub-core/osdep/freebsd/hostdisk.c +index eb202dc..6145d07 100644 +--- a/grub-core/osdep/freebsd/hostdisk.c ++++ b/grub-core/osdep/freebsd/hostdisk.c +@@ -102,8 +102,16 @@ grub_util_fd_open (const char *os_dev, int flags) + if (! (sysctl_oldflags & 0x10) + && sysctlbyname ("kern.geom.debugflags", NULL , 0, &sysctl_flags, sysctl_size)) + { +- grub_error (GRUB_ERR_BAD_DEVICE, "cannot set flags of sysctl kern.geom.debugflags"); +- return GRUB_UTIL_FD_INVALID; ++ if (errno == EPERM) ++ /* Running as an unprivileged user; don't worry about restoring ++ flags, although if we try to write to anything interesting such ++ as the MBR then we may fail later. */ ++ sysctl_oldflags = 0x10; ++ else ++ { ++ grub_error (GRUB_ERR_BAD_DEVICE, "cannot set flags of sysctl kern.geom.debugflags"); ++ return GRUB_UTIL_FD_INVALID; ++ } + } + + ret = open (os_dev, flags, S_IROTH | S_IRGRP | S_IRUSR | S_IWUSR); +-- +1.8.5.3 + diff --git a/0033-Use-the-standard-margin-for-the-timeout-string.patch b/0033-Use-the-standard-margin-for-the-timeout-string.patch deleted file mode 100644 index 021ec27..0000000 --- a/0033-Use-the-standard-margin-for-the-timeout-string.patch +++ /dev/null @@ -1,43 +0,0 @@ -From fdb5da3e0a0a481d7ac25ca1dad141e692eb7e14 Mon Sep 17 00:00:00 2001 -From: William Jon McCann -Date: Fri, 7 Jun 2013 10:52:32 -0400 -Subject: [PATCH 33/37] Use the standard margin for the timeout string - -So that it aligns with the other messages ---- - grub-core/normal/menu_text.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c -index beddd7f..33b208b 100644 ---- a/grub-core/normal/menu_text.c -+++ b/grub-core/normal/menu_text.c -@@ -369,7 +369,7 @@ grub_menu_init_page (int nested, int edit, - if (bottom_message) - { - grub_term_gotoxy (term, -- (struct grub_term_coordinate) { GRUB_TERM_MARGIN, -+ (struct grub_term_coordinate) { STANDARD_MARGIN, - geo->timeout_y }); - - print_message (nested, edit, term, 0); -@@ -404,14 +404,14 @@ menu_text_print_timeout (int timeout, void *dataptr) - if (data->timeout_msg == TIMEOUT_UNKNOWN) - { - data->timeout_msg = grub_print_message_indented_real (msg_translated, -- 3, 1, data->term, 1) -+ STANDARD_MARGIN, 1, data->term, 1) - <= data->geo.timeout_lines ? TIMEOUT_NORMAL : TIMEOUT_TERSE; - if (data->timeout_msg == TIMEOUT_TERSE) - { - grub_free (msg_translated); - msg_translated = grub_xasprintf (_("%ds"), timeout); - if (grub_term_width (data->term) < 10) -- data->timeout_msg = TIMEOUT_TERSE_NO_MARGIN; -+ data->timeout_msg = STANDARD_MARGIN; - } - } - --- -1.8.4.2 - diff --git a/0033-change-stop-condition-to-avoid-infinite-loops.patch b/0033-change-stop-condition-to-avoid-infinite-loops.patch new file mode 100644 index 0000000..3cb9cfa --- /dev/null +++ b/0033-change-stop-condition-to-avoid-infinite-loops.patch @@ -0,0 +1,52 @@ +From f18970e0e0c37f5407f3259fe343dc825dfa4170 Mon Sep 17 00:00:00 2001 +From: Paulo Flabiano Smorigo +Date: Tue, 21 Jan 2014 10:49:39 -0200 +Subject: [PATCH 033/112] change stop condition to avoid infinite loops + +In net/net.c there is a while (1) that only exits if there is a stop +condition and more then 10 packages or if there is no package received. + +If GRUB is idle and enter in this loop, the only condition to leave is +if it doesn't have incoming packages. In a network with heavy traffic +this never happens. +--- + ChangeLog | 12 ++++++++++++ + grub-core/net/net.c | 2 +- + 2 files changed, 13 insertions(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index cdeea66..bbbe539 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,15 @@ ++2014-01-21 Paulo Flabiano Smorigo ++ ++ * grub-core/net/net.c (receive_packets): Change stop condition to avoid ++ infinite loops. ++ ++ In net/net.c there is a while (1) that only exits if there is a stop ++ condition and more then 10 packages or if there is no package received. ++ ++ If GRUB is idle and enter in this loop, the only condition to leave is ++ if it doesn't have incoming packages. In a network with heavy traffic ++ this never happens. ++ + 2014-01-19 Colin Watson + + * grub-core/osdep/freebsd/hostdisk.c (grub_util_fd_open): Ignore +diff --git a/grub-core/net/net.c b/grub-core/net/net.c +index 0e57e93..56355f3 100644 +--- a/grub-core/net/net.c ++++ b/grub-core/net/net.c +@@ -1453,7 +1453,7 @@ receive_packets (struct grub_net_card *card, int *stop_condition) + } + card->opened = 1; + } +- while (1) ++ while (received < 100) + { + /* Maybe should be better have a fixed number of packets for each card + and just mark them as used and not used. */ +-- +1.8.5.3 + diff --git a/0034-Fix-grub_script_execute_sourcecode-usage-on-ppc.patch b/0034-Fix-grub_script_execute_sourcecode-usage-on-ppc.patch deleted file mode 100644 index d9261c7..0000000 --- a/0034-Fix-grub_script_execute_sourcecode-usage-on-ppc.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 72cc0eaa566ac27b56c84021887ada3ba8c02380 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Fri, 10 Jan 2014 09:36:24 -0500 -Subject: [PATCH 34/37] Fix grub_script_execute_sourcecode() usage on ppc. - -593e430c made it not take the extra argc/argv that this code still -passes it. - -Signed-off-by: Peter Jones ---- - grub-core/normal/main.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c -index 6c24a07..6eae828 100644 ---- a/grub-core/normal/main.c -+++ b/grub-core/normal/main.c -@@ -281,7 +281,7 @@ grub_normal_execute (const char *config, int nested, int batch) - if (! grub_ieee1275_cas_reboot (script)) - { - char *dummy[1] = { NULL }; -- if (! grub_script_execute_sourcecode (script, 0, dummy)) -+ if (! grub_script_execute_sourcecode (script)) - boot = 1; - } - grub_free (script); --- -1.8.4.2 - diff --git a/0034-increase-network-try-interval-gradually.patch b/0034-increase-network-try-interval-gradually.patch new file mode 100644 index 0000000..5894025 --- /dev/null +++ b/0034-increase-network-try-interval-gradually.patch @@ -0,0 +1,111 @@ +From 7533a737e4965d314c86f06a35a5f3f9cffb8318 Mon Sep 17 00:00:00 2001 +From: Paulo Flabiano Smorigo +Date: Tue, 21 Jan 2014 11:03:51 -0200 +Subject: [PATCH 034/112] increase network try interval gradually + +* grub-core/net/arp.c (grub_net_arp_send_request): Increase network try +interval gradually. +* grub-core/net/icmp6.c (grub_net_icmp6_send_request): Likewise. +* grub-core/net/net.c (grub_net_fs_read_real): Likewise. +* grub-core/net/tftp.c (tftp_open): Likewise. +* include/grub/net.h (GRUB_NET_INTERVAL_ADDITION): New define. +--- + ChangeLog | 9 +++++++++ + grub-core/net/arp.c | 3 ++- + grub-core/net/icmp6.c | 3 ++- + grub-core/net/net.c | 5 +++-- + grub-core/net/tftp.c | 3 ++- + include/grub/net.h | 1 + + 6 files changed, 19 insertions(+), 5 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index bbbe539..33fa6b1 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,14 @@ + 2014-01-21 Paulo Flabiano Smorigo + ++ * grub-core/net/arp.c (grub_net_arp_send_request): Increase network try ++ interval gradually. ++ * grub-core/net/icmp6.c (grub_net_icmp6_send_request): Likewise. ++ * grub-core/net/net.c (grub_net_fs_read_real): Likewise. ++ * grub-core/net/tftp.c (tftp_open): Likewise. ++ * include/grub/net.h (GRUB_NET_INTERVAL_ADDITION): New define. ++ ++2014-01-21 Paulo Flabiano Smorigo ++ + * grub-core/net/net.c (receive_packets): Change stop condition to avoid + infinite loops. + +diff --git a/grub-core/net/arp.c b/grub-core/net/arp.c +index e92c7e7..d62d0cc 100644 +--- a/grub-core/net/arp.c ++++ b/grub-core/net/arp.c +@@ -110,7 +110,8 @@ grub_net_arp_send_request (struct grub_net_network_level_interface *inf, + return GRUB_ERR_NONE; + pending_req = proto_addr->ipv4; + have_pending = 0; +- grub_net_poll_cards (GRUB_NET_INTERVAL, &have_pending); ++ grub_net_poll_cards (GRUB_NET_INTERVAL + (i * GRUB_NET_INTERVAL_ADDITION), ++ &have_pending); + if (grub_net_link_layer_resolve_check (inf, proto_addr)) + return GRUB_ERR_NONE; + nb.data = nbd; +diff --git a/grub-core/net/icmp6.c b/grub-core/net/icmp6.c +index 2741e6f..bbc9020 100644 +--- a/grub-core/net/icmp6.c ++++ b/grub-core/net/icmp6.c +@@ -518,7 +518,8 @@ grub_net_icmp6_send_request (struct grub_net_network_level_interface *inf, + { + if (grub_net_link_layer_resolve_check (inf, proto_addr)) + break; +- grub_net_poll_cards (GRUB_NET_INTERVAL, 0); ++ grub_net_poll_cards (GRUB_NET_INTERVAL + (i * GRUB_NET_INTERVAL_ADDITION), ++ 0); + if (grub_net_link_layer_resolve_check (inf, proto_addr)) + break; + nb->data = nbd; +diff --git a/grub-core/net/net.c b/grub-core/net/net.c +index 56355f3..1521d8d 100644 +--- a/grub-core/net/net.c ++++ b/grub-core/net/net.c +@@ -1558,8 +1558,9 @@ grub_net_fs_read_real (grub_file_t file, char *buf, grub_size_t len) + if (!net->eof) + { + try++; +- grub_net_poll_cards (GRUB_NET_INTERVAL, &net->stall); +- } ++ grub_net_poll_cards (GRUB_NET_INTERVAL + ++ (try * GRUB_NET_INTERVAL_ADDITION), &net->stall); ++ } + else + return total; + } +diff --git a/grub-core/net/tftp.c b/grub-core/net/tftp.c +index 9c489f1..5173614 100644 +--- a/grub-core/net/tftp.c ++++ b/grub-core/net/tftp.c +@@ -398,7 +398,8 @@ tftp_open (struct grub_file *file, const char *filename) + destroy_pq (data); + return err; + } +- grub_net_poll_cards (GRUB_NET_INTERVAL, &data->have_oack); ++ grub_net_poll_cards (GRUB_NET_INTERVAL + (i * GRUB_NET_INTERVAL_ADDITION), ++ &data->have_oack); + if (data->have_oack) + break; + } +diff --git a/include/grub/net.h b/include/grub/net.h +index de6259e..0e0a605 100644 +--- a/include/grub/net.h ++++ b/include/grub/net.h +@@ -532,5 +532,6 @@ extern char *grub_net_default_server; + + #define GRUB_NET_TRIES 40 + #define GRUB_NET_INTERVAL 400 ++#define GRUB_NET_INTERVAL_ADDITION 20 + + #endif /* ! GRUB_NET_HEADER */ +-- +1.8.5.3 + diff --git a/0035-Add-.eh_frame-to-list-of-relocations-stripped.patch b/0035-Add-.eh_frame-to-list-of-relocations-stripped.patch deleted file mode 100644 index 541144f..0000000 --- a/0035-Add-.eh_frame-to-list-of-relocations-stripped.patch +++ /dev/null @@ -1,25 +0,0 @@ -From b8390dd8375913be61332cde658506d5d7ae11b0 Mon Sep 17 00:00:00 2001 -From: Fedora Ninjas -Date: Mon, 13 Jan 2014 21:50:59 -0500 -Subject: [PATCH 35/37] Add .eh_frame to list of relocations stripped - ---- - conf/Makefile.common | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/conf/Makefile.common b/conf/Makefile.common -index e4c301f..6f836d8 100644 ---- a/conf/Makefile.common -+++ b/conf/Makefile.common -@@ -45,7 +45,7 @@ CFLAGS_KERNEL = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding - LDFLAGS_KERNEL = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) $(TARGET_LDFLAGS_STATIC_LIBGCC) - CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -DGRUB_KERNEL=1 - CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) --STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version -+STRIPFLAGS_KERNEL = -R .eh_frame -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version - - CFLAGS_MODULE = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding - LDFLAGS_MODULE = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-r,-d --- -1.8.4.2 - diff --git a/0035-look-for-DejaVu-also-in-usr-share-fonts-truetype.patch b/0035-look-for-DejaVu-also-in-usr-share-fonts-truetype.patch new file mode 100644 index 0000000..c1ec284 --- /dev/null +++ b/0035-look-for-DejaVu-also-in-usr-share-fonts-truetype.patch @@ -0,0 +1,39 @@ +From 35a28bea958018b24f6a2a7dc3cf2e72bc9e2953 Mon Sep 17 00:00:00 2001 +From: Andrey Borzenkov +Date: Tue, 21 Jan 2014 19:29:33 +0400 +Subject: [PATCH 035/112] look for DejaVu also in /usr/share/fonts/truetype + +It is installed in this path on openSUSE. +--- + ChangeLog | 4 ++++ + configure.ac | 2 +- + 2 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index 33fa6b1..e884b4e 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,7 @@ ++2014-01-21 Andrey Borzenkov ++ ++ * configure.ac: Look for DejaVuSans also in /usr/share/fonts/truetype. ++ + 2014-01-21 Paulo Flabiano Smorigo + + * grub-core/net/arp.c (grub_net_arp_send_request): Increase network try +diff --git a/configure.ac b/configure.ac +index cf3de3b..120263e 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1389,7 +1389,7 @@ fi + + if test x"$starfield_excuse" = x; then + for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do +- for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/truetype/ttf-dejavu /usr/share/fonts/dejavu; do ++ for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/truetype/ttf-dejavu /usr/share/fonts/dejavu /usr/share/fonts/truetype; do + if test -f "$dir/DejaVuSans.$ext"; then + DJVU_FONT_SOURCE="$dir/DejaVuSans.$ext" + break 2 +-- +1.8.5.3 + diff --git a/0036-Show-detected-path-to-DejaVuSans-in-configure-summar.patch b/0036-Show-detected-path-to-DejaVuSans-in-configure-summar.patch new file mode 100644 index 0000000..da8efb1 --- /dev/null +++ b/0036-Show-detected-path-to-DejaVuSans-in-configure-summar.patch @@ -0,0 +1,37 @@ +From 85db438f517cda4f9b9acfc0281ebf6cf7c47e1a Mon Sep 17 00:00:00 2001 +From: Andrey Borzenkov +Date: Tue, 21 Jan 2014 19:41:11 +0400 +Subject: [PATCH 036/112] Show detected path to DejaVuSans in configure summary + +--- + ChangeLog | 1 + + configure.ac | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/ChangeLog b/ChangeLog +index e884b4e..f463e8b 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,6 +1,7 @@ + 2014-01-21 Andrey Borzenkov + + * configure.ac: Look for DejaVuSans also in /usr/share/fonts/truetype. ++ Show detected font path in summary. + + 2014-01-21 Paulo Flabiano Smorigo + +diff --git a/configure.ac b/configure.ac +index 120263e..8888c2f 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1816,6 +1816,7 @@ echo grub-mount: No "($grub_mount_excuse)" + fi + if [ x"$starfield_excuse" = x ]; then + echo starfield theme: Yes ++echo With DejaVuSans font from $DJVU_FONT_SOURCE + else + echo starfield theme: No "($starfield_excuse)" + fi +-- +1.8.5.3 + diff --git a/0036-arm64-set-correct-length-of-device-path-end-entry.patch b/0036-arm64-set-correct-length-of-device-path-end-entry.patch deleted file mode 100644 index e6a30b2..0000000 --- a/0036-arm64-set-correct-length-of-device-path-end-entry.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 7cbcbea853d19c54fae31681be7d73c5dd0c0b4b Mon Sep 17 00:00:00 2001 -From: Leif Lindholm -Date: Tue, 7 Jan 2014 17:52:50 +0000 -Subject: [PATCH 36/37] arm64: set correct length of device path end entry - -The length of the Device Path End entry in the grub_linux_boot() -function was incorrectly set to 0. This triggers an assert failure -in debug builds of Tianocore. - -Set it to sizeof (grub_efi_device_path_t). ---- - ChangeLog | 4 ++++ - grub-core/loader/arm64/linux.c | 2 +- - 2 files changed, 5 insertions(+), 1 deletion(-) - -diff --git a/ChangeLog b/ChangeLog -index 41bcebf..cc1ff58 100644 ---- a/ChangeLog -+++ b/ChangeLog -@@ -1,3 +1,7 @@ -+2014-01-07 Leif Lindholm -+ -+ * grub-core/loader/arm64/linux.c: correctly set device path end length. -+ - 2013-12-24 Vladimir Serbinenko - - * configure.ac: Set version to 2.02~beta2. -diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c -index 9d15aad..75ad871 100644 ---- a/grub-core/loader/arm64/linux.c -+++ b/grub-core/loader/arm64/linux.c -@@ -268,7 +268,7 @@ grub_linux_boot (void) - - mempath[1].header.type = GRUB_EFI_END_DEVICE_PATH_TYPE; - mempath[1].header.subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; -- mempath[1].header.length = 0; -+ mempath[1].header.length = sizeof (grub_efi_device_path_t); - - b = grub_efi_system_table->boot_services; - status = b->load_image (0, grub_efi_image_handle, --- -1.8.4.2 - diff --git a/0037-Make-10_linux-work-with-our-changes-for-linux16-and-.patch b/0037-Make-10_linux-work-with-our-changes-for-linux16-and-.patch deleted file mode 100644 index 662c615..0000000 --- a/0037-Make-10_linux-work-with-our-changes-for-linux16-and-.patch +++ /dev/null @@ -1,85 +0,0 @@ -From fd50e126118bbe1f09f1d7aa576240a61fefc479 Mon Sep 17 00:00:00 2001 -From: Peter Jones -Date: Tue, 14 Jan 2014 13:12:23 -0500 -Subject: [PATCH 37/37] Make 10_linux work with our changes for linux16 and - linuxefi on aarch64 - -Signed-off-by: Peter Jones ---- - util/grub.d/10_linux.in | 31 ++++++++++++++++++++++++++++--- - 1 file changed, 28 insertions(+), 3 deletions(-) - -diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in -index c943a1e..2b8c561 100644 ---- a/util/grub.d/10_linux.in -+++ b/util/grub.d/10_linux.in -@@ -75,8 +75,18 @@ linux_entry () - args="$4" - - sixteenbit="" -+ linuxefi="linux" -+ initrdefi="initrd" - case "$machine" in -- i?86|x86_64) sixteenbit="16" ;; -+ i?86|x86_64) -+ sixteenbit="16" -+ linuxefi="linuxefi" -+ initrdefi="initrdefi" -+ ;; -+ aarch64) -+ linuxefi="linux" -+ initrdefi="initrd" -+ ;; - esac - - if [ -z "$boot_device_id" ]; then -@@ -133,7 +143,7 @@ linux_entry () - fi - if [ -d /sys/firmware/efi ]; then - sed "s/^/$submenu_indentation/" << EOF -- linuxefi ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} -+ ${linuxefi} ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} - EOF - else - sed "s/^/$submenu_indentation/" << EOF -@@ -143,7 +153,7 @@ EOF - if test -n "${initrd}" ; then - if [ -d /sys/firmware/efi ]; then - sed "s/^/$submenu_indentation/" << EOF -- initrdefi ${rel_dirname}/${initrd} -+ ${initrdefi} ${rel_dirname}/${initrd} - EOF - else - sed "s/^/$submenu_indentation/" << EOF -@@ -151,6 +161,13 @@ EOF - EOF - fi - fi -+ if test -n "${fdt}" ; then -+ message="$(gettext_printf "Loading fdt ...")" -+ sed "s/^/$submenu_indentation/" << EOF -+ echo '$(echo "$message" | grub_quote)' -+ devicetree ${rel_dirname}/${fdt} -+EOF -+ fi - sed "s/^/$submenu_indentation/" << EOF - } - EOF -@@ -211,6 +228,14 @@ while [ "x$list" != "x" ] ; do - fi - done - -+ fdt= -+ for i in "dtb-${version}" "dtb-${alt_version}"; do -+ if test -e "${dirname}/${i}/foundation-v8.dtb" ; then -+ fdt="${i}/foundation-v8.dtb" -+ break -+ fi -+ done -+ - config= - for i in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do - if test -e "${i}" ; then --- -1.8.4.2 - diff --git a/0037-add-GRUB_WINDOWS_EXTRA_DIST-to-allow-shipping-runtim.patch b/0037-add-GRUB_WINDOWS_EXTRA_DIST-to-allow-shipping-runtim.patch new file mode 100644 index 0000000..693ac4e --- /dev/null +++ b/0037-add-GRUB_WINDOWS_EXTRA_DIST-to-allow-shipping-runtim.patch @@ -0,0 +1,62 @@ +From 7954e6250ac4f0e1287c5a89dd13539dfaa711e8 Mon Sep 17 00:00:00 2001 +From: Andrey Borzenkov +Date: Tue, 21 Jan 2014 20:54:09 +0400 +Subject: [PATCH 037/112] add GRUB_WINDOWS_EXTRA_DIST to allow shipping runtime + files + +Not all toolkits provide static libraries. This patch enables creation of self +contained distribution that does not require pre-existing runtime libraries. +Intended usage is + +export GRUB_WINDOWS_EXTRA_DIST="/path/to/liblzma.dll /path/to/libintl.dll" +make +make windowszip + +As those libraries and locations are dependent on toolchain in use, trying +to autodetect them is likely impossible. So just provide a simple way to +package everything in one step. + +Also remove $(windowsdir) after ZIP was created same as other "make dist" +targets. +--- + ChangeLog | 5 +++++ + Makefile.am | 4 ++++ + 2 files changed, 9 insertions(+) + +diff --git a/ChangeLog b/ChangeLog +index f463e8b..749d27c 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,10 @@ + 2014-01-21 Andrey Borzenkov + ++ * Makefile.am: Allow adding extra files to generated Windows ZIP ++ archive by setting GRUB_WINDOWS_EXTRA_DIST. ++ ++2014-01-21 Andrey Borzenkov ++ + * configure.ac: Look for DejaVuSans also in /usr/share/fonts/truetype. + Show detected font path in summary. + +diff --git a/Makefile.am b/Makefile.am +index 97c062d..f02ae0a 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -420,10 +420,14 @@ windowsdir: $(PROGRAMS) $(starfield_DATA) $(platform_DATA) + for x in $(starfield_DATA); do \ + cp -fp $$x $(windowsdir)/themes/starfield/$$(basename $$x); \ + done ++ for x in $(GRUB_WINDOWS_EXTRA_DIST); do \ ++ cp -fp $$x $(windowsdir); \ ++ done + + windowszip=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows.zip + windowszip: windowsdir + test -f $(windowszip) && rm $(windowszip) || true + zip -r $(windowszip) $(windowsdir) ++ rm -rf $(windowsdir) + + EXTRA_DIST += linguas.sh +-- +1.8.5.3 + diff --git a/0038-util-grub-install.c-write_to_disk-Add-an-info-messag.patch b/0038-util-grub-install.c-write_to_disk-Add-an-info-messag.patch new file mode 100644 index 0000000..f3b7458 --- /dev/null +++ b/0038-util-grub-install.c-write_to_disk-Add-an-info-messag.patch @@ -0,0 +1,38 @@ +From 898e360b77d581651cdb098d920868676055decf Mon Sep 17 00:00:00 2001 +From: Colin Watson +Date: Thu, 23 Jan 2014 12:05:36 +0000 +Subject: [PATCH 038/112] * util/grub-install.c (write_to_disk): Add an info + message. + +--- + ChangeLog | 4 ++++ + util/grub-install.c | 1 + + 2 files changed, 5 insertions(+) + +diff --git a/ChangeLog b/ChangeLog +index 749d27c..925e448 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,7 @@ ++2014-01-23 Colin Watson ++ ++ * util/grub-install.c (write_to_disk): Add an info message. ++ + 2014-01-21 Andrey Borzenkov + + * Makefile.am: Allow adding extra files to generated Windows ZIP +diff --git a/util/grub-install.c b/util/grub-install.c +index 5903f34..787dc90 100644 +--- a/util/grub-install.c ++++ b/util/grub-install.c +@@ -675,6 +675,7 @@ write_to_disk (grub_device_t dev, const char *fn) + + core_img = grub_util_read_image (fn); + ++ grub_util_info ("writing `%s' to `%s'", fn, dev->disk->name); + err = grub_disk_write (dev->disk, 0, 0, + core_size, core_img); + free (core_img); +-- +1.8.5.3 + diff --git a/0039-util-grub-install.c-List-available-targets.patch b/0039-util-grub-install.c-List-available-targets.patch new file mode 100644 index 0000000..3ba942b --- /dev/null +++ b/0039-util-grub-install.c-List-available-targets.patch @@ -0,0 +1,109 @@ +From d9a6e0c6231786a9f2e003606ee6ba16f1fb5f79 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Fri, 24 Jan 2014 18:09:25 +0100 +Subject: [PATCH 039/112] * util/grub-install.c: List available targets. + +--- + ChangeLog | 4 ++++ + include/grub/util/install.h | 2 ++ + util/grub-install-common.c | 30 ++++++++++++++++++++++++++++++ + util/grub-install.c | 10 ++++++++-- + 4 files changed, 44 insertions(+), 2 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 925e448..f37f8b1 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,7 @@ ++2014-01-24 Vladimir Serbinenko ++ ++ * util/grub-install.c: List available targets. ++ + 2014-01-23 Colin Watson + + * util/grub-install.c (write_to_disk): Add an info message. +diff --git a/include/grub/util/install.h b/include/grub/util/install.h +index bc987aa..aedcd29 100644 +--- a/include/grub/util/install.h ++++ b/include/grub/util/install.h +@@ -138,6 +138,8 @@ grub_install_get_platform_cpu (enum grub_install_plat platid); + const char * + grub_install_get_platform_platform (enum grub_install_plat platid); + ++char * ++grub_install_get_platforms_string (void); + + typedef enum { + GRUB_COMPRESSION_AUTO, +diff --git a/util/grub-install-common.c b/util/grub-install-common.c +index 6ea0a8e..c8bedcb 100644 +--- a/util/grub-install-common.c ++++ b/util/grub-install-common.c +@@ -668,6 +668,36 @@ static struct + }; + + char * ++grub_install_get_platforms_string (void) ++{ ++ char **arr = xmalloc (sizeof (char *) * ARRAY_SIZE (platforms)); ++ int platform_strins_len = 0; ++ char *platforms_string; ++ char *ptr; ++ unsigned i; ++ for (i = 0; i < ARRAY_SIZE (platforms); i++) ++ { ++ arr[i] = xasprintf ("%s-%s", platforms[i].cpu, ++ platforms[i].platform); ++ platform_strins_len += strlen (arr[i]) + 2; ++ } ++ ptr = platforms_string = xmalloc (platform_strins_len); ++ qsort (arr, ARRAY_SIZE (platforms), sizeof (char *), grub_qsort_strcmp); ++ for (i = 0; i < ARRAY_SIZE (platforms); i++) ++ { ++ strcpy (ptr, arr[i]); ++ ptr += strlen (arr[i]); ++ *ptr++ = ','; ++ *ptr++ = ' '; ++ free (arr[i]); ++ } ++ ptr[-2] = 0; ++ free (arr); ++ ++ return platforms_string; ++} ++ ++char * + grub_install_get_platform_name (enum grub_install_plat platid) + { + return xasprintf ("%s-%s", platforms[platid].cpu, +diff --git a/util/grub-install.c b/util/grub-install.c +index 787dc90..2e6226a 100644 +--- a/util/grub-install.c ++++ b/util/grub-install.c +@@ -256,7 +256,7 @@ static struct argp_option options[] = { + OPTION_HIDDEN, 0, 2}, + {"target", OPTION_TARGET, N_("TARGET"), + /* TRANSLATORS: "TARGET" as in "target platform". */ +- 0, N_("install GRUB for TARGET platform [default=%s]"), 2}, ++ 0, N_("install GRUB for TARGET platform [default=%s]; available targets: %s"), 2}, + {"grub-setup", OPTION_SETUP, "FILE", OPTION_HIDDEN, 0, 2}, + {"grub-mkrelpath", OPTION_MKRELPATH, "FILE", OPTION_HIDDEN, 0, 2}, + {"grub-mkdevicemap", OPTION_MKDEVICEMAP, "FILE", OPTION_HIDDEN, 0, 2}, +@@ -340,7 +340,13 @@ help_filter (int key, const char *text, void *input __attribute__ ((unused))) + case OPTION_BOOT_DIRECTORY: + return xasprintf (text, GRUB_DIR_NAME, GRUB_BOOT_DIR_NAME "/" GRUB_DIR_NAME); + case OPTION_TARGET: +- return xasprintf (text, get_default_platform ()); ++ { ++ char *plats = grub_install_get_platforms_string (); ++ char *ret; ++ ret = xasprintf (text, get_default_platform (), plats); ++ free (plats); ++ return ret; ++ } + case ARGP_KEY_HELP_POST_DOC: + return xasprintf (text, program_name, GRUB_BOOT_DIR_NAME "/" GRUB_DIR_NAME); + default: +-- +1.8.5.3 + diff --git a/0040-Fix-several-translatable-strings.patch b/0040-Fix-several-translatable-strings.patch new file mode 100644 index 0000000..6de4ec5 --- /dev/null +++ b/0040-Fix-several-translatable-strings.patch @@ -0,0 +1,78 @@ +From a02fb69a9f830c19f5bf541a2c8e5ddd905e5904 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Fri, 24 Jan 2014 18:20:27 +0100 +Subject: [PATCH 040/112] Fix several translatable strings. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + Suggested by: D. Prévot. +--- + ChangeLog | 6 ++++++ + grub-core/commands/syslinuxcfg.c | 2 +- + grub-core/loader/arm64/linux.c | 2 +- + util/grub-syslinux2cfg.c | 4 ++-- + 4 files changed, 10 insertions(+), 4 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index f37f8b1..192faac 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,11 @@ + 2014-01-24 Vladimir Serbinenko + ++ Fix several translatable strings. ++ ++ Suggested by: D. Prévot. ++ ++2014-01-24 Vladimir Serbinenko ++ + * util/grub-install.c: List available targets. + + 2014-01-23 Colin Watson +diff --git a/grub-core/commands/syslinuxcfg.c b/grub-core/commands/syslinuxcfg.c +index a4bfc40..00ae113 100644 +--- a/grub-core/commands/syslinuxcfg.c ++++ b/grub-core/commands/syslinuxcfg.c +@@ -50,7 +50,7 @@ static const struct grub_arg_option options[] = + N_("root directory of the syslinux disk [default=/]."), + N_("DIR"), ARG_TYPE_STRING}, + {"cwd", 'c', 0, +- N_("current directory of the syslinux [default is parent directory of input file]."), ++ N_("current directory of syslinux [default is parent directory of input file]."), + N_("DIR"), ARG_TYPE_STRING}, + {"isolinux", 'i', 0, N_("assume input is an isolinux configuration file."), 0, 0}, + {"pxelinux", 'p', 0, N_("assume input is a pxelinux configuration file."), 0, 0}, +diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c +index 75ad871..65129c2 100644 +--- a/grub-core/loader/arm64/linux.c ++++ b/grub-core/loader/arm64/linux.c +@@ -120,7 +120,7 @@ check_kernel (struct grub_arm64_linux_kernel_header *lh) + + if ((lh->code0 & 0xffff) != GRUB_EFI_PE_MAGIC) + return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, +- N_("plain Image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled")); ++ N_("plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled")); + + grub_dprintf ("linux", "UEFI stub kernel:\n"); + grub_dprintf ("linux", "text_offset = 0x%012llx\n", +diff --git a/util/grub-syslinux2cfg.c b/util/grub-syslinux2cfg.c +index 5e944c2..f4fda6d 100644 +--- a/util/grub-syslinux2cfg.c ++++ b/util/grub-syslinux2cfg.c +@@ -66,10 +66,10 @@ static struct argp_option options[] = { + N_("root directory of the syslinux disk [default=/]."), 0}, + {"target-cwd", 'T', N_("DIR"), 0, + N_( +- "current directory of the syslinux as it will be seen on runtime [default is parent directory of input file]." ++ "current directory of syslinux as it will be seen on runtime [default is parent directory of input file]." + ), 0}, + {"cwd", 'c', N_("DIR"), 0, +- N_("current directory of the syslinux [default is parent directory of input file]."), 0}, ++ N_("current directory of syslinux [default is parent directory of input file]."), 0}, + + {"output", 'o', N_("FILE"), 0, N_("write output to FILE [default=stdout]."), 0}, + {"isolinux", 'i', 0, 0, N_("assume input is an isolinux configuration file."), 0}, +-- +1.8.5.3 + diff --git a/0041-do-not-set-default-prefix-in-grub-mkimage.patch b/0041-do-not-set-default-prefix-in-grub-mkimage.patch new file mode 100644 index 0000000..8798daa --- /dev/null +++ b/0041-do-not-set-default-prefix-in-grub-mkimage.patch @@ -0,0 +1,75 @@ +From 1394cba424ec21b2d7f87b89517aeaa80125cb80 Mon Sep 17 00:00:00 2001 +From: Andrey Borzenkov +Date: Sat, 25 Jan 2014 19:54:51 +0400 +Subject: [PATCH 041/112] do not set default prefix in grub-mkimage + +Default prefix is likely wrong on Unix and completely wrong on Windows. +Let caller set it explicitly to avoid any ambiguity. +--- + ChangeLog | 4 ++++ + util/grub-mkimage.c | 16 +++++++++++----- + 2 files changed, 15 insertions(+), 5 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 192faac..000cfe3 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,7 @@ ++2014-01-25 Andrey Borzenkov ++ ++ * util/grub-mkimage.c: Make prefix argument mandatory. ++ + 2014-01-24 Vladimir Serbinenko + + Fix several translatable strings. +diff --git a/util/grub-mkimage.c b/util/grub-mkimage.c +index a2bd4c1..1e0bcf1 100644 +--- a/util/grub-mkimage.c ++++ b/util/grub-mkimage.c +@@ -64,7 +64,7 @@ static struct argp_option options[] = { + {"directory", 'd', N_("DIR"), 0, + /* TRANSLATORS: platform here isn't identifier. It can be translated. */ + N_("use images and modules under DIR [default=%s/]"), 0}, +- {"prefix", 'p', N_("DIR"), 0, N_("set prefix directory [default=%s]"), 0}, ++ {"prefix", 'p', N_("DIR"), 0, N_("set prefix directory"), 0}, + {"memdisk", 'm', N_("FILE"), 0, + /* TRANSLATORS: "memdisk" here isn't an identifier, it can be translated. + "embed" is a verb (command description). "*/ +@@ -93,8 +93,6 @@ help_filter (int key, const char *text, void *input __attribute__ ((unused))) + { + case 'd': + return xasprintf (text, grub_util_get_pkglibdir ()); +- case 'p': +- return xasprintf (text, DEFAULT_DIRECTORY); + case 'O': + { + char *formats = grub_install_get_image_targets_string (), *ret; +@@ -268,6 +266,15 @@ main (int argc, char *argv[]) + exit(1); + } + ++ if (!arguments.prefix) ++ { ++ char *program = xstrdup(program_name); ++ printf ("%s\n", _("Prefix not specified (use the -p option).")); ++ argp_help (&argp, stderr, ARGP_HELP_STD_USAGE, program); ++ free (program); ++ exit(1); ++ } ++ + if (arguments.output) + { + fp = grub_util_fopen (arguments.output, "wb"); +@@ -287,8 +294,7 @@ main (int argc, char *argv[]) + strcpy (ptr, dn); + } + +- grub_install_generate_image (arguments.dir, +- arguments.prefix ? : DEFAULT_DIRECTORY, fp, ++ grub_install_generate_image (arguments.dir, arguments.prefix, fp, + arguments.output, arguments.modules, + arguments.memdisk, arguments.pubkeys, + arguments.npubkeys, arguments.config, +-- +1.8.5.3 + diff --git a/0042-fix-Mingw-W64-32-cross-compile-failure-due-to-printf.patch b/0042-fix-Mingw-W64-32-cross-compile-failure-due-to-printf.patch new file mode 100644 index 0000000..d9920b3 --- /dev/null +++ b/0042-fix-Mingw-W64-32-cross-compile-failure-due-to-printf.patch @@ -0,0 +1,108 @@ +From 9a999c97353bddd8c3e6bfdbe7fd19d9f3d54a22 Mon Sep 17 00:00:00 2001 +From: Andrey Borzenkov +Date: Sat, 25 Jan 2014 21:49:41 +0400 +Subject: [PATCH 042/112] fix Mingw W64-32 cross compile failure due to printf + redefinition in libintl.h + +In file included from util/misc.c:36:0: +./include/grub/emu/misc.h:56:1: error: 'libintl_printf' is an unrecognized format function type [-Werror=format=] + char * EXPORT_FUNC(xasprintf) (const char *fmt, ...) __attribute__ ((format (printf, 1, 2))) WARN_UNUSED_RESULT; + ^ +./include/grub/emu/misc.h:58:1: error: 'libintl_printf' is an unrecognized format function type [-Werror=format=] + +The reason is libintl.h which redefines printf as libintl_printf. The problem +is not present in native MinGW build which avoids redefinition. Use +(format (__printf__) instead which is valid replacement in GCC. + +v2: add grub-core/lib/libgcrypt/src/g10lib.h +v3: modify g10lib.h during import +--- + ChangeLog | 9 +++++++++ + include/grub/crypto.h | 2 +- + include/grub/emu/misc.h | 8 ++++---- + include/grub/err.h | 2 +- + util/import_gcry.py | 6 ++++++ + 5 files changed, 21 insertions(+), 6 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 000cfe3..5707a2a 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,12 @@ ++ ++2014-01-25 Andrey Borzenkov ++ ++ * include/grub/crypto.h: Replace __attribute__ ((format (printf)) with ++ __attribute__ ((format (__printf__)) to fix compilation under MinGW-w64. ++ * include/grub/emu/misc.h: ... and here. ++ * include/grub/err.h: ... and here. ++ * util/import_gcry.py: ... and here (in files g10lib.h). ++ + 2014-01-25 Andrey Borzenkov + + * util/grub-mkimage.c: Make prefix argument mandatory. +diff --git a/include/grub/crypto.h b/include/grub/crypto.h +index ec1b980..a24e89d 100644 +--- a/include/grub/crypto.h ++++ b/include/grub/crypto.h +@@ -408,7 +408,7 @@ void _gcry_assert_failed (const char *expr, const char *file, int line, + const char *func) __attribute__ ((noreturn)); + + void _gcry_burn_stack (int bytes); +-void _gcry_log_error( const char *fmt, ... ) __attribute__ ((format (printf, 1, 2))); ++void _gcry_log_error( const char *fmt, ... ) __attribute__ ((format (__printf__, 1, 2))); + + + #ifdef GRUB_UTIL +diff --git a/include/grub/emu/misc.h b/include/grub/emu/misc.h +index dde48c1..a588ba2 100644 +--- a/include/grub/emu/misc.h ++++ b/include/grub/emu/misc.h +@@ -53,11 +53,11 @@ grub_util_device_is_mapped (const char *dev); + void * EXPORT_FUNC(xmalloc) (grub_size_t size) WARN_UNUSED_RESULT; + void * EXPORT_FUNC(xrealloc) (void *ptr, grub_size_t size) WARN_UNUSED_RESULT; + char * EXPORT_FUNC(xstrdup) (const char *str) WARN_UNUSED_RESULT; +-char * EXPORT_FUNC(xasprintf) (const char *fmt, ...) __attribute__ ((format (printf, 1, 2))) WARN_UNUSED_RESULT; ++char * EXPORT_FUNC(xasprintf) (const char *fmt, ...) __attribute__ ((format (__printf__, 1, 2))) WARN_UNUSED_RESULT; + +-void EXPORT_FUNC(grub_util_warn) (const char *fmt, ...) __attribute__ ((format (printf, 1, 2))); +-void EXPORT_FUNC(grub_util_info) (const char *fmt, ...) __attribute__ ((format (printf, 1, 2))); +-void EXPORT_FUNC(grub_util_error) (const char *fmt, ...) __attribute__ ((format (printf, 1, 2), noreturn)); ++void EXPORT_FUNC(grub_util_warn) (const char *fmt, ...) __attribute__ ((format (__printf__, 1, 2))); ++void EXPORT_FUNC(grub_util_info) (const char *fmt, ...) __attribute__ ((format (__printf__, 1, 2))); ++void EXPORT_FUNC(grub_util_error) (const char *fmt, ...) __attribute__ ((format (__printf__, 1, 2), noreturn)); + + grub_uint64_t EXPORT_FUNC (grub_util_get_cpu_time_ms) (void); + +diff --git a/include/grub/err.h b/include/grub/err.h +index 9896fcc..1590c68 100644 +--- a/include/grub/err.h ++++ b/include/grub/err.h +@@ -91,6 +91,6 @@ int EXPORT_FUNC(grub_error_pop) (void); + void EXPORT_FUNC(grub_print_error) (void); + extern int EXPORT_VAR(grub_err_printed_errors); + int grub_err_printf (const char *fmt, ...) +- __attribute__ ((format (printf, 1, 2))); ++ __attribute__ ((format (__printf__, 1, 2))); + + #endif /* ! GRUB_ERR_HEADER */ +diff --git a/util/import_gcry.py b/util/import_gcry.py +index 63ebb90..2b3322d 100644 +--- a/util/import_gcry.py ++++ b/util/import_gcry.py +@@ -534,6 +534,12 @@ for src in sorted (os.listdir (os.path.join (indir, "src"))): + fw.close () + continue + ++ if src == "g10lib.h": ++ fw.write (f.read ().replace ("(printf,f,a)", "(__printf__,f,a)")) ++ f.close () ++ fw.close () ++ continue ++ + fw.write (f.read ()) + f.close () + fw.close () +-- +1.8.5.3 + diff --git a/0043-grub-core-term-serial.c-grub_serial_register-Fix-inv.patch b/0043-grub-core-term-serial.c-grub_serial_register-Fix-inv.patch new file mode 100644 index 0000000..60f7f65 --- /dev/null +++ b/0043-grub-core-term-serial.c-grub_serial_register-Fix-inv.patch @@ -0,0 +1,60 @@ +From 9c84b40fa784f6c991f1ad16327843f3998134e2 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Sun, 26 Jan 2014 02:36:05 +0100 +Subject: [PATCH 043/112] * grub-core/term/serial.c + (grub_serial_register): Fix invalid free. Ensure that pointers are + inited to NULL and that pointers are not accessed after free. + +--- + ChangeLog | 5 +++++ + grub-core/term/serial.c | 8 ++++---- + 2 files changed, 9 insertions(+), 4 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 5707a2a..1bb6bff 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,8 @@ ++2014-01-26 Vladimir Serbinenko ++ ++ * grub-core/term/serial.c (grub_serial_register): Fix invalid free. ++ Ensure that pointers are inited to NULL and that pointers are not ++ accessed after free. + + 2014-01-25 Andrey Borzenkov + +diff --git a/grub-core/term/serial.c b/grub-core/term/serial.c +index b581a76..c9b5574 100644 +--- a/grub-core/term/serial.c ++++ b/grub-core/term/serial.c +@@ -338,23 +338,23 @@ grub_serial_register (struct grub_serial_port *port) + grub_free (indata); + return grub_errno; + } +- +- out = grub_malloc (sizeof (*out)); ++ ++ out = grub_zalloc (sizeof (*out)); + if (!out) + { +- grub_free (in); + grub_free (indata); + grub_free ((char *) in->name); ++ grub_free (in); + return grub_errno; + } + + outdata = grub_malloc (sizeof (*outdata)); + if (!outdata) + { +- grub_free (in); + grub_free (indata); + grub_free ((char *) in->name); + grub_free (out); ++ grub_free (in); + return grub_errno; + } + +-- +1.8.5.3 + diff --git a/0044-grub-install-support-for-partitioned-partx-loop-devi.patch b/0044-grub-install-support-for-partitioned-partx-loop-devi.patch new file mode 100644 index 0000000..8847546 --- /dev/null +++ b/0044-grub-install-support-for-partitioned-partx-loop-devi.patch @@ -0,0 +1,55 @@ +From 36e229c5a97a946fa5312e8c2db8deaa9ab19c5c Mon Sep 17 00:00:00 2001 +From: Mike Gilbert +Date: Sun, 26 Jan 2014 02:56:04 +0100 +Subject: [PATCH 044/112] grub-install: support for partitioned partx + loop devices. + + * grub-core/osdep/linux/getroot.c (grub_util_part_to_disk): Detect + /dev/loopX as being the parent of /dev/loopXpY. +--- + ChangeLog | 7 +++++++ + grub-core/osdep/linux/getroot.c | 13 +++++++++++++ + 2 files changed, 20 insertions(+) + +diff --git a/ChangeLog b/ChangeLog +index 1bb6bff..a0fd566 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,10 @@ ++2014-01-26 Mike Gilbert ++ ++ grub-install: support for partitioned partx loop devices. ++ ++ * grub-core/osdep/linux/getroot.c (grub_util_part_to_disk): Detect ++ /dev/loopX as being the parent of /dev/loopXpY. ++ + 2014-01-26 Vladimir Serbinenko + + * grub-core/term/serial.c (grub_serial_register): Fix invalid free. +diff --git a/grub-core/osdep/linux/getroot.c b/grub-core/osdep/linux/getroot.c +index 772de0a..19581d3 100644 +--- a/grub-core/osdep/linux/getroot.c ++++ b/grub-core/osdep/linux/getroot.c +@@ -883,6 +883,19 @@ grub_util_part_to_disk (const char *os_dev, struct stat *st, + *pp = '\0'; + return path; + } ++ ++ /* If this is a loop device */ ++ if ((strncmp ("loop", p, 4) == 0) && p[4] >= '0' && p[4] <= '9') ++ { ++ char *pp = p + 4; ++ while (*pp >= '0' && *pp <= '9') ++ pp++; ++ if (*pp == 'p') ++ *is_part = 1; ++ /* /dev/loop[0-9]+p[0-9]* */ ++ *pp = '\0'; ++ return path; ++ } + } + + return path; +-- +1.8.5.3 + diff --git a/0045-grub-core-term-at_keyboard.c-Tolerate-missing-keyboa.patch b/0045-grub-core-term-at_keyboard.c-Tolerate-missing-keyboa.patch new file mode 100644 index 0000000..19bc1a3 --- /dev/null +++ b/0045-grub-core-term-at_keyboard.c-Tolerate-missing-keyboa.patch @@ -0,0 +1,110 @@ +From 47239a0fa4ac48ad86071d1bf6e1f9b0dc70b46b Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Sun, 26 Jan 2014 03:31:10 +0100 +Subject: [PATCH 045/112] * grub-core/term/at_keyboard.c: Tolerate + missing keyboard. + +--- + .gitignore | 7 +++++++ + ChangeLog | 19 ++++++++++++++++++- + grub-core/term/at_keyboard.c | 3 +++ + util/grub-mkfont.c | 14 ++++++++------ + 4 files changed, 36 insertions(+), 7 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index a0fd566..fe06210 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,20 @@ ++2014-01-29 Vladimir Serbinenko ++ ++ * util/grub-mkfont.c: Downgrade warnings about unhandled features ++ to debug. ++ ++2014-01-29 Vladimir Serbinenko ++ ++ * grub-core/term/at_keyboard.c: Tolerate missing keyboard. ++ ++2014-01-29 Paulo Flabiano Smorigo ++ ++ * .gitignore: add missing files and .exe variants. ++ ++2014-01-26 Vladimir Serbinenko ++ ++ * grub-core/term/at_keyboard.c: Tolerate missing keyboard. ++ + 2014-01-26 Mike Gilbert + + grub-install: support for partitioned partx loop devices. +@@ -1116,7 +1133,7 @@ + + 2013-12-14 Vladimir Serbinenko + +- * .gitignore: Add .exe variants. Add missing files. Remove few outdated ++ * .gitignore: add .exe variants. add missing files. remove few outdated + entries. + + 2013-12-14 Vladimir Serbinenko +diff --git a/grub-core/term/at_keyboard.c b/grub-core/term/at_keyboard.c +index f5071ce..b4257e8 100644 +--- a/grub-core/term/at_keyboard.c ++++ b/grub-core/term/at_keyboard.c +@@ -396,6 +396,9 @@ fetch_key (int *is_break) + if (! KEYBOARD_ISREADY (grub_inb (KEYBOARD_REG_STATUS))) + return -1; + at_key = grub_inb (KEYBOARD_REG_DATA); ++ /* May happen if no keyboard is connected. Just ignore this. */ ++ if (at_key == 0xff) ++ return -1; + if (at_key == 0xe0) + { + e0_received = 1; +diff --git a/util/grub-mkfont.c b/util/grub-mkfont.c +index 3cb02ad..3de07ee 100644 +--- a/util/grub-mkfont.c ++++ b/util/grub-mkfont.c +@@ -516,8 +516,8 @@ process_cursive (struct gsub_feature *feature, + } + if (grub_be_to_cpu16 (lookup->flag) & ~GSUB_RTL_CHAR) + { +- printf (_("Unsupported substitution flag: 0x%x\n"), +- grub_be_to_cpu16 (lookup->flag)); ++ grub_util_info ("unsupported substitution flag: 0x%x", ++ grub_be_to_cpu16 (lookup->flag)); + } + switch (feattag) + { +@@ -577,7 +577,8 @@ process_cursive (struct gsub_feature *feature, + There are 2 coverage specifications: list and range. + This warning is thrown when another coverage specification + is detected. */ +- printf (_("Unsupported coverage specification: %d\n"), covertype); ++ fprintf (stderr, ++ _("Unsupported coverage specification: %d\n"), covertype); + } + } + } +@@ -616,7 +617,8 @@ add_font (struct grub_font_info *font_info, FT_Face face, int nocut) + grub_uint32_t feattag + = grub_be_to_cpu32 (features->features[i].feature_tag); + if (feature->params) +- printf (_("WARNING: unsupported font feature parameters: %x\n"), ++ fprintf (stderr, ++ _("WARNING: unsupported font feature parameters: %x\n"), + grub_be_to_cpu16 (feature->params)); + switch (feattag) + { +@@ -647,8 +649,8 @@ add_font (struct grub_font_info *font_info, FT_Face face, int nocut) + if (!grub_isgraph (str[j])) + str[j] = '?'; + /* TRANSLATORS: It's gsub feature, not gsub font. */ +- printf (_("Unknown gsub font feature 0x%x (%s)\n"), +- feattag, str); ++ grub_util_info ("Unknown gsub font feature 0x%x (%s)", ++ feattag, str); + } + } + } +-- +1.8.5.3 + diff --git a/0046-grub-core-disk-ahci.c-Do-not-enable-I-O-decoding-and.patch b/0046-grub-core-disk-ahci.c-Do-not-enable-I-O-decoding-and.patch new file mode 100644 index 0000000..5b15386 --- /dev/null +++ b/0046-grub-core-disk-ahci.c-Do-not-enable-I-O-decoding-and.patch @@ -0,0 +1,57 @@ +From 8ce75765ddc6b174873e7d05c15e86535c4780e8 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Wed, 29 Jan 2014 23:43:25 +0100 +Subject: [PATCH 046/112] * grub-core/disk/ahci.c: Do not enable I/O + decoding and keep enabling busmaster for the end. + +--- + ChangeLog | 5 +++++ + grub-core/disk/ahci.c | 10 ++++++---- + 2 files changed, 11 insertions(+), 4 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index fe06210..db12dad 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,10 @@ + 2014-01-29 Vladimir Serbinenko + ++ * grub-core/disk/ahci.c: Do not enable I/O decoding and keep ++ enabling busmaster for the end. ++ ++2014-01-29 Vladimir Serbinenko ++ + * util/grub-mkfont.c: Downgrade warnings about unhandled features + to debug. + +diff --git a/grub-core/disk/ahci.c b/grub-core/disk/ahci.c +index 0b13fb8..18c1327 100644 +--- a/grub-core/disk/ahci.c ++++ b/grub-core/disk/ahci.c +@@ -194,10 +194,8 @@ grub_ahci_pciinit (grub_pci_device_t dev, + return 0; + + addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND); +- grub_pci_write_word (addr, grub_pci_read_word (addr) | +- GRUB_PCI_COMMAND_IO_ENABLED +- | GRUB_PCI_COMMAND_MEM_ENABLED +- | GRUB_PCI_COMMAND_BUS_MASTER); ++ grub_pci_write_word (addr, grub_pci_read_word (addr) ++ | GRUB_PCI_COMMAND_MEM_ENABLED); + + hba = grub_pci_device_map_range (dev, bar & GRUB_PCI_ADDR_MEM_MASK, + sizeof (hba)); +@@ -621,6 +619,10 @@ grub_ahci_pciinit (grub_pci_device_t dev, + if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].sig >> 16) == 0xeb14) + adevs[i]->atapi = 1; + ++ addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND); ++ grub_pci_write_word (addr, grub_pci_read_word (addr) ++ | GRUB_PCI_COMMAND_BUS_MASTER); ++ + for (i = 0; i < nports; i++) + if (adevs[i]) + { +-- +1.8.5.3 + diff --git a/0047-grub-core-disk-ahci.c-Allocate-and-clean-space-for-a.patch b/0047-grub-core-disk-ahci.c-Allocate-and-clean-space-for-a.patch new file mode 100644 index 0000000..afef38a --- /dev/null +++ b/0047-grub-core-disk-ahci.c-Allocate-and-clean-space-for-a.patch @@ -0,0 +1,55 @@ +From cc6729328fa91ee4fab14686cb892ecaf7681345 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Wed, 29 Jan 2014 23:45:18 +0100 +Subject: [PATCH 047/112] * grub-core/disk/ahci.c: Allocate and clean + space for all possible 32 slots to avoid pointing to uninited area. + +--- + ChangeLog | 5 +++++ + grub-core/disk/ahci.c | 8 +++++++- + 2 files changed, 12 insertions(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index db12dad..734f762 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,10 @@ + 2014-01-29 Vladimir Serbinenko + ++ * grub-core/disk/ahci.c: Allocate and clean space for all possible 32 ++ slots to avoid pointing to uninited area. ++ ++2014-01-29 Vladimir Serbinenko ++ + * grub-core/disk/ahci.c: Do not enable I/O decoding and keep + enabling busmaster for the end. + +diff --git a/grub-core/disk/ahci.c b/grub-core/disk/ahci.c +index 18c1327..d63fd09 100644 +--- a/grub-core/disk/ahci.c ++++ b/grub-core/disk/ahci.c +@@ -358,7 +358,7 @@ grub_ahci_pciinit (grub_pci_device_t dev, + grub_dprintf ("ahci", "err: %x\n", + adevs[i]->hba->ports[adevs[i]->port].sata_error); + +- adevs[i]->command_list_chunk = grub_memalign_dma32 (1024, sizeof (struct grub_ahci_cmd_head)); ++ adevs[i]->command_list_chunk = grub_memalign_dma32 (1024, sizeof (struct grub_ahci_cmd_head) * 32); + if (!adevs[i]->command_list_chunk) + { + adevs[i] = 0; +@@ -376,6 +376,12 @@ grub_ahci_pciinit (grub_pci_device_t dev, + + adevs[i]->command_list = grub_dma_get_virt (adevs[i]->command_list_chunk); + adevs[i]->command_table = grub_dma_get_virt (adevs[i]->command_table_chunk); ++ ++ grub_memset ((void *) adevs[i]->command_list, 0, ++ sizeof (struct grub_ahci_cmd_table)); ++ grub_memset ((void *) adevs[i]->command_table, 0, ++ sizeof (struct grub_ahci_cmd_head) * 32); ++ + adevs[i]->command_list->command_table_base + = grub_dma_get_phys (adevs[i]->command_table_chunk); + +-- +1.8.5.3 + diff --git a/0048-grub-core-disk-ahci.c-Add-safety-cleanups.patch b/0048-grub-core-disk-ahci.c-Add-safety-cleanups.patch new file mode 100644 index 0000000..d21a5a9 --- /dev/null +++ b/0048-grub-core-disk-ahci.c-Add-safety-cleanups.patch @@ -0,0 +1,62 @@ +From baf35aa3bad71e184058a348e33469db74c88ac2 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Wed, 29 Jan 2014 23:46:17 +0100 +Subject: [PATCH 048/112] * grub-core/disk/ahci.c: Add safety cleanups. + +--- + ChangeLog | 4 ++++ + grub-core/disk/ahci.c | 10 ++++++++++ + 2 files changed, 14 insertions(+) + +diff --git a/ChangeLog b/ChangeLog +index 734f762..b144c49 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,9 @@ + 2014-01-29 Vladimir Serbinenko + ++ * grub-core/disk/ahci.c: Add safety cleanups. ++ ++2014-01-29 Vladimir Serbinenko ++ + * grub-core/disk/ahci.c: Allocate and clean space for all possible 32 + slots to avoid pointing to uninited area. + +diff --git a/grub-core/disk/ahci.c b/grub-core/disk/ahci.c +index d63fd09..643e691 100644 +--- a/grub-core/disk/ahci.c ++++ b/grub-core/disk/ahci.c +@@ -454,6 +454,7 @@ grub_ahci_pciinit (grub_pci_device_t dev, + adevs[i]->hba->ports[adevs[i]->port].fis_base = grub_dma_get_phys (adevs[i]->rfis); + adevs[i]->hba->ports[adevs[i]->port].command_list_base + = grub_dma_get_phys (adevs[i]->command_list_chunk); ++ adevs[i]->hba->ports[adevs[i]->port].command_issue = 0; + adevs[i]->hba->ports[adevs[i]->port].command |= GRUB_AHCI_HBA_PORT_CMD_FRE; + } + +@@ -600,6 +601,9 @@ grub_ahci_pciinit (grub_pci_device_t dev, + failed_adevs[i] = adevs[i]; + adevs[i] = 0; + } ++ ++ grub_dprintf ("ahci", "cleaning up failed devs\n"); ++ + for (i = 0; i < nports; i++) + if (failed_adevs[i] && (fr_running & (1 << i))) + failed_adevs[i]->hba->ports[failed_adevs[i]->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_FRE; +@@ -855,6 +859,12 @@ grub_ahci_reset_port (struct grub_ahci_device *dev, int force) + { + struct grub_disk_ata_pass_through_parms parms2; + dev->hba->ports[dev->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_ST; ++ dev->hba->ports[dev->port].command_issue = 0; ++ dev->command_list[0].config = 0; ++ dev->command_table[0].prdt[0].unused = 0; ++ dev->command_table[0].prdt[0].size = 0; ++ dev->command_table[0].prdt[0].data_base = 0; ++ + endtime = grub_get_time_ms () + 1000; + while ((dev->hba->ports[dev->port].command & GRUB_AHCI_HBA_PORT_CMD_CR)) + if (grub_get_time_ms () > endtime) +-- +1.8.5.3 + diff --git a/0049-grub-core-disk-ahci.c-Properly-handle-transactions-w.patch b/0049-grub-core-disk-ahci.c-Properly-handle-transactions-w.patch new file mode 100644 index 0000000..17f33ea --- /dev/null +++ b/0049-grub-core-disk-ahci.c-Properly-handle-transactions-w.patch @@ -0,0 +1,54 @@ +From bb56ea0f455c89c582d41ef090ac9844cbf6d554 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Wed, 29 Jan 2014 23:49:51 +0100 +Subject: [PATCH 049/112] * grub-core/disk/ahci.c: Properly handle + transactions with no transferred data. + +--- + ChangeLog | 5 +++++ + grub-core/disk/ahci.c | 7 +++++-- + 2 files changed, 10 insertions(+), 2 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index b144c49..3ca4bb4 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,10 @@ + 2014-01-29 Vladimir Serbinenko + ++ * grub-core/disk/ahci.c: Properly handle transactions with no ++ transferred data. ++ ++2014-01-29 Vladimir Serbinenko ++ + * grub-core/disk/ahci.c: Add safety cleanups. + + 2014-01-29 Vladimir Serbinenko +diff --git a/grub-core/disk/ahci.c b/grub-core/disk/ahci.c +index 643e691..fdd40c6 100644 +--- a/grub-core/disk/ahci.c ++++ b/grub-core/disk/ahci.c +@@ -932,7 +932,10 @@ grub_ahci_readwrite_real (struct grub_ahci_device *dev, + if (parms->size > GRUB_AHCI_PRDT_MAX_CHUNK_LENGTH) + return grub_error (GRUB_ERR_BUG, "too big data buffer"); + +- bufc = grub_memalign_dma32 (1024, parms->size + (parms->size & 1)); ++ if (parms->size) ++ bufc = grub_memalign_dma32 (1024, parms->size + (parms->size & 1)); ++ else ++ bufc = grub_memalign_dma32 (1024, 512); + + grub_dprintf ("ahci", "AHCI tfd = %x, CL=%p\n", + dev->hba->ports[dev->port].task_file_data, +@@ -942,7 +945,7 @@ grub_ahci_readwrite_real (struct grub_ahci_device *dev, + = (5 << GRUB_AHCI_CONFIG_CFIS_LENGTH_SHIFT) + // | GRUB_AHCI_CONFIG_CLEAR_R_OK + | (0 << GRUB_AHCI_CONFIG_PMP_SHIFT) +- | (1 << GRUB_AHCI_CONFIG_PRDT_LENGTH_SHIFT) ++ | ((parms->size ? 1 : 0) << GRUB_AHCI_CONFIG_PRDT_LENGTH_SHIFT) + | (parms->cmdsize ? GRUB_AHCI_CONFIG_ATAPI : 0) + | (parms->write ? GRUB_AHCI_CONFIG_WRITE : GRUB_AHCI_CONFIG_READ) + | (parms->taskfile.cmd == 8 ? (1 << 8) : 0); +-- +1.8.5.3 + diff --git a/0050-grub-core-disk-ahci.c-Increase-timeout.-Some-SSDs-ta.patch b/0050-grub-core-disk-ahci.c-Increase-timeout.-Some-SSDs-ta.patch new file mode 100644 index 0000000..815610d --- /dev/null +++ b/0050-grub-core-disk-ahci.c-Increase-timeout.-Some-SSDs-ta.patch @@ -0,0 +1,42 @@ +From dcff0582978093e3aa995a50120c35553e105edd Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Wed, 29 Jan 2014 23:50:49 +0100 +Subject: [PATCH 050/112] * grub-core/disk/ahci.c: Increase timeout. + Some SSDs take up to 7 seconds to recover if last poweroff was bad. + +--- + ChangeLog | 5 +++++ + grub-core/disk/ahci.c | 2 +- + 2 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index 3ca4bb4..1151ced 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,10 @@ + 2014-01-29 Vladimir Serbinenko + ++ * grub-core/disk/ahci.c: Increase timeout. Some SSDs take up to ++ 7 seconds to recover if last poweroff was bad. ++ ++2014-01-29 Vladimir Serbinenko ++ + * grub-core/disk/ahci.c: Properly handle transactions with no + transferred data. + +diff --git a/grub-core/disk/ahci.c b/grub-core/disk/ahci.c +index fdd40c6..5e4a639 100644 +--- a/grub-core/disk/ahci.c ++++ b/grub-core/disk/ahci.c +@@ -1022,7 +1022,7 @@ grub_ahci_readwrite_real (struct grub_ahci_device *dev, + grub_dprintf ("ahci", "AHCI tfd = %x\n", + dev->hba->ports[dev->port].task_file_data); + +- endtime = grub_get_time_ms () + (spinup ? 10000 : 5000); ++ endtime = grub_get_time_ms () + (spinup ? 20000 : 20000); + while ((dev->hba->ports[dev->port].command_issue & 1)) + if (grub_get_time_ms () > endtime) + { +-- +1.8.5.3 + diff --git a/0051-util-grub-mkfont.c-Build-fix-for-argp.h-with-older-g.patch b/0051-util-grub-mkfont.c-Build-fix-for-argp.h-with-older-g.patch new file mode 100644 index 0000000..08c7494 --- /dev/null +++ b/0051-util-grub-mkfont.c-Build-fix-for-argp.h-with-older-g.patch @@ -0,0 +1,42 @@ +From 54d09228116ac505407e380bd123fddf64f0fb79 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Mon, 3 Feb 2014 14:34:27 +0100 +Subject: [PATCH 051/112] * util/grub-mkfont.c: Build fix for argp.h + with older gcc. + +--- + ChangeLog | 4 ++++ + util/grub-mkfont.c | 4 ++++ + 2 files changed, 8 insertions(+) + +diff --git a/ChangeLog b/ChangeLog +index 1151ced..2605dda 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,7 @@ ++2014-02-03 Vladimir Serbinenko ++ ++ * util/grub-mkfont.c: Build fix for argp.h with older gcc. ++ + 2014-01-29 Vladimir Serbinenko + + * grub-core/disk/ahci.c: Increase timeout. Some SSDs take up to +diff --git a/util/grub-mkfont.c b/util/grub-mkfont.c +index 3de07ee..e6485b4 100644 +--- a/util/grub-mkfont.c ++++ b/util/grub-mkfont.c +@@ -33,7 +33,11 @@ + + #ifndef GRUB_BUILD + #define _GNU_SOURCE 1 ++#pragma GCC diagnostic ignored "-Wmissing-prototypes" ++#pragma GCC diagnostic ignored "-Wmissing-declarations" + #include ++#pragma GCC diagnostic error "-Wmissing-prototypes" ++#pragma GCC diagnostic error "-Wmissing-declarations" + #endif + #include + +-- +1.8.5.3 + diff --git a/0052-util-grub-mkrescue.c-Build-fix-for-argp.h-with-older.patch b/0052-util-grub-mkrescue.c-Build-fix-for-argp.h-with-older.patch new file mode 100644 index 0000000..cf675ea --- /dev/null +++ b/0052-util-grub-mkrescue.c-Build-fix-for-argp.h-with-older.patch @@ -0,0 +1,44 @@ +From a598e74ddc4b0c4716b57ed65e804e4db8941486 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Mon, 3 Feb 2014 14:35:51 +0100 +Subject: [PATCH 052/112] * util/grub-mkrescue.c: Build fix for argp.h + with older gcc. + +--- + ChangeLog | 4 ++++ + util/grub-mkrescue.c | 4 ++++ + 2 files changed, 8 insertions(+) + +diff --git a/ChangeLog b/ChangeLog +index 2605dda..8307e11 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,9 @@ + 2014-02-03 Vladimir Serbinenko + ++ * util/grub-mkrescue.c: Build fix for argp.h with older gcc. ++ ++2014-02-03 Vladimir Serbinenko ++ + * util/grub-mkfont.c: Build fix for argp.h with older gcc. + + 2014-01-29 Vladimir Serbinenko +diff --git a/util/grub-mkrescue.c b/util/grub-mkrescue.c +index 34e0b7a..e719839 100644 +--- a/util/grub-mkrescue.c ++++ b/util/grub-mkrescue.c +@@ -25,7 +25,11 @@ + #include + #include + #include ++#pragma GCC diagnostic ignored "-Wmissing-prototypes" ++#pragma GCC diagnostic ignored "-Wmissing-declarations" + #include ++#pragma GCC diagnostic error "-Wmissing-prototypes" ++#pragma GCC diagnostic error "-Wmissing-declarations" + + #include + #include +-- +1.8.5.3 + diff --git a/0053-add-grub_env_set_net_property-function.patch b/0053-add-grub_env_set_net_property-function.patch new file mode 100644 index 0000000..68bc180 --- /dev/null +++ b/0053-add-grub_env_set_net_property-function.patch @@ -0,0 +1,199 @@ +From eefe8e5ad98edc3adedf6432969574ab3b68e090 Mon Sep 17 00:00:00 2001 +From: Paulo Flabiano Smorigo +Date: Tue, 4 Feb 2014 18:41:38 -0200 +Subject: [PATCH 053/112] add grub_env_set_net_property function + +* grub-core/net/bootp.c: Remove set_env_limn_ro. +* grub-core/net/net.c: Add grub_env_set_net_property. +* include/grub/net.h: Likewise. +--- + ChangeLog | 8 +++++++ + grub-core/net/bootp.c | 63 +++++++++++++-------------------------------------- + grub-core/net/net.c | 38 +++++++++++++++++++++++++++++++ + include/grub/net.h | 4 ++++ + 4 files changed, 66 insertions(+), 47 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 8307e11..675475c 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,11 @@ ++2014-02-04 Paulo Flabiano Smorigo ++ ++ Add grub_env_set_net_property function. ++ ++ * grub-core/net/bootp.c: Remove set_env_limn_ro. ++ * grub-core/net/net.c: Add grub_env_set_net_property. ++ * include/grub/net.h: Likewise. ++ + 2014-02-03 Vladimir Serbinenko + + * util/grub-mkrescue.c: Build fix for argp.h with older gcc. +diff --git a/grub-core/net/bootp.c b/grub-core/net/bootp.c +index c14e9de..6310ed4 100644 +--- a/grub-core/net/bootp.c ++++ b/grub-core/net/bootp.c +@@ -25,41 +25,6 @@ + #include + #include + +-static char * +-grub_env_write_readonly (struct grub_env_var *var __attribute__ ((unused)), +- const char *val __attribute__ ((unused))) +-{ +- return NULL; +-} +- +-static void +-set_env_limn_ro (const char *intername, const char *suffix, +- const char *value, grub_size_t len) +-{ +- char *varname, *varvalue; +- char *ptr; +- varname = grub_xasprintf ("net_%s_%s", intername, suffix); +- if (!varname) +- return; +- for (ptr = varname; *ptr; ptr++) +- if (*ptr == ':') +- *ptr = '_'; +- varvalue = grub_malloc (len + 1); +- if (!varvalue) +- { +- grub_free (varname); +- return; +- } +- +- grub_memcpy (varvalue, value, len); +- varvalue[len] = 0; +- grub_env_set (varname, varvalue); +- grub_register_variable_hook (varname, 0, grub_env_write_readonly); +- grub_env_export (varname); +- grub_free (varname); +- grub_free (varvalue); +-} +- + static void + parse_dhcp_vendor (const char *name, const void *vend, int limit, int *mask) + { +@@ -136,20 +101,24 @@ parse_dhcp_vendor (const char *name, const void *vend, int limit, int *mask) + } + continue; + case GRUB_NET_BOOTP_HOSTNAME: +- set_env_limn_ro (name, "hostname", (const char *) ptr, taglength); +- break; ++ grub_env_set_net_property (name, "hostname", (const char *) ptr, ++ taglength); ++ break; + + case GRUB_NET_BOOTP_DOMAIN: +- set_env_limn_ro (name, "domain", (const char *) ptr, taglength); +- break; ++ grub_env_set_net_property (name, "domain", (const char *) ptr, ++ taglength); ++ break; + + case GRUB_NET_BOOTP_ROOT_PATH: +- set_env_limn_ro (name, "rootpath", (const char *) ptr, taglength); +- break; ++ grub_env_set_net_property (name, "rootpath", (const char *) ptr, ++ taglength); ++ break; + + case GRUB_NET_BOOTP_EXTENSIONS_PATH: +- set_env_limn_ro (name, "extensionspath", (const char *) ptr, taglength); +- break; ++ grub_env_set_net_property (name, "extensionspath", (const char *) ptr, ++ taglength); ++ break; + + /* If you need any other options please contact GRUB + development team. */ +@@ -211,8 +180,8 @@ grub_net_configure_by_dhcp_ack (const char *name, + } + + if (size > OFFSET_OF (boot_file, bp)) +- set_env_limn_ro (name, "boot_file", (char *) bp->boot_file, +- sizeof (bp->boot_file)); ++ grub_env_set_net_property (name, "boot_file", bp->boot_file, ++ sizeof (bp->boot_file)); + if (is_def) + grub_net_default_server = 0; + if (is_def && !grub_net_default_server && bp->server_ip) +@@ -243,8 +212,8 @@ grub_net_configure_by_dhcp_ack (const char *name, + if (size > OFFSET_OF (server_name, bp) + && bp->server_name[0]) + { +- set_env_limn_ro (name, "dhcp_server_name", (char *) bp->server_name, +- sizeof (bp->server_name)); ++ grub_env_set_net_property (name, "dhcp_server_name", bp->server_name, ++ sizeof (bp->server_name)); + if (is_def && !grub_net_default_server) + { + grub_net_default_server = grub_strdup (bp->server_name); +diff --git a/grub-core/net/net.c b/grub-core/net/net.c +index 1521d8d..f2e723b 100644 +--- a/grub-core/net/net.c ++++ b/grub-core/net/net.c +@@ -1480,6 +1480,44 @@ receive_packets (struct grub_net_card *card, int *stop_condition) + grub_print_error (); + } + ++static char * ++grub_env_write_readonly (struct grub_env_var *var __attribute__ ((unused)), ++ const char *val __attribute__ ((unused))) ++{ ++ return NULL; ++} ++ ++grub_err_t ++grub_env_set_net_property (const char *intername, const char *suffix, ++ const char *value, grub_size_t len) ++{ ++ char *varname, *varvalue; ++ char *ptr; ++ ++ varname = grub_xasprintf ("net_%s_%s", intername, suffix); ++ if (!varname) ++ return grub_errno; ++ for (ptr = varname; *ptr; ptr++) ++ if (*ptr == ':') ++ *ptr = '_'; ++ varvalue = grub_malloc (len + 1); ++ if (!varvalue) ++ { ++ grub_free (varname); ++ return grub_errno; ++ } ++ ++ grub_memcpy (varvalue, value, len); ++ varvalue[len] = 0; ++ grub_err_t ret = grub_env_set (varname, varvalue); ++ grub_register_variable_hook (varname, 0, grub_env_write_readonly); ++ grub_env_export (varname); ++ grub_free (varname); ++ grub_free (varvalue); ++ ++ return ret; ++} ++ + void + grub_net_poll_cards (unsigned time, int *stop_condition) + { +diff --git a/include/grub/net.h b/include/grub/net.h +index 0e0a605..538baa3 100644 +--- a/include/grub/net.h ++++ b/include/grub/net.h +@@ -480,6 +480,10 @@ grub_net_addr_to_str (const grub_net_network_level_address_t *target, + void + grub_net_hwaddr_to_str (const grub_net_link_level_address_t *addr, char *str); + ++grub_err_t ++grub_env_set_net_property (const char *intername, const char *suffix, ++ const char *value, grub_size_t len); ++ + void + grub_net_poll_cards (unsigned time, int *stop_condition); + +-- +1.8.5.3 + diff --git a/0054-add-bootpath-parser-for-open-firmware.patch b/0054-add-bootpath-parser-for-open-firmware.patch new file mode 100644 index 0000000..e79676b --- /dev/null +++ b/0054-add-bootpath-parser-for-open-firmware.patch @@ -0,0 +1,211 @@ +From 91824aaef6ac5080f6c5419f33fdcc8efe329ebc Mon Sep 17 00:00:00 2001 +From: Paulo Flabiano Smorigo +Date: Tue, 4 Feb 2014 19:00:55 -0200 +Subject: [PATCH 054/112] add bootpath parser for open firmware + +It enables net boot even when there is no bootp/dhcp server. + +* grub-core/net/drivers/ieee1275/ofnet.c: Add grub_ieee1275_parse_bootpath and +call it at grub_ieee1275_net_config_real. +* grub-core/kern/ieee1275/init.c: Add bootpath to grub_ieee1275_net_config. +* include/grub/ieee1275/ieee1275.h: Likewise. +--- + ChangeLog | 13 ++++ + grub-core/kern/ieee1275/init.c | 7 +-- + grub-core/net/drivers/ieee1275/ofnet.c | 107 ++++++++++++++++++++++++++++++++- + include/grub/ieee1275/ieee1275.h | 5 +- + 4 files changed, 125 insertions(+), 7 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 675475c..d026637 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,18 @@ + 2014-02-04 Paulo Flabiano Smorigo + ++ Add bootpath parser for open firmware. ++ ++ It enables net boot even when there is no bootp/dhcp server. ++ ++ * grub-core/net/drivers/ieee1275/ofnet.c: Add grub_ieee1275_parse_bootpath ++ and call it at grub_ieee1275_net_config_real. ++ * grub-core/kern/ieee1275/init.c: Add bootpath to ++ grub_ieee1275_net_config. ++ * include/grub/ieee1275/ieee1275.h: Likewise. ++ ++ ++2014-02-04 Paulo Flabiano Smorigo ++ + Add grub_env_set_net_property function. + + * grub-core/net/bootp.c: Remove set_env_limn_ro. +diff --git a/grub-core/kern/ieee1275/init.c b/grub-core/kern/ieee1275/init.c +index 89b2822..d5bd74d 100644 +--- a/grub-core/kern/ieee1275/init.c ++++ b/grub-core/kern/ieee1275/init.c +@@ -80,9 +80,8 @@ grub_translate_ieee1275_path (char *filepath) + } + } + +-void (*grub_ieee1275_net_config) (const char *dev, +- char **device, +- char **path); ++void (*grub_ieee1275_net_config) (const char *dev, char **device, char **path, ++ char *bootpath); + void + grub_machine_get_bootlocation (char **device, char **path) + { +@@ -126,7 +125,7 @@ grub_machine_get_bootlocation (char **device, char **path) + *ptr = 0; + + if (grub_ieee1275_net_config) +- grub_ieee1275_net_config (canon, device, path); ++ grub_ieee1275_net_config (canon, device, path, bootpath); + grub_free (dev); + grub_free (canon); + } +diff --git a/grub-core/net/drivers/ieee1275/ofnet.c b/grub-core/net/drivers/ieee1275/ofnet.c +index 4483c91..eea8e71 100644 +--- a/grub-core/net/drivers/ieee1275/ofnet.c ++++ b/grub-core/net/drivers/ieee1275/ofnet.c +@@ -127,8 +127,111 @@ bootp_response_properties[] = + { .name = "bootpreply-packet", .offset = 0x2a}, + }; + ++enum ++{ ++ BOOTARGS_SERVER_ADDR, ++ BOOTARGS_FILENAME, ++ BOOTARGS_CLIENT_ADDR, ++ BOOTARGS_GATEWAY_ADDR, ++ BOOTARGS_BOOTP_RETRIES, ++ BOOTARGS_TFTP_RETRIES, ++ BOOTARGS_SUBNET_MASK, ++ BOOTARGS_BLOCKSIZE ++}; ++ ++static int ++grub_ieee1275_parse_bootpath (const char *devpath, char *bootpath, ++ char **device, struct grub_net_card **card) ++{ ++ char *args; ++ char *comma_char = 0; ++ char *equal_char = 0; ++ grub_size_t field_counter = 0; ++ ++ grub_net_network_level_address_t client_addr, gateway_addr, subnet_mask; ++ grub_net_link_level_address_t hw_addr; ++ grub_net_interface_flags_t flags = 0; ++ struct grub_net_network_level_interface *inter; ++ ++ hw_addr.type = GRUB_NET_LINK_LEVEL_PROTOCOL_ETHERNET; ++ ++ args = bootpath + grub_strlen (devpath) + 1; ++ do ++ { ++ comma_char = grub_strchr (args, ','); ++ if (comma_char != 0) ++ *comma_char = 0; ++ ++ /* Check if it's an option (like speed=auto) and not a default parameter */ ++ equal_char = grub_strchr (args, '='); ++ if (equal_char != 0) ++ { ++ *equal_char = 0; ++ grub_env_set_net_property ((*card)->name, args, equal_char + 1, ++ grub_strlen(equal_char + 1)); ++ *equal_char = '='; ++ } ++ else ++ { ++ switch (field_counter++) ++ { ++ case BOOTARGS_SERVER_ADDR: ++ *device = grub_xasprintf ("tftp,%s", args); ++ if (!*device) ++ return grub_errno; ++ break; ++ ++ case BOOTARGS_CLIENT_ADDR: ++ grub_net_resolve_address (args, &client_addr); ++ break; ++ ++ case BOOTARGS_GATEWAY_ADDR: ++ grub_net_resolve_address (args, &gateway_addr); ++ break; ++ ++ case BOOTARGS_SUBNET_MASK: ++ grub_net_resolve_address (args, &subnet_mask); ++ break; ++ } ++ } ++ args = comma_char + 1; ++ if (comma_char != 0) ++ *comma_char = ','; ++ } while (comma_char != 0); ++ ++ if ((client_addr.ipv4 != 0) && (subnet_mask.ipv4 != 0)) ++ { ++ grub_ieee1275_phandle_t devhandle; ++ grub_ieee1275_finddevice (devpath, &devhandle); ++ grub_ieee1275_get_property (devhandle, "mac-address", ++ hw_addr.mac, sizeof(hw_addr.mac), 0); ++ inter = grub_net_add_addr ((*card)->name, *card, &client_addr, &hw_addr, ++ flags); ++ grub_net_add_ipv4_local (inter, ++ __builtin_ctz (~grub_le_to_cpu32 (subnet_mask.ipv4))); ++ } ++ ++ if (gateway_addr.ipv4 != 0) ++ { ++ grub_net_network_level_netaddress_t target; ++ char *rname; ++ ++ target.type = GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV4; ++ target.ipv4.base = 0; ++ target.ipv4.masksize = 0; ++ rname = grub_xasprintf ("%s:default", ((*card)->name)); ++ if (rname) ++ grub_net_add_route_gw (rname, target, gateway_addr); ++ else ++ return grub_errno; ++ } ++ ++ return 0; ++} ++ + static void +-grub_ieee1275_net_config_real (const char *devpath, char **device, char **path) ++grub_ieee1275_net_config_real (const char *devpath, char **device, char **path, ++ char *bootpath) + { + struct grub_net_card *card; + +@@ -158,6 +261,8 @@ grub_ieee1275_net_config_real (const char *devpath, char **device, char **path) + } + grub_free (canon); + ++ grub_ieee1275_parse_bootpath (devpath, bootpath, device, &card); ++ + for (i = 0; i < ARRAY_SIZE (bootp_response_properties); i++) + if (grub_ieee1275_get_property_length (grub_ieee1275_chosen, + bootp_response_properties[i].name, +diff --git a/include/grub/ieee1275/ieee1275.h b/include/grub/ieee1275/ieee1275.h +index dc54bea..8e42513 100644 +--- a/include/grub/ieee1275/ieee1275.h ++++ b/include/grub/ieee1275/ieee1275.h +@@ -70,8 +70,9 @@ struct grub_ieee1275_devalias + }; + + extern void (*EXPORT_VAR(grub_ieee1275_net_config)) (const char *dev, +- char **device, +- char **path); ++ char **device, ++ char **path, ++ char *bootargs); + + /* Maps a device alias to a pathname. */ + extern grub_ieee1275_phandle_t EXPORT_VAR(grub_ieee1275_chosen); +-- +1.8.5.3 + diff --git a/0055-grub-core-disk-ahci.c-Ignore-NPORTS-field-and-rely-o.patch b/0055-grub-core-disk-ahci.c-Ignore-NPORTS-field-and-rely-o.patch new file mode 100644 index 0000000..984e8bc --- /dev/null +++ b/0055-grub-core-disk-ahci.c-Ignore-NPORTS-field-and-rely-o.patch @@ -0,0 +1,40 @@ +From f8cb2c7aec369b3f12d2a05289b6f65716264079 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Thu, 20 Feb 2014 10:11:43 +0100 +Subject: [PATCH 055/112] * grub-core/disk/ahci.c: Ignore NPORTS field + and rely on PI exclusively. + +--- + ChangeLog | 5 +++++ + grub-core/disk/ahci.c | 2 +- + 2 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index d026637..b6bcfd0 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,8 @@ ++2014-02-20 Vladimir Serbinenko ++ ++ * grub-core/disk/ahci.c: Ignore NPORTS field and rely on PI ++ exclusively. ++ + 2014-02-04 Paulo Flabiano Smorigo + + Add bootpath parser for open firmware. +diff --git a/grub-core/disk/ahci.c b/grub-core/disk/ahci.c +index 5e4a639..89365cd 100644 +--- a/grub-core/disk/ahci.c ++++ b/grub-core/disk/ahci.c +@@ -322,7 +322,7 @@ grub_ahci_pciinit (grub_pci_device_t dev, + + grub_dprintf ("ahci", "GLC:%x\n", hba->global_control); + +- nports = (hba->cap & GRUB_AHCI_HBA_CAP_NPORTS_MASK) + 1; ++ nports = (GRUB_AHCI_HBA_CAP_NPORTS_MASK) + 1; + + grub_dprintf ("ahci", "%d AHCI ports, PI = 0x%x\n", nports, + hba->ports_implemented); +-- +1.8.5.3 + diff --git a/0056-grub-core-kern-i386-coreboot-mmap.c-Filter-out-0xa00.patch b/0056-grub-core-kern-i386-coreboot-mmap.c-Filter-out-0xa00.patch new file mode 100644 index 0000000..cc02759 --- /dev/null +++ b/0056-grub-core-kern-i386-coreboot-mmap.c-Filter-out-0xa00.patch @@ -0,0 +1,82 @@ +From 454a98fa890038be4581226c28727481a5d174d6 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Fri, 28 Feb 2014 09:47:57 +0100 +Subject: [PATCH 056/112] * grub-core/kern/i386/coreboot/mmap.c: Filter + out 0xa0000-0x100000 region. + +--- + ChangeLog | 5 +++++ + grub-core/kern/i386/coreboot/mmap.c | 38 +++++++++++++++++++++++++++++++------ + 2 files changed, 37 insertions(+), 6 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index b6bcfd0..6aa347b 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,8 @@ ++2014-02-28 Vladimir Serbinenko ++ ++ * grub-core/kern/i386/coreboot/mmap.c: Filter out 0xa0000-0x100000 ++ region. ++ + 2014-02-20 Vladimir Serbinenko + + * grub-core/disk/ahci.c: Ignore NPORTS field and rely on PI +diff --git a/grub-core/kern/i386/coreboot/mmap.c b/grub-core/kern/i386/coreboot/mmap.c +index 1197975..4d29f6b 100644 +--- a/grub-core/kern/i386/coreboot/mmap.c ++++ b/grub-core/kern/i386/coreboot/mmap.c +@@ -44,18 +44,44 @@ iterate_linuxbios_table (grub_linuxbios_table_item_t table_item, void *data) + mem_region = + (mem_region_t) ((long) table_item + + sizeof (struct grub_linuxbios_table_item)); +- while ((long) mem_region < (long) table_item + (long) table_item->size) ++ for (; (long) mem_region < (long) table_item + (long) table_item->size; ++ mem_region++) + { +- if (ctx->hook (mem_region->addr, mem_region->size, ++ grub_uint64_t start = mem_region->addr; ++ grub_uint64_t end = mem_region->addr + mem_region->size; ++ /* Mark region 0xa0000 - 0x100000 as reserved. */ ++ if (start < 0x100000 && end >= 0xa0000 ++ && mem_region->type == GRUB_MACHINE_MEMORY_AVAILABLE) ++ { ++ if (start < 0xa0000 ++ && ctx->hook (start, 0xa0000 - start, ++ /* Multiboot mmaps match with the coreboot mmap ++ definition. Therefore, we can just pass type ++ through. */ ++ mem_region->type, ++ ctx->hook_data)) ++ return 1; ++ if (start < 0xa0000) ++ start = 0xa0000; ++ if (start >= end) ++ continue; ++ ++ if (ctx->hook (start, (end > 0x100000 ? 0x100000 : end) - start, ++ GRUB_MEMORY_RESERVED, ++ ctx->hook_data)) ++ return 1; ++ start = 0x100000; ++ ++ if (end <= start) ++ continue; ++ } ++ if (ctx->hook (start, end - start, + /* Multiboot mmaps match with the coreboot mmap + definition. Therefore, we can just pass type + through. */ +- (((mem_region->type <= GRUB_MACHINE_MEMORY_BADRAM) && (mem_region->type >= GRUB_MACHINE_MEMORY_AVAILABLE)) +- || mem_region->type == GRUB_MEMORY_COREBOOT_TABLES) ? mem_region->type : GRUB_MEMORY_RESERVED, ++ mem_region->type, + ctx->hook_data)) + return 1; +- +- mem_region++; + } + + return 0; +-- +1.8.5.3 + diff --git a/0057-grub-core-loader-i386-multiboot_mbi.c-grub_multiboot.patch b/0057-grub-core-loader-i386-multiboot_mbi.c-grub_multiboot.patch new file mode 100644 index 0000000..f4253e9 --- /dev/null +++ b/0057-grub-core-loader-i386-multiboot_mbi.c-grub_multiboot.patch @@ -0,0 +1,42 @@ +From 131dca6803c35679d8ff9bc60a96f3060f44fda9 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Fri, 28 Feb 2014 09:48:57 +0100 +Subject: [PATCH 057/112] * grub-core/loader/i386/multiboot_mbi.c + (grub_multiboot_make_mbi): Limit location to 640K. + +--- + ChangeLog | 5 +++++ + grub-core/loader/i386/multiboot_mbi.c | 2 +- + 2 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index 6aa347b..74485f3 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,10 @@ + 2014-02-28 Vladimir Serbinenko + ++ * grub-core/loader/i386/multiboot_mbi.c (grub_multiboot_make_mbi): Limit ++ location to 640K. ++ ++2014-02-28 Vladimir Serbinenko ++ + * grub-core/kern/i386/coreboot/mmap.c: Filter out 0xa0000-0x100000 + region. + +diff --git a/grub-core/loader/i386/multiboot_mbi.c b/grub-core/loader/i386/multiboot_mbi.c +index 7431aa4..f10c087 100644 +--- a/grub-core/loader/i386/multiboot_mbi.c ++++ b/grub-core/loader/i386/multiboot_mbi.c +@@ -446,7 +446,7 @@ grub_multiboot_make_mbi (grub_uint32_t *target) + bufsize = grub_multiboot_get_mbi_size (); + + err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, &ch, +- 0x10000, 0x100000 - bufsize, ++ 0x10000, 0xa0000 - bufsize, + bufsize, 4, + GRUB_RELOCATOR_PREFERENCE_NONE, 0); + if (err) +-- +1.8.5.3 + diff --git a/0058-grub-core-mmap-i386-uppermem.c-lower_hook-COREBOOT-I.patch b/0058-grub-core-mmap-i386-uppermem.c-lower_hook-COREBOOT-I.patch new file mode 100644 index 0000000..abb1a9b --- /dev/null +++ b/0058-grub-core-mmap-i386-uppermem.c-lower_hook-COREBOOT-I.patch @@ -0,0 +1,47 @@ +From f523d8c3a8d328369672320dbd43c1bbffa119ab Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Fri, 28 Feb 2014 09:50:47 +0100 +Subject: [PATCH 058/112] * grub-core/mmap/i386/uppermem.c (lower_hook) + [COREBOOT]: Ignore low tables for low memory calculations. + +--- + ChangeLog | 5 +++++ + grub-core/mmap/i386/uppermem.c | 6 +++++- + 2 files changed, 10 insertions(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index 74485f3..f827cde 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,10 @@ + 2014-02-28 Vladimir Serbinenko + ++ * grub-core/mmap/i386/uppermem.c (lower_hook) [COREBOOT]: Ignore low ++ tables for low memory calculations. ++ ++2014-02-28 Vladimir Serbinenko ++ + * grub-core/loader/i386/multiboot_mbi.c (grub_multiboot_make_mbi): Limit + location to 640K. + +diff --git a/grub-core/mmap/i386/uppermem.c b/grub-core/mmap/i386/uppermem.c +index bd8b429..a6be989 100644 +--- a/grub-core/mmap/i386/uppermem.c ++++ b/grub-core/mmap/i386/uppermem.c +@@ -31,8 +31,12 @@ lower_hook (grub_uint64_t addr, grub_uint64_t size, grub_memory_type_t type, + + if (type != GRUB_MEMORY_AVAILABLE) + return 0; ++#ifdef GRUB_MACHINE_COREBOOT ++ if (addr <= 0x1000) ++#else + if (addr == 0) +- *lower = size; ++#endif ++ *lower = size + addr; + return 0; + } + +-- +1.8.5.3 + diff --git a/0059-grub-core-kern-i386-pc-mmap.c-Fallback-to-EISA-memor.patch b/0059-grub-core-kern-i386-pc-mmap.c-Fallback-to-EISA-memor.patch new file mode 100644 index 0000000..cf22700 --- /dev/null +++ b/0059-grub-core-kern-i386-pc-mmap.c-Fallback-to-EISA-memor.patch @@ -0,0 +1,88 @@ +From 31373f6367113bff201df6d9f8fcf47119e4e961 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Fri, 28 Feb 2014 10:07:11 +0100 +Subject: [PATCH 059/112] * grub-core/kern/i386/pc/mmap.c: Fallback to + EISA memory map if E820 failed to return any regions. + +--- + ChangeLog | 5 +++++ + grub-core/kern/i386/pc/mmap.c | 40 +++++++++++++++++++++------------------- + 2 files changed, 26 insertions(+), 19 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index f827cde..a79fafb 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,10 @@ + 2014-02-28 Vladimir Serbinenko + ++ * grub-core/kern/i386/pc/mmap.c: Fallback to EISA memory map ++ if E820 failed to return any regions. ++ ++2014-02-28 Vladimir Serbinenko ++ + * grub-core/mmap/i386/uppermem.c (lower_hook) [COREBOOT]: Ignore low + tables for low memory calculations. + +diff --git a/grub-core/kern/i386/pc/mmap.c b/grub-core/kern/i386/pc/mmap.c +index 8009e83..f1375f3 100644 +--- a/grub-core/kern/i386/pc/mmap.c ++++ b/grub-core/kern/i386/pc/mmap.c +@@ -141,33 +141,35 @@ grub_get_mmap_entry (struct grub_machine_mmap_entry *entry, + grub_err_t + grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data) + { +- grub_uint32_t cont; ++ grub_uint32_t cont = 0; + struct grub_machine_mmap_entry *entry + = (struct grub_machine_mmap_entry *) GRUB_MEMORY_MACHINE_SCRATCH_ADDR; ++ int e820_works = 0; + +- grub_memset (entry, 0, sizeof (entry)); ++ while (1) ++ { ++ grub_memset (entry, 0, sizeof (entry)); + +- /* Check if grub_get_mmap_entry works. */ +- cont = grub_get_mmap_entry (entry, 0); ++ cont = grub_get_mmap_entry (entry, cont); + +- if (entry->size) +- do +- { +- if (hook (entry->addr, entry->len, +- /* GRUB mmaps have been defined to match with the E820 definition. +- Therefore, we can just pass type through. */ +- entry->type, hook_data)) +- break; ++ if (!entry->size) ++ break; + +- if (! cont) +- break; ++ if (entry->len) ++ e820_works = 1; ++ if (entry->len ++ && hook (entry->addr, entry->len, ++ /* GRUB mmaps have been defined to match with ++ the E820 definition. ++ Therefore, we can just pass type through. */ ++ entry->type, hook_data)) ++ break; + +- grub_memset (entry, 0, sizeof (entry)); ++ if (! cont) ++ break; ++ } + +- cont = grub_get_mmap_entry (entry, cont); +- } +- while (entry->size); +- else ++ if (!e820_works) + { + grub_uint32_t eisa_mmap = grub_get_eisa_mmap (); + +-- +1.8.5.3 + diff --git a/0060-include-grub-i386-openbsd_bootarg.h-Add-addr-and-fre.patch b/0060-include-grub-i386-openbsd_bootarg.h-Add-addr-and-fre.patch new file mode 100644 index 0000000..39178a0 --- /dev/null +++ b/0060-include-grub-i386-openbsd_bootarg.h-Add-addr-and-fre.patch @@ -0,0 +1,70 @@ +From 27c4fcc66ec41707cd67ed4d7d789d437c391d07 Mon Sep 17 00:00:00 2001 +From: Vladimir Serbinenko +Date: Fri, 28 Feb 2014 10:50:05 +0100 +Subject: [PATCH 060/112] * include/grub/i386/openbsd_bootarg.h: Add + addr and frequency fields. * grub-core/loader/i386/bsd.c + (grub_cmd_openbsd): Fill addr field. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + + Suggested by: Markus Müller. +--- + ChangeLog | 7 +++++++ + grub-core/loader/i386/bsd.c | 2 ++ + include/grub/i386/openbsd_bootarg.h | 2 ++ + 3 files changed, 11 insertions(+) + +diff --git a/ChangeLog b/ChangeLog +index a79fafb..bd34ec4 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,5 +1,12 @@ + 2014-02-28 Vladimir Serbinenko + ++ * include/grub/i386/openbsd_bootarg.h: Add addr and frequency fields. ++ * grub-core/loader/i386/bsd.c (grub_cmd_openbsd): Fill addr field. ++ ++ Suggested by: Markus Müller. ++ ++2014-02-28 Vladimir Serbinenko ++ + * grub-core/kern/i386/pc/mmap.c: Fallback to EISA memory map + if E820 failed to return any regions. + +diff --git a/grub-core/loader/i386/bsd.c b/grub-core/loader/i386/bsd.c +index ea0edfa..19985f0 100644 +--- a/grub-core/loader/i386/bsd.c ++++ b/grub-core/loader/i386/bsd.c +@@ -1646,6 +1646,7 @@ grub_cmd_openbsd (grub_extcmd_context_t ctxt, int argc, char *argv[]) + + serial.device = (GRUB_OPENBSD_COM_MAJOR << 8) | port; + serial.speed = speed; ++ serial.addr = grub_ns8250_hw_get_port (port); + + grub_bsd_add_meta (OPENBSD_BOOTARG_CONSOLE, &serial, sizeof (serial)); + bootflags |= OPENBSD_RB_SERCONS; +@@ -1656,6 +1657,7 @@ grub_cmd_openbsd (grub_extcmd_context_t ctxt, int argc, char *argv[]) + + grub_memset (&serial, 0, sizeof (serial)); + serial.device = (GRUB_OPENBSD_VGA_MAJOR << 8); ++ serial.addr = 0xffffffff; + grub_bsd_add_meta (OPENBSD_BOOTARG_CONSOLE, &serial, sizeof (serial)); + bootflags &= ~OPENBSD_RB_SERCONS; + } +diff --git a/include/grub/i386/openbsd_bootarg.h b/include/grub/i386/openbsd_bootarg.h +index 01ca486..9ebe6b4 100644 +--- a/include/grub/i386/openbsd_bootarg.h ++++ b/include/grub/i386/openbsd_bootarg.h +@@ -75,6 +75,8 @@ struct grub_openbsd_bootarg_console + { + grub_uint32_t device; + grub_uint32_t speed; ++ grub_uint32_t addr; ++ grub_uint32_t frequency; + }; + + struct grub_openbsd_bootarg_pcibios +-- +1.8.5.3 + diff --git a/0061-Migrate-PPC-from-Yaboot-to-Grub2.patch b/0061-Migrate-PPC-from-Yaboot-to-Grub2.patch new file mode 100644 index 0000000..adff1f6 --- /dev/null +++ b/0061-Migrate-PPC-from-Yaboot-to-Grub2.patch @@ -0,0 +1,154 @@ +From ba24acd4e6ee6f96ded477a062213879e06bac19 Mon Sep 17 00:00:00 2001 +From: Mark Hamzy +Date: Wed, 28 Mar 2012 14:46:41 -0500 +Subject: [PATCH 061/112] Migrate PPC from Yaboot to Grub2 + +Add configuration support for serial terminal consoles. This will set the +maximum screen size so that text is not overwritten. +--- + Makefile.util.def | 7 +++ + util/grub.d/20_ppc_terminfo.in | 114 +++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 121 insertions(+) + create mode 100644 util/grub.d/20_ppc_terminfo.in + +diff --git a/Makefile.util.def b/Makefile.util.def +index a286a89..8f40e78 100644 +--- a/Makefile.util.def ++++ b/Makefile.util.def +@@ -485,6 +485,13 @@ script = { + }; + + script = { ++ name = '20_ppc_terminfo'; ++ common = util/grub.d/20_ppc_terminfo.in; ++ installdir = grubconf; ++ condition = COND_HOST_LINUX; ++}; ++ ++script = { + name = '30_os-prober'; + common = util/grub.d/30_os-prober.in; + installdir = grubconf; +diff --git a/util/grub.d/20_ppc_terminfo.in b/util/grub.d/20_ppc_terminfo.in +new file mode 100644 +index 0000000..10d6658 +--- /dev/null ++++ b/util/grub.d/20_ppc_terminfo.in +@@ -0,0 +1,114 @@ ++#! /bin/sh ++set -e ++ ++# grub-mkconfig helper script. ++# Copyright (C) 2006,2007,2008,2009,2010 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 . ++ ++prefix=@prefix@ ++exec_prefix=@exec_prefix@ ++bindir=@bindir@ ++libdir=@libdir@ ++. "@datadir@/@PACKAGE@/grub-mkconfig_lib" ++ ++export TEXTDOMAIN=@PACKAGE@ ++export TEXTDOMAINDIR=@localedir@ ++ ++X=80 ++Y=24 ++TERMINAL=ofconsole ++ ++argument () { ++ opt=$1 ++ shift ++ ++ if test $# -eq 0; then ++ echo "$0: option requires an argument -- '$opt'" 1>&2 ++ exit 1 ++ fi ++ echo $1 ++} ++ ++check_terminfo () { ++ ++ while test $# -gt 0 ++ do ++ option=$1 ++ shift ++ ++ case "$option" in ++ terminfo | TERMINFO) ++ ;; ++ ++ -g) ++ NEWXY=`argument $option "$@"` ++ NEWX=`echo $NEWXY | cut -d x -f 1` ++ NEWY=`echo $NEWXY | cut -d x -f 2` ++ ++ if [ ${NEWX} -ge 80 ] ; then ++ X=${NEWX} ++ else ++ echo "Warning: ${NEWX} is less than the minimum size of 80" ++ fi ++ ++ if [ ${NEWY} -ge 24 ] ; then ++ Y=${NEWY} ++ else ++ echo "Warning: ${NEWY} is less than the minimum size of 24" ++ fi ++ ++ shift ++ ;; ++ ++ *) ++# # accept console or ofconsole ++# if [ "$option" != "console" -a "$option" != "ofconsole" ] ; then ++# echo "Error: GRUB_TERMINFO unknown console: $option" ++# exit 1 ++# fi ++# # perfer console ++# TERMINAL=console ++ # accept ofconsole ++ if [ "$option" != "ofconsole" ] ; then ++ echo "Error: GRUB_TERMINFO unknown console: $option" ++ exit 1 ++ fi ++ # perfer console ++ TERMINAL=ofconsole ++ ;; ++ esac ++ ++ done ++ ++} ++ ++if ! uname -m | grep -q ppc ; then ++ exit 0 ++fi ++ ++if [ "x${GRUB_TERMINFO}" != "x" ] ; then ++ F1=`echo ${GRUB_TERMINFO} | cut -d " " -f 1` ++ ++ if [ "${F1}" != "terminfo" ] ; then ++ echo "Error: GRUB_TERMINFO is set to \"${GRUB_TERMINFO}\" The first word should be terminfo." ++ exit 1 ++ fi ++ ++ check_terminfo ${GRUB_TERMINFO} ++fi ++ ++cat << EOF ++ terminfo -g ${X}x${Y} ${TERMINAL} ++EOF +-- +1.8.5.3 + diff --git a/0062-Add-fw_path-variable-revised.patch b/0062-Add-fw_path-variable-revised.patch new file mode 100644 index 0000000..2cd53b6 --- /dev/null +++ b/0062-Add-fw_path-variable-revised.patch @@ -0,0 +1,81 @@ +From 43043c52e35c5e10917680785ffa424dded3ee2b Mon Sep 17 00:00:00 2001 +From: Paulo Flabiano Smorigo +Date: Wed, 19 Sep 2012 21:22:55 -0300 +Subject: [PATCH 062/112] Add fw_path variable (revised) + +This patch makes grub look for its config file on efi where the app was +found. It was originally written by Matthew Garrett, and adapted to fix the +"No modules are loaded on grub2 network boot" issue: + +https://bugzilla.redhat.com/show_bug.cgi?id=857936 +--- + grub-core/kern/main.c | 13 ++++++------- + grub-core/normal/main.c | 25 ++++++++++++++++++++++++- + 2 files changed, 30 insertions(+), 8 deletions(-) + +diff --git a/grub-core/kern/main.c b/grub-core/kern/main.c +index 9cad0c4..8ab7794 100644 +--- a/grub-core/kern/main.c ++++ b/grub-core/kern/main.c +@@ -127,16 +127,15 @@ grub_set_prefix_and_root (void) + + grub_machine_get_bootlocation (&fwdevice, &fwpath); + +- if (fwdevice) ++ if (fwdevice && fwpath) + { +- char *cmdpath; ++ char *fw_path; + +- cmdpath = grub_xasprintf ("(%s)%s", fwdevice, fwpath ? : ""); +- if (cmdpath) ++ fw_path = grub_xasprintf ("(%s)/%s", fwdevice, fwpath); ++ if (fw_path) + { +- grub_env_set ("cmdpath", cmdpath); +- grub_env_export ("cmdpath"); +- grub_free (cmdpath); ++ grub_env_set ("fw_path", fw_path); ++ grub_free (fw_path); + } + } + +diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c +index 3a926fc..6f4970f 100644 +--- a/grub-core/normal/main.c ++++ b/grub-core/normal/main.c +@@ -319,7 +319,30 @@ grub_cmd_normal (struct grub_command *cmd __attribute__ ((unused)), + /* Guess the config filename. It is necessary to make CONFIG static, + so that it won't get broken by longjmp. */ + char *config; +- const char *prefix; ++ const char *prefix, *fw_path; ++ ++ fw_path = grub_env_get ("fw_path"); ++ if (fw_path) ++ { ++ config = grub_xasprintf ("%s/grub.cfg", fw_path); ++ if (config) ++ { ++ grub_file_t file; ++ ++ file = grub_file_open (config); ++ if (file) ++ { ++ grub_file_close (file); ++ grub_enter_normal_mode (config); ++ } ++ else ++ { ++ /* Ignore all errors. */ ++ grub_errno = 0; ++ } ++ grub_free (config); ++ } ++ } + + prefix = grub_env_get ("prefix"); + if (prefix) +-- +1.8.5.3 + diff --git a/0063-Add-support-for-linuxefi.patch b/0063-Add-support-for-linuxefi.patch new file mode 100644 index 0000000..c144376 --- /dev/null +++ b/0063-Add-support-for-linuxefi.patch @@ -0,0 +1,482 @@ +From cfff39b9ce8df82b953b43fae15bbff32d3d0e86 Mon Sep 17 00:00:00 2001 +From: Matthew Garrett +Date: Tue, 10 Jul 2012 11:58:52 -0400 +Subject: [PATCH 063/112] Add support for linuxefi + +--- + grub-core/Makefile.core.def | 8 + + grub-core/kern/efi/mm.c | 32 ++++ + grub-core/loader/i386/efi/linux.c | 371 ++++++++++++++++++++++++++++++++++++++ + include/grub/efi/efi.h | 3 + + include/grub/i386/linux.h | 1 + + 5 files changed, 415 insertions(+) + create mode 100644 grub-core/loader/i386/efi/linux.c + +diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def +index 42443bc..ec46506 100644 +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -1706,6 +1706,14 @@ module = { + }; + + module = { ++ name = linuxefi; ++ efi = loader/i386/efi/linux.c; ++ efi = lib/cmdline.c; ++ enable = i386_efi; ++ enable = x86_64_efi; ++}; ++ ++module = { + name = chain; + efi = loader/efi/chainloader.c; + i386_pc = loader/i386/pc/chainloader.c; +diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c +index be37afd..ddeca60 100644 +--- a/grub-core/kern/efi/mm.c ++++ b/grub-core/kern/efi/mm.c +@@ -49,6 +49,38 @@ static grub_efi_uintn_t finish_desc_size; + static grub_efi_uint32_t finish_desc_version; + int grub_efi_is_finished = 0; + ++/* Allocate pages below a specified address */ ++void * ++grub_efi_allocate_pages_max (grub_efi_physical_address_t max, ++ grub_efi_uintn_t pages) ++{ ++ grub_efi_status_t status; ++ grub_efi_boot_services_t *b; ++ grub_efi_physical_address_t address = max; ++ ++ if (max > 0xffffffff) ++ return 0; ++ ++ b = grub_efi_system_table->boot_services; ++ status = efi_call_4 (b->allocate_pages, GRUB_EFI_ALLOCATE_MAX_ADDRESS, GRUB_EFI_LOADER_DATA, pages, &address); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ return 0; ++ ++ if (address == 0) ++ { ++ /* Uggh, the address 0 was allocated... This is too annoying, ++ so reallocate another one. */ ++ address = max; ++ status = efi_call_4 (b->allocate_pages, GRUB_EFI_ALLOCATE_MAX_ADDRESS, GRUB_EFI_LOADER_DATA, pages, &address); ++ grub_efi_free_pages (0, pages); ++ if (status != GRUB_EFI_SUCCESS) ++ return 0; ++ } ++ ++ return (void *) ((grub_addr_t) address); ++} ++ + /* Allocate pages. Return the pointer to the first of allocated pages. */ + void * + grub_efi_allocate_pages (grub_efi_physical_address_t address, +diff --git a/grub-core/loader/i386/efi/linux.c b/grub-core/loader/i386/efi/linux.c +new file mode 100644 +index 0000000..b79e632 +--- /dev/null ++++ b/grub-core/loader/i386/efi/linux.c +@@ -0,0 +1,371 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2012 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 . ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++GRUB_MOD_LICENSE ("GPLv3+"); ++ ++static grub_dl_t my_mod; ++static int loaded; ++static void *kernel_mem; ++static grub_uint64_t kernel_size; ++static grub_uint8_t *initrd_mem; ++static grub_uint32_t handover_offset; ++struct linux_kernel_params *params; ++static char *linux_cmdline; ++ ++#define BYTES_TO_PAGES(bytes) (((bytes) + 0xfff) >> 12) ++ ++#define SHIM_LOCK_GUID \ ++ { 0x605dab50, 0xe046, 0x4300, {0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b, 0x23} } ++ ++struct grub_efi_shim_lock ++{ ++ grub_efi_status_t (*verify) (void *buffer, grub_uint32_t size); ++}; ++typedef struct grub_efi_shim_lock grub_efi_shim_lock_t; ++ ++static grub_efi_boolean_t ++grub_linuxefi_secure_validate (void *data, grub_uint32_t size) ++{ ++ grub_efi_guid_t guid = SHIM_LOCK_GUID; ++ grub_efi_shim_lock_t *shim_lock; ++ ++ shim_lock = grub_efi_locate_protocol(&guid, NULL); ++ ++ if (!shim_lock) ++ return 1; ++ ++ if (shim_lock->verify(data, size) == GRUB_EFI_SUCCESS) ++ return 1; ++ ++ return 0; ++} ++ ++typedef void(*handover_func)(void *, grub_efi_system_table_t *, struct linux_kernel_params *); ++ ++static grub_err_t ++grub_linuxefi_boot (void) ++{ ++ handover_func hf; ++ int offset = 0; ++ ++#ifdef __x86_64__ ++ offset = 512; ++#endif ++ ++ hf = (handover_func)((char *)kernel_mem + handover_offset + offset); ++ ++ asm volatile ("cli"); ++ ++ hf (grub_efi_image_handle, grub_efi_system_table, params); ++ ++ /* Not reached */ ++ return GRUB_ERR_NONE; ++} ++ ++static grub_err_t ++grub_linuxefi_unload (void) ++{ ++ grub_dl_unref (my_mod); ++ loaded = 0; ++ if (initrd_mem) ++ grub_efi_free_pages((grub_efi_physical_address_t)initrd_mem, BYTES_TO_PAGES(params->ramdisk_size)); ++ if (linux_cmdline) ++ grub_efi_free_pages((grub_efi_physical_address_t)linux_cmdline, BYTES_TO_PAGES(params->cmdline_size + 1)); ++ if (kernel_mem) ++ grub_efi_free_pages((grub_efi_physical_address_t)kernel_mem, BYTES_TO_PAGES(kernel_size)); ++ if (params) ++ grub_efi_free_pages((grub_efi_physical_address_t)params, BYTES_TO_PAGES(16384)); ++ return GRUB_ERR_NONE; ++} ++ ++static grub_err_t ++grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)), ++ int argc, char *argv[]) ++{ ++ grub_file_t *files = 0; ++ int i, nfiles = 0; ++ grub_size_t size = 0; ++ grub_uint8_t *ptr; ++ ++ if (argc == 0) ++ { ++ grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); ++ goto fail; ++ } ++ ++ if (!loaded) ++ { ++ grub_error (GRUB_ERR_BAD_ARGUMENT, N_("you need to load the kernel first")); ++ goto fail; ++ } ++ ++ files = grub_zalloc (argc * sizeof (files[0])); ++ if (!files) ++ goto fail; ++ ++ for (i = 0; i < argc; i++) ++ { ++ grub_file_filter_disable_compression (); ++ files[i] = grub_file_open (argv[i]); ++ if (! files[i]) ++ goto fail; ++ nfiles++; ++ size += ALIGN_UP (grub_file_size (files[i]), 4); ++ } ++ ++ initrd_mem = grub_efi_allocate_pages_max (0x3fffffff, BYTES_TO_PAGES(size)); ++ ++ if (!initrd_mem) ++ { ++ grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("can't allocate initrd")); ++ goto fail; ++ } ++ ++ params->ramdisk_size = size; ++ params->ramdisk_image = (grub_uint32_t)(grub_uint64_t) initrd_mem; ++ ++ ptr = initrd_mem; ++ ++ for (i = 0; i < nfiles; i++) ++ { ++ grub_ssize_t cursize = grub_file_size (files[i]); ++ if (grub_file_read (files[i], ptr, cursize) != cursize) ++ { ++ if (!grub_errno) ++ grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"), ++ argv[i]); ++ goto fail; ++ } ++ ptr += cursize; ++ grub_memset (ptr, 0, ALIGN_UP_OVERHEAD (cursize, 4)); ++ ptr += ALIGN_UP_OVERHEAD (cursize, 4); ++ } ++ ++ params->ramdisk_size = size; ++ ++ fail: ++ for (i = 0; i < nfiles; i++) ++ grub_file_close (files[i]); ++ grub_free (files); ++ ++ if (initrd_mem && grub_errno) ++ grub_efi_free_pages((grub_efi_physical_address_t)initrd_mem, BYTES_TO_PAGES(size)); ++ ++ return grub_errno; ++} ++ ++static grub_err_t ++grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), ++ int argc, char *argv[]) ++{ ++ grub_file_t file = 0; ++ struct linux_kernel_header lh; ++ grub_ssize_t len, start, filelen; ++ void *kernel; ++ ++ grub_dl_ref (my_mod); ++ ++ if (argc == 0) ++ { ++ grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); ++ goto fail; ++ } ++ ++ file = grub_file_open (argv[0]); ++ if (! file) ++ goto fail; ++ ++ filelen = grub_file_size (file); ++ ++ kernel = grub_malloc(filelen); ++ ++ if (!kernel) ++ { ++ grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("cannot allocate kernel buffer")); ++ goto fail; ++ } ++ ++ if (grub_file_read (file, kernel, filelen) != filelen) ++ { ++ grub_error (GRUB_ERR_FILE_READ_ERROR, N_("Can't read kernel %s"), argv[0]); ++ goto fail; ++ } ++ ++ if (! grub_linuxefi_secure_validate (kernel, filelen)) ++ { ++ grub_error (GRUB_ERR_INVALID_COMMAND, N_("%s has invalid signature"), argv[0]); ++ grub_free (kernel); ++ goto fail; ++ } ++ ++ grub_file_seek (file, 0); ++ ++ grub_free(kernel); ++ ++ params = grub_efi_allocate_pages_max (0x3fffffff, BYTES_TO_PAGES(16384)); ++ ++ if (! params) ++ { ++ grub_error (GRUB_ERR_OUT_OF_MEMORY, "cannot allocate kernel parameters"); ++ goto fail; ++ } ++ ++ memset (params, 0, 16384); ++ ++ if (grub_file_read (file, &lh, sizeof (lh)) != sizeof (lh)) ++ { ++ if (!grub_errno) ++ grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"), ++ argv[0]); ++ goto fail; ++ } ++ ++ if (lh.boot_flag != grub_cpu_to_le16 (0xaa55)) ++ { ++ grub_error (GRUB_ERR_BAD_OS, N_("invalid magic number")); ++ goto fail; ++ } ++ ++ if (lh.setup_sects > GRUB_LINUX_MAX_SETUP_SECTS) ++ { ++ grub_error (GRUB_ERR_BAD_OS, N_("too many setup sectors")); ++ goto fail; ++ } ++ ++ if (lh.version < grub_cpu_to_le16 (0x020b)) ++ { ++ grub_error (GRUB_ERR_BAD_OS, N_("kernel too old")); ++ goto fail; ++ } ++ ++ if (!lh.handover_offset) ++ { ++ grub_error (GRUB_ERR_BAD_OS, N_("kernel doesn't support EFI handover")); ++ goto fail; ++ } ++ ++ linux_cmdline = grub_efi_allocate_pages_max(0x3fffffff, ++ BYTES_TO_PAGES(lh.cmdline_size + 1)); ++ ++ if (!linux_cmdline) ++ { ++ grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("can't allocate cmdline")); ++ goto fail; ++ } ++ ++ grub_memcpy (linux_cmdline, LINUX_IMAGE, sizeof (LINUX_IMAGE)); ++ grub_create_loader_cmdline (argc, argv, ++ linux_cmdline + sizeof (LINUX_IMAGE) - 1, ++ lh.cmdline_size - (sizeof (LINUX_IMAGE) - 1)); ++ ++ lh.cmd_line_ptr = (grub_uint32_t)(grub_uint64_t)linux_cmdline; ++ ++ handover_offset = lh.handover_offset; ++ ++ start = (lh.setup_sects + 1) * 512; ++ len = grub_file_size(file) - start; ++ ++ kernel_mem = grub_efi_allocate_pages(lh.pref_address, ++ BYTES_TO_PAGES(lh.init_size)); ++ ++ if (!kernel_mem) ++ kernel_mem = grub_efi_allocate_pages_max(0x3fffffff, ++ BYTES_TO_PAGES(lh.init_size)); ++ ++ if (!kernel_mem) ++ { ++ grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("can't allocate kernel")); ++ goto fail; ++ } ++ ++ if (grub_file_seek (file, start) == (grub_off_t) -1) ++ { ++ grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"), ++ argv[0]); ++ goto fail; ++ } ++ ++ if (grub_file_read (file, kernel_mem, len) != len && !grub_errno) ++ { ++ grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"), ++ argv[0]); ++ } ++ ++ if (grub_errno == GRUB_ERR_NONE) ++ { ++ grub_loader_set (grub_linuxefi_boot, grub_linuxefi_unload, 0); ++ loaded = 1; ++ lh.code32_start = (grub_uint32_t)(grub_uint64_t) kernel_mem; ++ } ++ ++ memcpy(params, &lh, 2 * 512); ++ ++ params->type_of_loader = 0x21; ++ ++ fail: ++ ++ if (file) ++ grub_file_close (file); ++ ++ if (grub_errno != GRUB_ERR_NONE) ++ { ++ grub_dl_unref (my_mod); ++ loaded = 0; ++ } ++ ++ if (linux_cmdline && !loaded) ++ grub_efi_free_pages((grub_efi_physical_address_t)linux_cmdline, BYTES_TO_PAGES(lh.cmdline_size + 1)); ++ ++ if (kernel_mem && !loaded) ++ grub_efi_free_pages((grub_efi_physical_address_t)kernel_mem, BYTES_TO_PAGES(kernel_size)); ++ ++ if (params && !loaded) ++ grub_efi_free_pages((grub_efi_physical_address_t)params, BYTES_TO_PAGES(16384)); ++ ++ return grub_errno; ++} ++ ++static grub_command_t cmd_linux, cmd_initrd; ++ ++GRUB_MOD_INIT(linuxefi) ++{ ++ cmd_linux = ++ grub_register_command ("linuxefi", grub_cmd_linux, ++ 0, N_("Load Linux.")); ++ cmd_initrd = ++ grub_register_command ("initrdefi", grub_cmd_initrd, ++ 0, N_("Load initrd.")); ++ my_mod = mod; ++} ++ ++GRUB_MOD_FINI(linuxefi) ++{ ++ grub_unregister_command (cmd_linux); ++ grub_unregister_command (cmd_initrd); ++} +diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h +index 489cf9e..9370fd5 100644 +--- a/include/grub/efi/efi.h ++++ b/include/grub/efi/efi.h +@@ -40,6 +40,9 @@ void EXPORT_FUNC(grub_efi_stall) (grub_efi_uintn_t microseconds); + void * + EXPORT_FUNC(grub_efi_allocate_pages) (grub_efi_physical_address_t address, + grub_efi_uintn_t pages); ++void * ++EXPORT_FUNC(grub_efi_allocate_pages_max) (grub_efi_physical_address_t max, ++ grub_efi_uintn_t pages); + void EXPORT_FUNC(grub_efi_free_pages) (grub_efi_physical_address_t address, + grub_efi_uintn_t pages); + int +diff --git a/include/grub/i386/linux.h b/include/grub/i386/linux.h +index da0ca3b..fc36bda 100644 +--- a/include/grub/i386/linux.h ++++ b/include/grub/i386/linux.h +@@ -139,6 +139,7 @@ struct linux_kernel_header + grub_uint64_t setup_data; + grub_uint64_t pref_address; + grub_uint32_t init_size; ++ grub_uint32_t handover_offset; + } GRUB_PACKED; + + /* Boot parameters for Linux based on 2.6.12. This is used by the setup +-- +1.8.5.3 + diff --git a/0064-Use-linuxefi-and-initrdefi-where-appropriate.patch b/0064-Use-linuxefi-and-initrdefi-where-appropriate.patch new file mode 100644 index 0000000..b8dbd2c --- /dev/null +++ b/0064-Use-linuxefi-and-initrdefi-where-appropriate.patch @@ -0,0 +1,50 @@ +From 8fbe65e81f9f2d1c8595174b52e9652fd9ba1f2f Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 16 Jul 2012 18:57:11 -0400 +Subject: [PATCH 064/112] Use "linuxefi" and "initrdefi" where appropriate. + +--- + util/grub.d/10_linux.in | 18 ++++++++++++++++-- + 1 file changed, 16 insertions(+), 2 deletions(-) + +diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in +index 00d1931..ad34cc0 100644 +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -127,17 +127,31 @@ linux_entry () + printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/" + fi + message="$(gettext_printf "Loading Linux %s ..." ${version})" +- sed "s/^/$submenu_indentation/" << EOF ++ if [ -d /sys/firmware/efi ]; then ++ sed "s/^/$submenu_indentation/" << EOF ++ echo '$(echo "$message" | grub_quote)' ++ linuxefi ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} ++EOF ++ else ++ sed "s/^/$submenu_indentation/" << EOF + echo '$(echo "$message" | grub_quote)' + linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} + EOF ++ fi + if test -n "${initrd}" ; then + # TRANSLATORS: ramdisk isn't identifier. Should be translated. + message="$(gettext_printf "Loading initial ramdisk ...")" +- sed "s/^/$submenu_indentation/" << EOF ++ if [ -d /sys/firmware/efi ]; then ++ sed "s/^/$submenu_indentation/" << EOF + echo '$(echo "$message" | grub_quote)' ++ initrdefi ${rel_dirname}/${initrd} ++EOF ++ else ++ sed "s/^/$submenu_indentation/" << EOF ++ echo '$message' + initrd ${rel_dirname}/${initrd} + EOF ++ fi + fi + sed "s/^/$submenu_indentation/" << EOF + } +-- +1.8.5.3 + diff --git a/0065-Don-t-allow-insmod-when-secure-boot-is-enabled.patch b/0065-Don-t-allow-insmod-when-secure-boot-is-enabled.patch new file mode 100644 index 0000000..d4970fa --- /dev/null +++ b/0065-Don-t-allow-insmod-when-secure-boot-is-enabled.patch @@ -0,0 +1,117 @@ +From 5bea89dbabf74ecc9214fe007af2332badc8539a Mon Sep 17 00:00:00 2001 +From: Colin Watson +Date: Tue, 23 Oct 2012 10:40:49 -0400 +Subject: [PATCH 065/112] Don't allow insmod when secure boot is enabled. + +Hi, + +Fedora's patch to forbid insmod in UEFI Secure Boot environments is fine +as far as it goes. However, the insmod command is not the only way that +modules can be loaded. In particular, the 'normal' command, which +implements the usual GRUB menu and the fully-featured command prompt, +will implicitly load commands not currently loaded into memory. This +permits trivial Secure Boot violations by writing commands implementing +whatever you want to do and pointing $prefix at the malicious code. + +I'm currently test-building this patch (replacing your current +grub-2.00-no-insmod-on-sb.patch), but this should be more correct. It +moves the check into grub_dl_load_file. +--- + grub-core/kern/dl.c | 21 +++++++++++++++++++++ + grub-core/kern/efi/efi.c | 28 ++++++++++++++++++++++++++++ + include/grub/efi/efi.h | 1 + + 3 files changed, 50 insertions(+) + +diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c +index 6850e04..b0b0405 100644 +--- a/grub-core/kern/dl.c ++++ b/grub-core/kern/dl.c +@@ -38,6 +38,14 @@ + #define GRUB_MODULES_MACHINE_READONLY + #endif + ++#ifdef GRUB_MACHINE_EMU ++#include ++#endif ++ ++#ifdef GRUB_MACHINE_EFI ++#include ++#endif ++ + + + #pragma GCC diagnostic ignored "-Wcast-align" +@@ -680,6 +688,19 @@ grub_dl_load_file (const char *filename) + void *core = 0; + grub_dl_t mod = 0; + ++#ifdef GRUB_MACHINE_EFI ++ if (grub_efi_secure_boot ()) ++ { ++#if 0 ++ /* This is an error, but grub2-mkconfig still generates a pile of ++ * insmod commands, so emitting it would be mostly just obnoxious. */ ++ grub_error (GRUB_ERR_ACCESS_DENIED, ++ "Secure Boot forbids loading module from %s", filename); ++#endif ++ return 0; ++ } ++#endif ++ + grub_boot_time ("Loading module %s", filename); + + file = grub_file_open (filename); +diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c +index b9eb1ab..cd839cc 100644 +--- a/grub-core/kern/efi/efi.c ++++ b/grub-core/kern/efi/efi.c +@@ -259,6 +259,34 @@ grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid, + return NULL; + } + ++grub_efi_boolean_t ++grub_efi_secure_boot (void) ++{ ++ grub_efi_guid_t efi_var_guid = GRUB_EFI_GLOBAL_VARIABLE_GUID; ++ grub_size_t datasize; ++ char *secure_boot = NULL; ++ char *setup_mode = NULL; ++ grub_efi_boolean_t ret = 0; ++ ++ secure_boot = grub_efi_get_variable("SecureBoot", &efi_var_guid, &datasize); ++ ++ if (datasize != 1 || !secure_boot) ++ goto out; ++ ++ setup_mode = grub_efi_get_variable("SetupMode", &efi_var_guid, &datasize); ++ ++ if (datasize != 1 || !setup_mode) ++ goto out; ++ ++ if (*secure_boot && !*setup_mode) ++ ret = 1; ++ ++ out: ++ grub_free (secure_boot); ++ grub_free (setup_mode); ++ return ret; ++} ++ + #pragma GCC diagnostic ignored "-Wcast-align" + + /* Search the mods section from the PE32/PE32+ image. This code uses +diff --git a/include/grub/efi/efi.h b/include/grub/efi/efi.h +index 9370fd5..a000c38 100644 +--- a/include/grub/efi/efi.h ++++ b/include/grub/efi/efi.h +@@ -72,6 +72,7 @@ EXPORT_FUNC (grub_efi_set_variable) (const char *var, + const grub_efi_guid_t *guid, + void *data, + grub_size_t datasize); ++grub_efi_boolean_t EXPORT_FUNC (grub_efi_secure_boot) (void); + int + EXPORT_FUNC (grub_efi_compare_device_paths) (const grub_efi_device_path_t *dp1, + const grub_efi_device_path_t *dp2); +-- +1.8.5.3 + diff --git a/0066-Pass-x-hex-hex-straight-through-unmolested.patch b/0066-Pass-x-hex-hex-straight-through-unmolested.patch new file mode 100644 index 0000000..c9239c3 --- /dev/null +++ b/0066-Pass-x-hex-hex-straight-through-unmolested.patch @@ -0,0 +1,183 @@ +From 6e8b72a26bc7a42903b6c75b131981ceac59f6ef Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 1 Oct 2012 13:24:37 -0400 +Subject: [PATCH 066/112] Pass "\x[[:hex:]][[:hex:]]" straight through + unmolested. + +--- + grub-core/commands/wildcard.c | 16 +++++++++++++++- + grub-core/lib/cmdline.c | 34 ++++++++++++++++++++++++++++++++-- + grub-core/script/execute.c | 43 +++++++++++++++++++++++++++++++++++++------ + 3 files changed, 84 insertions(+), 9 deletions(-) + +diff --git a/grub-core/commands/wildcard.c b/grub-core/commands/wildcard.c +index 2807f80..0f40e04 100644 +--- a/grub-core/commands/wildcard.c ++++ b/grub-core/commands/wildcard.c +@@ -458,6 +458,12 @@ check_file (const char *dir, const char *basename) + return ctx.found; + } + ++static int ++is_hex(char c) ++{ ++ return ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); ++} ++ + static void + unescape (char *out, const char *in, const char *end) + { +@@ -466,7 +472,15 @@ unescape (char *out, const char *in, const char *end) + + for (optr = out, iptr = in; iptr < end;) + { +- if (*iptr == '\\' && iptr + 1 < end) ++ if (*iptr == '\\' && iptr + 3 < end && iptr[1] == 'x' && is_hex(iptr[2]) && is_hex(iptr[3])) ++ { ++ *optr++ = *iptr++; ++ *optr++ = *iptr++; ++ *optr++ = *iptr++; ++ *optr++ = *iptr++; ++ continue; ++ } ++ else if (*iptr == '\\' && iptr + 1 < end) + { + *optr++ = iptr[1]; + iptr += 2; +diff --git a/grub-core/lib/cmdline.c b/grub-core/lib/cmdline.c +index d5e10ee..0a5b2af 100644 +--- a/grub-core/lib/cmdline.c ++++ b/grub-core/lib/cmdline.c +@@ -20,6 +20,12 @@ + #include + #include + ++static int ++is_hex(char c) ++{ ++ return ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); ++} ++ + static unsigned int check_arg (char *c, int *has_space) + { + int space = 0; +@@ -27,7 +33,13 @@ static unsigned int check_arg (char *c, int *has_space) + + while (*c) + { +- if (*c == '\\' || *c == '\'' || *c == '"') ++ if (*c == '\\' && *(c+1) == 'x' && is_hex(*(c+2)) && is_hex(*(c+3))) ++ { ++ size += 4; ++ c += 4; ++ continue; ++ } ++ else if (*c == '\\' || *c == '\'' || *c == '"') + size++; + else if (*c == ' ') + space = 1; +@@ -85,7 +97,25 @@ int grub_create_loader_cmdline (int argc, char *argv[], char *buf, + + while (*c) + { +- if (*c == '\\' || *c == '\'' || *c == '"') ++ if (*c == ' ') ++ { ++ *buf++ = '\\'; ++ *buf++ = 'x'; ++ *buf++ = '2'; ++ *buf++ = '0'; ++ c++; ++ continue; ++ } ++ else if (*c == '\\' && *(c+1) == 'x' && ++ is_hex(*(c+2)) && is_hex(*(c+3))) ++ { ++ *buf++ = *c++; ++ *buf++ = *c++; ++ *buf++ = *c++; ++ *buf++ = *c++; ++ continue; ++ } ++ else if (*c == '\\' || *c == '\'' || *c == '"') + *buf++ = '\\'; + + *buf++ = *c; +diff --git a/grub-core/script/execute.c b/grub-core/script/execute.c +index afd5513..8f01c1b 100644 +--- a/grub-core/script/execute.c ++++ b/grub-core/script/execute.c +@@ -52,6 +52,12 @@ static struct grub_script_scope *scope = 0; + /* Wildcard translator for GRUB script. */ + struct grub_script_wildcard_translator *grub_wildcard_translator; + ++static int ++is_hex(char c) ++{ ++ return ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); ++} ++ + static char* + wildcard_escape (const char *s) + { +@@ -68,7 +74,15 @@ wildcard_escape (const char *s) + i = 0; + while ((ch = *s++)) + { +- if (ch == '*' || ch == '\\' || ch == '?') ++ if (ch == '\\' && s[0] == 'x' && is_hex(s[1]) && is_hex(s[2])) ++ { ++ p[i++] = ch; ++ p[i++] = *s++; ++ p[i++] = *s++; ++ p[i++] = *s++; ++ continue; ++ } ++ else if (ch == '*' || ch == '\\' || ch == '?') + p[i++] = '\\'; + p[i++] = ch; + } +@@ -92,7 +106,14 @@ wildcard_unescape (const char *s) + i = 0; + while ((ch = *s++)) + { +- if (ch == '\\') ++ if (ch == '\\' && s[0] == 'x' && is_hex(s[1]) && is_hex(s[2])) ++ { ++ p[i++] = '\\'; ++ p[i++] = *s++; ++ p[i++] = *s++; ++ p[i++] = *s++; ++ } ++ else if (ch == '\\') + p[i++] = *s++; + else + p[i++] = ch; +@@ -394,10 +415,20 @@ parse_string (const char *str, + switch (*ptr) + { + case '\\': +- escaped = !escaped; +- if (!escaped && put) +- *(put++) = '\\'; +- ptr++; ++ if (!escaped && put && *(ptr+1) == 'x' && is_hex(*(ptr+2)) && is_hex(*(ptr+3))) ++ { ++ *(put++) = *ptr++; ++ *(put++) = *ptr++; ++ *(put++) = *ptr++; ++ *(put++) = *ptr++; ++ } ++ else ++ { ++ escaped = !escaped; ++ if (!escaped && put) ++ *(put++) = '\\'; ++ ptr++; ++ } + break; + case '$': + if (escaped) +-- +1.8.5.3 + diff --git a/0067-Fix-crash-on-http.patch b/0067-Fix-crash-on-http.patch new file mode 100644 index 0000000..2ee43a6 --- /dev/null +++ b/0067-Fix-crash-on-http.patch @@ -0,0 +1,28 @@ +From 811019810ebfa189f344c0b383edd2b1e1c2642e Mon Sep 17 00:00:00 2001 +From: Gustavo Luiz Duarte +Date: Tue, 25 Sep 2012 18:40:55 -0400 +Subject: [PATCH 067/112] Fix crash on http + +Don't free file->data on receiving FIN flag since it is used all over without +checking. http_close() will be called later to free that memory. +https://bugzilla.redhat.com/show_bug.cgi?id=860834 +--- + grub-core/net/http.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/net/http.c b/grub-core/net/http.c +index 4684f8b..ef9538c 100644 +--- a/grub-core/net/http.c ++++ b/grub-core/net/http.c +@@ -393,7 +393,7 @@ http_establish (struct grub_file *file, grub_off_t offset, int initial) + + data->sock = grub_net_tcp_open (file->device->net->server, + HTTP_PORT, http_receive, +- http_err, http_err, ++ http_err, NULL, + file); + if (!data->sock) + { +-- +1.8.5.3 + diff --git a/0068-IBM-client-architecture-CAS-reboot-support.patch b/0068-IBM-client-architecture-CAS-reboot-support.patch new file mode 100644 index 0000000..8983032 --- /dev/null +++ b/0068-IBM-client-architecture-CAS-reboot-support.patch @@ -0,0 +1,174 @@ +From 63142e7aa720617eb8bbf36d6b6eb78b78337332 Mon Sep 17 00:00:00 2001 +From: Paulo Flabiano Smorigo +Date: Thu, 20 Sep 2012 18:07:39 -0300 +Subject: [PATCH 068/112] IBM client architecture (CAS) reboot support + +This is an implementation of IBM client architecture (CAS) reboot for GRUB. + +There are cases where the POWER firmware must reboot in order to support +specific features requested by a kernel. The kernel calls +ibm,client-architecture-support and it may either return or reboot with the new +feature set. eg: + +Calling ibm,client-architecture-support.../ +Elapsed time since release of system processors: 70959 mins 50 secs +Welcome to GRUB! + +Instead of return to the GRUB menu, it will check if the flag for CAS reboot is +set. If so, grub will automatically boot the last booted kernel using the same +parameters +--- + grub-core/kern/ieee1275/openfw.c | 62 ++++++++++++++++++++++++++++++++++++++++ + grub-core/normal/main.c | 19 ++++++++++++ + grub-core/script/execute.c | 7 +++++ + include/grub/ieee1275/ieee1275.h | 2 ++ + 4 files changed, 90 insertions(+) + +diff --git a/grub-core/kern/ieee1275/openfw.c b/grub-core/kern/ieee1275/openfw.c +index ddb7783..6db8b98 100644 +--- a/grub-core/kern/ieee1275/openfw.c ++++ b/grub-core/kern/ieee1275/openfw.c +@@ -561,3 +561,65 @@ grub_ieee1275_canonicalise_devname (const char *path) + return NULL; + } + ++/* Check if it's a CAS reboot. If so, set the script to be executed. */ ++int ++grub_ieee1275_cas_reboot (char *script) ++{ ++ grub_uint32_t ibm_ca_support_reboot; ++ grub_uint32_t ibm_fw_nbr_reboots; ++ char property_value[10]; ++ grub_ssize_t actual; ++ grub_ieee1275_ihandle_t options; ++ ++ if (grub_ieee1275_finddevice ("/options", &options) < 0) ++ return -1; ++ ++ /* Check two properties, one is enough to get cas reboot value */ ++ ibm_ca_support_reboot = 0; ++ if (grub_ieee1275_get_integer_property (grub_ieee1275_chosen, ++ "ibm,client-architecture-support-reboot", ++ &ibm_ca_support_reboot, ++ sizeof (ibm_ca_support_reboot), ++ &actual) >= 0) ++ grub_dprintf("ieee1275", "ibm,client-architecture-support-reboot: %u\n", ++ ibm_ca_support_reboot); ++ ++ ibm_fw_nbr_reboots = 0; ++ if (grub_ieee1275_get_property (options, "ibm,fw-nbr-reboots", ++ property_value, sizeof (property_value), ++ &actual) >= 0) ++ { ++ property_value[sizeof (property_value) - 1] = 0; ++ ibm_fw_nbr_reboots = (grub_uint8_t) grub_strtoul (property_value, 0, 10); ++ grub_dprintf("ieee1275", "ibm,fw-nbr-reboots: %u\n", ibm_fw_nbr_reboots); ++ } ++ ++ if (ibm_ca_support_reboot || ibm_fw_nbr_reboots) ++ { ++ if (! grub_ieee1275_get_property_length (options, "boot-last-label", &actual)) ++ { ++ if (actual > 1024) ++ script = grub_realloc (script, actual + 1); ++ grub_ieee1275_get_property (options, "boot-last-label", script, actual, ++ &actual); ++ return 0; ++ } ++ } ++ ++ grub_ieee1275_set_boot_last_label (""); ++ ++ return -1; ++} ++ ++int grub_ieee1275_set_boot_last_label (const char *text) ++{ ++ grub_ieee1275_ihandle_t options; ++ grub_ssize_t actual; ++ ++ grub_dprintf("ieee1275", "set boot_last_label (size: %u)\n", grub_strlen(text)); ++ if (! grub_ieee1275_finddevice ("/options", &options) && ++ options != (grub_ieee1275_ihandle_t) -1) ++ grub_ieee1275_set_property (options, "boot-last-label", text, ++ grub_strlen (text), &actual); ++ return 0; ++} +diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c +index 6f4970f..f72844c 100644 +--- a/grub-core/normal/main.c ++++ b/grub-core/normal/main.c +@@ -33,6 +33,9 @@ + #include + #include + #include ++#ifdef GRUB_MACHINE_IEEE1275 ++#include ++#endif + + GRUB_MOD_LICENSE ("GPLv3+"); + +@@ -275,6 +278,22 @@ grub_normal_execute (const char *config, int nested, int batch) + { + menu = read_config_file (config); + ++#ifdef GRUB_MACHINE_IEEE1275 ++ int boot; ++ boot = 0; ++ char *script; ++ script = grub_malloc (1024); ++ if (! grub_ieee1275_cas_reboot (script)) ++ { ++ char *dummy[1] = { NULL }; ++ if (! grub_script_execute_sourcecode (script, 0, dummy)) ++ boot = 1; ++ } ++ grub_free (script); ++ if (boot) ++ grub_command_execute ("boot", 0, 0); ++#endif ++ + /* Ignore any error. */ + grub_errno = GRUB_ERR_NONE; + } +diff --git a/grub-core/script/execute.c b/grub-core/script/execute.c +index 8f01c1b..cec9539 100644 +--- a/grub-core/script/execute.c ++++ b/grub-core/script/execute.c +@@ -27,6 +27,9 @@ + #include + #include + #include ++#ifdef GRUB_MACHINE_IEEE1275 ++#include ++#endif + + /* Max digits for a char is 3 (0xFF is 255), similarly for an int it + is sizeof (int) * 3, and one extra for a possible -ve sign. */ +@@ -892,6 +895,10 @@ grub_script_execute_sourcecode (const char *source) + grub_err_t ret = 0; + struct grub_script *parsed_script; + ++#ifdef GRUB_MACHINE_IEEE1275 ++ grub_ieee1275_set_boot_last_label (source); ++#endif ++ + while (source) + { + char *line; +diff --git a/include/grub/ieee1275/ieee1275.h b/include/grub/ieee1275/ieee1275.h +index 8e42513..9f26c69 100644 +--- a/include/grub/ieee1275/ieee1275.h ++++ b/include/grub/ieee1275/ieee1275.h +@@ -234,6 +234,8 @@ int EXPORT_FUNC(grub_ieee1275_devalias_next) (struct grub_ieee1275_devalias *ali + void EXPORT_FUNC(grub_ieee1275_children_peer) (struct grub_ieee1275_devalias *alias); + void EXPORT_FUNC(grub_ieee1275_children_first) (const char *devpath, + struct grub_ieee1275_devalias *alias); ++int EXPORT_FUNC(grub_ieee1275_cas_reboot) (char *script); ++int EXPORT_FUNC(grub_ieee1275_set_boot_last_label) (const char *text); + + #define FOR_IEEE1275_DEVALIASES(alias) for (grub_ieee1275_devalias_init_iterator (&(alias)); grub_ieee1275_devalias_next (&(alias));) + +-- +1.8.5.3 + diff --git a/0069-Add-vlan-tag-support.patch b/0069-Add-vlan-tag-support.patch new file mode 100644 index 0000000..8a4b22a --- /dev/null +++ b/0069-Add-vlan-tag-support.patch @@ -0,0 +1,186 @@ +From 6ab7728e1097f9f6968627b26c61c08af1b2643c Mon Sep 17 00:00:00 2001 +From: Paulo Flabiano Smorigo +Date: Tue, 30 Oct 2012 15:19:39 -0200 +Subject: [PATCH 069/112] Add vlan-tag support + +This patch adds support for virtual LAN (VLAN) tagging. VLAN tagging allows +multiple VLANs in a bridged network to share the same physical network link but +maintain isolation: + +http://en.wikipedia.org/wiki/IEEE_802.1Q + +This patch should fix this bugzilla: +https://bugzilla.redhat.com/show_bug.cgi?id=871563 +--- + grub-core/kern/ieee1275/init.c | 1 + + grub-core/kern/ieee1275/openfw.c | 30 ++++++++++++++++++++++++++++ + grub-core/net/ethernet.c | 42 +++++++++++++++++++++++++++++++++++++--- + include/grub/ieee1275/ieee1275.h | 1 + + include/grub/net.h | 2 ++ + 5 files changed, 73 insertions(+), 3 deletions(-) + +diff --git a/grub-core/kern/ieee1275/init.c b/grub-core/kern/ieee1275/init.c +index d5bd74d..8191f8c 100644 +--- a/grub-core/kern/ieee1275/init.c ++++ b/grub-core/kern/ieee1275/init.c +@@ -117,6 +117,7 @@ grub_machine_get_bootlocation (char **device, char **path) + char *dev, *canon; + char *ptr; + dev = grub_ieee1275_get_aliasdevname (bootpath); ++ grub_ieee1275_parse_net_options (bootpath); + canon = grub_ieee1275_canonicalise_devname (dev); + ptr = canon + grub_strlen (canon) - 1; + while (ptr > canon && (*ptr == ',' || *ptr == ':')) +diff --git a/grub-core/kern/ieee1275/openfw.c b/grub-core/kern/ieee1275/openfw.c +index 6db8b98..81276fa 100644 +--- a/grub-core/kern/ieee1275/openfw.c ++++ b/grub-core/kern/ieee1275/openfw.c +@@ -23,6 +23,7 @@ + #include + #include + #include ++#include + + enum grub_ieee1275_parse_type + { +@@ -451,6 +452,35 @@ fail: + return ret; + } + ++int ++grub_ieee1275_parse_net_options (const char *path) ++{ ++ char *comma; ++ char *args; ++ char *option = 0; ++ ++ args = grub_ieee1275_get_devargs (path); ++ if (!args) ++ /* There is no option. */ ++ return -1; ++ ++ do ++ { ++ comma = grub_strchr (args, ','); ++ if (! comma) ++ option = grub_strdup (args); ++ else ++ option = grub_strndup (args, (grub_size_t)(comma - args)); ++ args = comma + 1; ++ ++ if (! grub_strncmp(option, "vtag", 4)) ++ grub_env_set ("vlan-tag", option + grub_strlen("vtag=")); ++ ++ } while (comma); ++ ++ return 0; ++} ++ + char * + grub_ieee1275_get_device_type (const char *path) + { +diff --git a/grub-core/net/ethernet.c b/grub-core/net/ethernet.c +index c397b1b..faaca67 100644 +--- a/grub-core/net/ethernet.c ++++ b/grub-core/net/ethernet.c +@@ -23,6 +23,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -56,10 +57,19 @@ send_ethernet_packet (struct grub_net_network_level_interface *inf, + { + struct etherhdr *eth; + grub_err_t err; ++ grub_uint32_t vlantag = 0; ++ grub_uint8_t etherhdr_size; + +- COMPILE_TIME_ASSERT (sizeof (*eth) < GRUB_NET_MAX_LINK_HEADER_SIZE); ++ etherhdr_size = sizeof (*eth); ++ COMPILE_TIME_ASSERT (sizeof (*eth) + 4 < GRUB_NET_MAX_LINK_HEADER_SIZE); + +- err = grub_netbuff_push (nb, sizeof (*eth)); ++ const char *vlantag_text = grub_env_get ("vlan-tag"); ++ if (vlantag_text != 0) { ++ etherhdr_size += 4; ++ vlantag = grub_strtoul (vlantag_text, 0, 16); ++ } ++ ++ err = grub_netbuff_push (nb, etherhdr_size); + if (err) + return err; + eth = (struct etherhdr *) nb->data; +@@ -76,6 +86,19 @@ send_ethernet_packet (struct grub_net_network_level_interface *inf, + return err; + inf->card->opened = 1; + } ++ ++ /* Check if a vlan-tag is needed. */ ++ if (vlantag != 0) ++ { ++ /* Move eth type to the right */ ++ grub_memcpy((char *) nb->data + etherhdr_size - 2, ++ (char *) nb->data + etherhdr_size - 6, 2); ++ ++ /* Add the tag in the middle */ ++ grub_memcpy((char *) nb->data + etherhdr_size - 6, ++ &vlantag, 4); ++ } ++ + return inf->card->driver->send (inf->card, nb); + } + +@@ -90,10 +113,23 @@ grub_net_recv_ethernet_packet (struct grub_net_buff *nb, + grub_net_link_level_address_t hwaddress; + grub_net_link_level_address_t src_hwaddress; + grub_err_t err; ++ grub_uint8_t etherhdr_size = sizeof (*eth); ++ ++ grub_uint16_t vlantag_identifier = 0; ++ grub_memcpy (&vlantag_identifier, nb->data + etherhdr_size - 2, 2); ++ ++ /* Check if a vlan-tag is present. */ ++ if (vlantag_identifier == VLANTAG_IDENTIFIER) ++ { ++ etherhdr_size += 4; ++ /* Move eth type to the original position */ ++ grub_memcpy((char *) nb->data + etherhdr_size - 6, ++ (char *) nb->data + etherhdr_size - 2, 2); ++ } + + eth = (struct etherhdr *) nb->data; + type = grub_be_to_cpu16 (eth->type); +- err = grub_netbuff_pull (nb, sizeof (*eth)); ++ err = grub_netbuff_pull (nb, etherhdr_size); + if (err) + return err; + +diff --git a/include/grub/ieee1275/ieee1275.h b/include/grub/ieee1275/ieee1275.h +index 9f26c69..6a21f5d 100644 +--- a/include/grub/ieee1275/ieee1275.h ++++ b/include/grub/ieee1275/ieee1275.h +@@ -236,6 +236,7 @@ void EXPORT_FUNC(grub_ieee1275_children_first) (const char *devpath, + struct grub_ieee1275_devalias *alias); + int EXPORT_FUNC(grub_ieee1275_cas_reboot) (char *script); + int EXPORT_FUNC(grub_ieee1275_set_boot_last_label) (const char *text); ++int EXPORT_FUNC(grub_ieee1275_parse_net_options) (const char *path); + + #define FOR_IEEE1275_DEVALIASES(alias) for (grub_ieee1275_devalias_init_iterator (&(alias)); grub_ieee1275_devalias_next (&(alias));) + +diff --git a/include/grub/net.h b/include/grub/net.h +index 538baa3..a799e6b 100644 +--- a/include/grub/net.h ++++ b/include/grub/net.h +@@ -538,4 +538,6 @@ extern char *grub_net_default_server; + #define GRUB_NET_INTERVAL 400 + #define GRUB_NET_INTERVAL_ADDITION 20 + ++#define VLANTAG_IDENTIFIER 0x8100 ++ + #endif /* ! GRUB_NET_HEADER */ +-- +1.8.5.3 + diff --git a/0070-Add-X-option-to-printf-functions.patch b/0070-Add-X-option-to-printf-functions.patch new file mode 100644 index 0000000..8ba5252 --- /dev/null +++ b/0070-Add-X-option-to-printf-functions.patch @@ -0,0 +1,58 @@ +From 2f091e824e81e17008f0ba6bf36ac659e82df371 Mon Sep 17 00:00:00 2001 +From: Paulo Flabiano Smorigo +Date: Tue, 27 Nov 2012 16:58:39 -0200 +Subject: [PATCH 070/112] Add %X option to printf functions. + +--- + grub-core/kern/misc.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c +index 54db2e1..50f7f53 100644 +--- a/grub-core/kern/misc.c ++++ b/grub-core/kern/misc.c +@@ -759,7 +759,7 @@ __umoddi3 (grub_uint64_t a, grub_uint64_t b) + static inline char * + grub_lltoa (char *str, int c, unsigned long long n) + { +- unsigned base = (c == 'x') ? 16 : 10; ++ unsigned base = ((c == 'x') || (c == 'X')) ? 16 : 10; + char *p; + + if ((long long) n < 0 && c == 'd') +@@ -774,7 +774,7 @@ grub_lltoa (char *str, int c, unsigned long long n) + do + { + unsigned d = (unsigned) (n & 0xf); +- *p++ = (d > 9) ? d + 'a' - 10 : d + '0'; ++ *p++ = (d > 9) ? d + ((c == 'x') ? 'a' : 'A') - 10 : d + '0'; + } + while (n >>= 4); + else +@@ -847,6 +847,7 @@ parse_printf_args (const char *fmt0, struct printf_args *args, + { + case 'p': + case 'x': ++ case 'X': + case 'u': + case 'd': + case 'c': +@@ -927,6 +928,7 @@ parse_printf_args (const char *fmt0, struct printf_args *args, + switch (c) + { + case 'x': ++ case 'X': + case 'u': + args->ptr[curn].type = UNSIGNED_INT + longfmt; + break; +@@ -1064,6 +1066,7 @@ grub_vsnprintf_real (char *str, grub_size_t max_len, const char *fmt0, + c = 'x'; + /* Fall through. */ + case 'x': ++ case 'X': + case 'u': + case 'd': + { +-- +1.8.5.3 + diff --git a/0071-DHCP-client-ID-and-UUID-options-added.patch b/0071-DHCP-client-ID-and-UUID-options-added.patch new file mode 100644 index 0000000..d921f43 --- /dev/null +++ b/0071-DHCP-client-ID-and-UUID-options-added.patch @@ -0,0 +1,110 @@ +From 018833135590fe2791e44e4f3248f6d2908d0793 Mon Sep 17 00:00:00 2001 +From: Paulo Flabiano Smorigo +Date: Tue, 27 Nov 2012 17:18:53 -0200 +Subject: [PATCH 071/112] DHCP client ID and UUID options added. + +--- + grub-core/net/bootp.c | 52 +++++++++++++++++++++++++++++++++++++++++++-------- + include/grub/net.h | 2 ++ + 2 files changed, 46 insertions(+), 8 deletions(-) + +diff --git a/grub-core/net/bootp.c b/grub-core/net/bootp.c +index 6310ed4..420ec8a 100644 +--- a/grub-core/net/bootp.c ++++ b/grub-core/net/bootp.c +@@ -25,6 +25,14 @@ + #include + #include + ++static char ++hexdigit (grub_uint8_t val) ++{ ++ if (val < 10) ++ return val + '0'; ++ return val + 'a' - 10; ++} ++ + static void + parse_dhcp_vendor (const char *name, const void *vend, int limit, int *mask) + { +@@ -55,6 +63,9 @@ parse_dhcp_vendor (const char *name, const void *vend, int limit, int *mask) + + taglength = *ptr++; + ++ grub_dprintf("net", "DHCP option %u (0x%02x) found with length %u.\n", ++ tagtype, tagtype, taglength); ++ + switch (tagtype) + { + case GRUB_NET_BOOTP_NETMASK: +@@ -120,6 +131,39 @@ parse_dhcp_vendor (const char *name, const void *vend, int limit, int *mask) + taglength); + break; + ++ case GRUB_NET_BOOTP_CLIENT_ID: ++ grub_env_set_net_property (name, "clientid", (char *) ptr, taglength); ++ break; ++ ++ case GRUB_NET_BOOTP_CLIENT_UUID: ++ { ++ if (taglength != 17) ++ break; ++ ++ /* The format is 9cfe245e-d0c8-bd45-a79f-54ea5fbd3d97 */ ++ ++ ptr += 1; ++ taglength -= 1; ++ ++ char *val = grub_malloc (2 * taglength + 4 + 1); ++ int i = 0; ++ int j = 0; ++ for (i = 0; i < taglength; i++) ++ { ++ val[2 * i + j] = hexdigit (ptr[i] >> 4); ++ val[2 * i + 1 + j] = hexdigit (ptr[i] & 0xf); ++ ++ if ((i == 3) || (i == 5) || (i == 7) || (i == 9)) ++ { ++ j++; ++ val[2 * i + 1+ j] = '-'; ++ } ++ } ++ ++ grub_env_set_net_property (name, "clientuuid", (char *) val, 2 * taglength + 4); ++ } ++ break; ++ + /* If you need any other options please contact GRUB + development team. */ + } +@@ -288,14 +332,6 @@ grub_net_process_dhcp (struct grub_net_buff *nb, + } + } + +-static char +-hexdigit (grub_uint8_t val) +-{ +- if (val < 10) +- return val + '0'; +- return val + 'a' - 10; +-} +- + static grub_err_t + grub_cmd_dhcpopt (struct grub_command *cmd __attribute__ ((unused)), + int argc, char **args) +diff --git a/include/grub/net.h b/include/grub/net.h +index a799e6b..59e5975 100644 +--- a/include/grub/net.h ++++ b/include/grub/net.h +@@ -433,6 +433,8 @@ enum + GRUB_NET_BOOTP_DOMAIN = 0x0f, + GRUB_NET_BOOTP_ROOT_PATH = 0x11, + GRUB_NET_BOOTP_EXTENSIONS_PATH = 0x12, ++ GRUB_NET_BOOTP_CLIENT_ID = 0x3d, ++ GRUB_NET_BOOTP_CLIENT_UUID = 0x61, + GRUB_NET_BOOTP_END = 0xff + }; + +-- +1.8.5.3 + diff --git a/0072-Search-for-specific-config-file-for-netboot.patch b/0072-Search-for-specific-config-file-for-netboot.patch new file mode 100644 index 0000000..bb69943 --- /dev/null +++ b/0072-Search-for-specific-config-file-for-netboot.patch @@ -0,0 +1,203 @@ +From ff234fd6fe2cdc8514c16ee786d7b66bed123371 Mon Sep 17 00:00:00 2001 +From: Paulo Flabiano Smorigo +Date: Tue, 27 Nov 2012 17:22:07 -0200 +Subject: [PATCH 072/112] Search for specific config file for netboot + +This patch implements a search for a specific configuration when the config +file is on a remoteserver. It uses the following order: + 1) DHCP client UUID option. + 2) MAC address (in lower case hexadecimal with dash separators); + 3) IP (in upper case hexadecimal) or IPv6; + 4) The original grub.cfg file. + +This procedure is similar to what is used by pxelinux and yaboot: +http://www.syslinux.org/wiki/index.php/PXELINUX#config + +This should close the bugzilla: +https://bugzilla.redhat.com/show_bug.cgi?id=873406 +--- + grub-core/net/net.c | 118 ++++++++++++++++++++++++++++++++++++++++++++++++ + grub-core/normal/main.c | 18 ++++++-- + include/grub/net.h | 3 ++ + 3 files changed, 135 insertions(+), 4 deletions(-) + +diff --git a/grub-core/net/net.c b/grub-core/net/net.c +index f2e723b..578e057 100644 +--- a/grub-core/net/net.c ++++ b/grub-core/net/net.c +@@ -1702,6 +1702,124 @@ grub_net_restore_hw (void) + return GRUB_ERR_NONE; + } + ++grub_err_t ++grub_net_search_configfile (char *config) ++{ ++ grub_size_t config_len; ++ char *suffix; ++ ++ auto int search_through (grub_size_t num_tries, grub_size_t slice_size); ++ int search_through (grub_size_t num_tries, grub_size_t slice_size) ++ { ++ while (num_tries-- > 0) ++ { ++ grub_dprintf ("net", "probe %s\n", config); ++ ++ grub_file_t file; ++ file = grub_file_open (config); ++ ++ if (file) ++ { ++ grub_file_close (file); ++ grub_dprintf ("net", "found!\n"); ++ return 0; ++ } ++ else ++ { ++ if (grub_errno == GRUB_ERR_IO) ++ grub_errno = GRUB_ERR_NONE; ++ } ++ ++ if (grub_strlen (suffix) < slice_size) ++ break; ++ ++ config[grub_strlen (config) - slice_size] = '\0'; ++ } ++ ++ return 1; ++ } ++ ++ config_len = grub_strlen (config); ++ config[config_len] = '-'; ++ suffix = config + config_len + 1; ++ ++ struct grub_net_network_level_interface *inf; ++ FOR_NET_NETWORK_LEVEL_INTERFACES (inf) ++ { ++ /* By the Client UUID. */ ++ ++ char client_uuid_var[sizeof ("net_") + grub_strlen (inf->name) + ++ sizeof ("_clientuuid") + 1]; ++ grub_snprintf (client_uuid_var, sizeof (client_uuid_var), ++ "net_%s_clientuuid", inf->name); ++ ++ const char *client_uuid; ++ client_uuid = grub_env_get (client_uuid_var); ++ ++ if (client_uuid) ++ { ++ grub_strcpy (suffix, client_uuid); ++ if (search_through (1, 0) == 0) return GRUB_ERR_NONE; ++ } ++ ++ /* By the MAC address. */ ++ ++ /* Add ethernet type */ ++ grub_strcpy (suffix, "01-"); ++ ++ grub_net_hwaddr_to_str (&inf->hwaddress, suffix + 3); ++ ++ char *ptr; ++ for (ptr = suffix; *ptr; ptr++) ++ if (*ptr == ':') ++ *ptr = '-'; ++ ++ if (search_through (1, 0) == 0) return GRUB_ERR_NONE; ++ ++ /* By IP address */ ++ ++ switch ((&inf->address)->type) ++ { ++ case GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV4: ++ { ++ grub_uint32_t n = grub_be_to_cpu32 ((&inf->address)->ipv4); ++ grub_snprintf (suffix, GRUB_NET_MAX_STR_ADDR_LEN, "%02X%02X%02X%02X", \ ++ ((n >> 24) & 0xff), ((n >> 16) & 0xff), \ ++ ((n >> 8) & 0xff), ((n >> 0) & 0xff)); ++ ++ if (search_through (8, 1) == 0) return GRUB_ERR_NONE; ++ break; ++ } ++ case GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV6: ++ { ++ char buf[GRUB_NET_MAX_STR_ADDR_LEN]; ++ struct grub_net_network_level_address base; ++ base.type = GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV6; ++ grub_memcpy (&base.ipv6, ((&inf->address)->ipv6), 16); ++ grub_net_addr_to_str (&base, buf); ++ ++ for (ptr = buf; *ptr; ptr++) ++ if (*ptr == ':') ++ *ptr = '-'; ++ ++ grub_snprintf (suffix, GRUB_NET_MAX_STR_ADDR_LEN, "%s", buf); ++ if (search_through (1, 0) == 0) return GRUB_ERR_NONE; ++ break; ++ } ++ case GRUB_NET_NETWORK_LEVEL_PROTOCOL_DHCP_RECV: ++ return grub_error (GRUB_ERR_BUG, "shouldn't reach here"); ++ default: ++ return grub_error (GRUB_ERR_BUG, ++ "unsupported address type %d", (&inf->address)->type); ++ } ++ } ++ ++ /* Remove the remaining minus sign at the end. */ ++ config[config_len] = '\0'; ++ ++ return GRUB_ERR_NONE; ++} ++ + static struct grub_preboot *fini_hnd; + + static grub_command_t cmd_addaddr, cmd_deladdr, cmd_addroute, cmd_delroute; +diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c +index f72844c..85d2a28 100644 +--- a/grub-core/normal/main.c ++++ b/grub-core/normal/main.c +@@ -33,6 +33,7 @@ + #include + #include + #include ++#include + #ifdef GRUB_MACHINE_IEEE1275 + #include + #endif +@@ -365,10 +366,19 @@ grub_cmd_normal (struct grub_command *cmd __attribute__ ((unused)), + + prefix = grub_env_get ("prefix"); + if (prefix) +- { +- config = grub_xasprintf ("%s/grub.cfg", prefix); +- if (! config) +- goto quit; ++ { ++ grub_size_t config_len; ++ config_len = grub_strlen (prefix) + ++ sizeof ("/grub.cfg-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"); ++ config = grub_malloc (config_len); ++ ++ if (! config) ++ goto quit; ++ ++ grub_snprintf (config, config_len, "%s/grub.cfg", prefix); ++ ++ if (grub_strncmp (prefix + 1, "tftp", sizeof ("tftp") - 1) == 0) ++ grub_net_search_configfile (config); + + grub_enter_normal_mode (config); + grub_free (config); +diff --git a/include/grub/net.h b/include/grub/net.h +index 59e5975..88fc71c 100644 +--- a/include/grub/net.h ++++ b/include/grub/net.h +@@ -542,4 +542,7 @@ extern char *grub_net_default_server; + + #define VLANTAG_IDENTIFIER 0x8100 + ++grub_err_t ++grub_net_search_configfile (char *config); ++ + #endif /* ! GRUB_NET_HEADER */ +-- +1.8.5.3 + diff --git a/0073-blscfg-add-blscfg-module-to-parse-Boot-Loader-Specif.patch b/0073-blscfg-add-blscfg-module-to-parse-Boot-Loader-Specif.patch new file mode 100644 index 0000000..2510adb --- /dev/null +++ b/0073-blscfg-add-blscfg-module-to-parse-Boot-Loader-Specif.patch @@ -0,0 +1,251 @@ +From af6d85a2f3a57b142e1f746e132a5a786d3d7a2b Mon Sep 17 00:00:00 2001 +From: Fedora Ninjas +Date: Tue, 22 Jan 2013 06:31:38 +0100 +Subject: [PATCH 073/112] blscfg: add blscfg module to parse Boot Loader + Specification snippets + +http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec + +Works like this: + + insmod blscfg + bls_import + +Done! You should now have menu items for your snippets in place. + +Signed-off-by: Peter Jones +--- + grub-core/Makefile.core.def | 8 ++ + grub-core/commands/blscfg.c | 201 ++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 209 insertions(+) + create mode 100644 grub-core/commands/blscfg.c + +diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def +index ec46506..7bf1c8a 100644 +--- a/grub-core/Makefile.core.def ++++ b/grub-core/Makefile.core.def +@@ -747,6 +747,14 @@ module = { + }; + + module = { ++ name = blscfg; ++ common = commands/blscfg.c; ++ enable = i386_efi; ++ enable = x86_64_efi; ++ enable = i386_pc; ++}; ++ ++module = { + name = boot; + common = commands/boot.c; + i386_pc = lib/i386/pc/biosnum.c; +diff --git a/grub-core/commands/blscfg.c b/grub-core/commands/blscfg.c +new file mode 100644 +index 0000000..4274aca +--- /dev/null ++++ b/grub-core/commands/blscfg.c +@@ -0,0 +1,201 @@ ++/*-*- Mode: C; c-basic-offset: 2; indent-tabs-mode: t -*-*/ ++ ++/* bls.c - implementation of the boot loader spec */ ++ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * ++ * 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 . ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++GRUB_MOD_LICENSE ("GPLv3+"); ++ ++#ifdef GRUB_MACHINE_EFI ++#define GRUB_LINUX_CMD "linuxefi" ++#define GRUB_INITRD_CMD "initrdefi" ++#define GRUB_BLS_CONFIG_PATH "/EFI/fedora/loader/entries/" ++#define GRUB_BOOT_DEVICE "($boot)" ++#else ++#define GRUB_LINUX_CMD "linux" ++#define GRUB_INITRD_CMD "initrd" ++#define GRUB_BLS_CONFIG_PATH "/loader/entries/" ++#define GRUB_BOOT_DEVICE "($root)" ++#endif ++ ++static int parse_entry ( ++ const char *filename, ++ const struct grub_dirhook_info *info __attribute__ ((unused)), ++ void *data __attribute__ ((unused))) ++{ ++ grub_size_t n; ++ char *p; ++ grub_file_t f = NULL; ++ grub_off_t sz; ++ char *title = NULL, *options = NULL, *clinux = NULL, *initrd = NULL, *src = NULL; ++ const char *args[2] = { NULL, NULL }; ++ ++ if (filename[0] == '.') ++ return 0; ++ ++ n = grub_strlen (filename); ++ if (n <= 5) ++ return 0; ++ ++ if (grub_strcmp (filename + n - 5, ".conf") != 0) ++ return 0; ++ ++ p = grub_xasprintf (GRUB_BLS_CONFIG_PATH "%s", filename); ++ ++ f = grub_file_open (p); ++ if (!f) ++ goto finish; ++ ++ sz = grub_file_size (f); ++ if (sz == GRUB_FILE_SIZE_UNKNOWN || sz > 1024*1024) ++ goto finish; ++ ++ for (;;) ++ { ++ char *buf; ++ ++ buf = grub_file_getline (f); ++ if (!buf) ++ break; ++ ++ if (grub_strncmp (buf, "title ", 6) == 0) ++ { ++ grub_free (title); ++ title = grub_strdup (buf + 6); ++ if (!title) ++ goto finish; ++ } ++ else if (grub_strncmp (buf, "options ", 8) == 0) ++ { ++ grub_free (options); ++ options = grub_strdup (buf + 8); ++ if (!options) ++ goto finish; ++ } ++ else if (grub_strncmp (buf, "linux ", 6) == 0) ++ { ++ grub_free (clinux); ++ clinux = grub_strdup (buf + 6); ++ if (!clinux) ++ goto finish; ++ } ++ else if (grub_strncmp (buf, "initrd ", 7) == 0) ++ { ++ grub_free (initrd); ++ initrd = grub_strdup (buf + 7); ++ if (!initrd) ++ goto finish; ++ } ++ ++ grub_free(buf); ++ } ++ ++ if (!linux) ++ { ++ grub_printf ("Skipping file %s with no 'linux' key.", p); ++ goto finish; ++ } ++ ++ args[0] = title ? title : filename; ++ ++ src = grub_xasprintf ("load_video\n" ++ "set gfx_payload=keep\n" ++ "insmod gzio\n" ++ GRUB_LINUX_CMD " %s%s%s%s\n" ++ "%s%s%s%s", ++ GRUB_BOOT_DEVICE, clinux, options ? " " : "", options ? options : "", ++ initrd ? GRUB_INITRD_CMD " " : "", initrd ? GRUB_BOOT_DEVICE : "", initrd ? initrd : "", initrd ? "\n" : ""); ++ ++ grub_normal_add_menu_entry (1, args, NULL, NULL, "bls", NULL, NULL, src, 0); ++ ++finish: ++ grub_free (p); ++ grub_free (title); ++ grub_free (options); ++ grub_free (clinux); ++ grub_free (initrd); ++ grub_free (src); ++ ++ if (f) ++ grub_file_close (f); ++ ++ return 0; ++} ++ ++static grub_err_t ++grub_cmd_bls_import (grub_extcmd_context_t ctxt __attribute__ ((unused)), ++ int argc __attribute__ ((unused)), ++ char **args __attribute__ ((unused))) ++{ ++ grub_fs_t fs; ++ grub_device_t dev; ++ static grub_err_t r; ++ const char *devid; ++ ++ devid = grub_env_get ("root"); ++ if (!devid) ++ return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"), "root"); ++ ++ dev = grub_device_open (devid); ++ if (!dev) ++ return grub_errno; ++ ++ fs = grub_fs_probe (dev); ++ if (!fs) ++ { ++ r = grub_errno; ++ goto finish; ++ } ++ ++ r = fs->dir (dev, GRUB_BLS_CONFIG_PATH, parse_entry, NULL); ++ ++finish: ++ if (dev) ++ grub_device_close (dev); ++ ++ return r; ++} ++ ++static grub_extcmd_t cmd; ++ ++GRUB_MOD_INIT(bls) ++{ ++ cmd = grub_register_extcmd ("bls_import", ++ grub_cmd_bls_import, ++ 0, ++ NULL, ++ N_("Import Boot Loader Specification snippets."), ++ NULL); ++} ++ ++GRUB_MOD_FINI(bls) ++{ ++ grub_unregister_extcmd (cmd); ++} +-- +1.8.5.3 + diff --git a/0074-Move-bash-completion-script-922997.patch b/0074-Move-bash-completion-script-922997.patch new file mode 100644 index 0000000..cf1cb98 --- /dev/null +++ b/0074-Move-bash-completion-script-922997.patch @@ -0,0 +1,26 @@ +From b1a735a85211fb6485df569c68ccbff0d802f419 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Wed, 3 Apr 2013 14:35:34 -0400 +Subject: [PATCH 074/112] Move bash completion script (#922997) + +Apparently these go in a new place now. +--- + util/bash-completion.d/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/util/bash-completion.d/Makefile.am b/util/bash-completion.d/Makefile.am +index 136287c..0bcdb06 100644 +--- a/util/bash-completion.d/Makefile.am ++++ b/util/bash-completion.d/Makefile.am +@@ -6,7 +6,7 @@ EXTRA_DIST = $(bash_completion_source) + + CLEANFILES = $(bash_completion_script) config.log + +-bashcompletiondir = $(sysconfdir)/bash_completion.d ++bashcompletiondir = $(datarootdir)/bash-completion/completions + bashcompletion_DATA = $(bash_completion_script) + + $(bash_completion_script): $(bash_completion_source) $(top_builddir)/config.status +-- +1.8.5.3 + diff --git a/0075-for-ppc-reset-console-display-attr-when-clear-screen.patch b/0075-for-ppc-reset-console-display-attr-when-clear-screen.patch new file mode 100644 index 0000000..8d7c234 --- /dev/null +++ b/0075-for-ppc-reset-console-display-attr-when-clear-screen.patch @@ -0,0 +1,27 @@ +From 5e088d722e5429cfa240d892651a5e2b10a21ed8 Mon Sep 17 00:00:00 2001 +From: Paulo Flabiano Smorigo +Date: Wed, 24 Apr 2013 10:51:48 -0300 +Subject: [PATCH 075/112] for ppc, reset console display attr when clear screen + +This should fix this bugzilla: +https://bugzilla.redhat.com/show_bug.cgi?id=908519 +--- + grub-core/term/terminfo.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/term/terminfo.c b/grub-core/term/terminfo.c +index f0d3e3d..7cb7909 100644 +--- a/grub-core/term/terminfo.c ++++ b/grub-core/term/terminfo.c +@@ -151,7 +151,7 @@ grub_terminfo_set_current (struct grub_term_output *term, + /* Clear the screen. Using serial console, screen(1) only recognizes the + * ANSI escape sequence. Using video console, Apple Open Firmware + * (version 3.1.1) only recognizes the literal ^L. So use both. */ +- data->cls = grub_strdup (" \e[2J"); ++ data->cls = grub_strdup (" \e[2J\e[m"); + data->reverse_video_on = grub_strdup ("\e[7m"); + data->reverse_video_off = grub_strdup ("\e[m"); + if (grub_strcmp ("ieee1275", str) == 0) +-- +1.8.5.3 + diff --git a/0076-Don-t-write-messages-to-the-screen.patch b/0076-Don-t-write-messages-to-the-screen.patch new file mode 100644 index 0000000..ebfd733 --- /dev/null +++ b/0076-Don-t-write-messages-to-the-screen.patch @@ -0,0 +1,158 @@ +From c363af23257c228d2380b4ddcc10bcd9081ebae7 Mon Sep 17 00:00:00 2001 +From: William Jon McCann +Date: Wed, 15 May 2013 13:30:20 -0400 +Subject: [PATCH 076/112] Don't write messages to the screen + +Writing messages to the screen before the menus or boot splash +happens so quickly it looks like something is wrong and isn't +very appealing. +--- + grub-core/boot/i386/pc/boot.S | 3 --- + grub-core/boot/i386/pc/diskboot.S | 5 ----- + grub-core/gettext/gettext.c | 15 --------------- + grub-core/kern/main.c | 5 ----- + util/grub.d/10_linux.in | 7 ------- + 5 files changed, 35 deletions(-) + +diff --git a/grub-core/boot/i386/pc/boot.S b/grub-core/boot/i386/pc/boot.S +index b4975e2..432a472 100644 +--- a/grub-core/boot/i386/pc/boot.S ++++ b/grub-core/boot/i386/pc/boot.S +@@ -249,9 +249,6 @@ real_start: + /* save drive reference first thing! */ + pushw %dx + +- /* print a notification message on the screen */ +- MSG(notification_string) +- + /* set %si to the disk address packet */ + movw $disk_address_packet, %si + +diff --git a/grub-core/boot/i386/pc/diskboot.S b/grub-core/boot/i386/pc/diskboot.S +index d030a14..a494d02 100644 +--- a/grub-core/boot/i386/pc/diskboot.S ++++ b/grub-core/boot/i386/pc/diskboot.S +@@ -50,11 +50,6 @@ _start: + /* save drive reference first thing! */ + pushw %dx + +- /* print a notification message on the screen */ +- pushw %si +- MSG(notification_string) +- popw %si +- + /* this sets up for the first run through "bootloop" */ + movw $LOCAL(firstlist), %di + +diff --git a/grub-core/gettext/gettext.c b/grub-core/gettext/gettext.c +index 4880cef..1e5c21d 100644 +--- a/grub-core/gettext/gettext.c ++++ b/grub-core/gettext/gettext.c +@@ -437,13 +437,9 @@ grub_gettext_env_write_lang (struct grub_env_var *var + grub_err_t err; + err = grub_gettext_init_ext (&main_context, val, grub_env_get ("locale_dir"), + grub_env_get ("prefix")); +- if (err) +- grub_print_error (); + + err = grub_gettext_init_ext (&secondary_context, val, + grub_env_get ("secondary_locale_dir"), 0); +- if (err) +- grub_print_error (); + + return grub_strdup (val); + } +@@ -455,8 +451,6 @@ grub_gettext_reread_prefix (const char *val) + err = grub_gettext_init_ext (&main_context, grub_env_get ("lang"), + grub_env_get ("locale_dir"), + val); +- if (err) +- grub_print_error (); + } + + static char * +@@ -466,8 +460,6 @@ read_main (struct grub_env_var *var + grub_err_t err; + err = grub_gettext_init_ext (&main_context, grub_env_get ("lang"), val, + grub_env_get ("prefix")); +- if (err) +- grub_print_error (); + return grub_strdup (val); + } + +@@ -478,9 +470,6 @@ read_secondary (struct grub_env_var *var + grub_err_t err; + err = grub_gettext_init_ext (&secondary_context, grub_env_get ("lang"), val, + 0); +- if (err) +- grub_print_error (); +- + return grub_strdup (val); + } + +@@ -506,12 +495,8 @@ GRUB_MOD_INIT (gettext) + + err = grub_gettext_init_ext (&main_context, lang, grub_env_get ("locale_dir"), + grub_env_get ("prefix")); +- if (err) +- grub_print_error (); + err = grub_gettext_init_ext (&secondary_context, lang, + grub_env_get ("secondary_locale_dir"), 0); +- if (err) +- grub_print_error (); + + grub_register_variable_hook ("locale_dir", NULL, read_main); + grub_register_variable_hook ("secondary_locale_dir", NULL, read_secondary); +diff --git a/grub-core/kern/main.c b/grub-core/kern/main.c +index 8ab7794..da47b18 100644 +--- a/grub-core/kern/main.c ++++ b/grub-core/kern/main.c +@@ -268,11 +268,6 @@ grub_main (void) + + grub_boot_time ("After machine init."); + +- /* Hello. */ +- grub_setcolorstate (GRUB_TERM_COLOR_HIGHLIGHT); +- grub_printf ("Welcome to GRUB!\n\n"); +- grub_setcolorstate (GRUB_TERM_COLOR_STANDARD); +- + grub_load_config (); + + grub_boot_time ("Before loading embedded modules."); +diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in +index ad34cc0..e762e1f 100644 +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -126,29 +126,22 @@ linux_entry () + fi + printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/" + fi +- message="$(gettext_printf "Loading Linux %s ..." ${version})" + if [ -d /sys/firmware/efi ]; then + sed "s/^/$submenu_indentation/" << EOF +- echo '$(echo "$message" | grub_quote)' + linuxefi ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} + EOF + else + sed "s/^/$submenu_indentation/" << EOF +- echo '$(echo "$message" | grub_quote)' + linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} + EOF + fi + if test -n "${initrd}" ; then +- # TRANSLATORS: ramdisk isn't identifier. Should be translated. +- message="$(gettext_printf "Loading initial ramdisk ...")" + if [ -d /sys/firmware/efi ]; then + sed "s/^/$submenu_indentation/" << EOF +- echo '$(echo "$message" | grub_quote)' + initrdefi ${rel_dirname}/${initrd} + EOF + else + sed "s/^/$submenu_indentation/" << EOF +- echo '$message' + initrd ${rel_dirname}/${initrd} + EOF + fi +-- +1.8.5.3 + diff --git a/0077-Don-t-print-GNU-GRUB-header.patch b/0077-Don-t-print-GNU-GRUB-header.patch new file mode 100644 index 0000000..3615d58 --- /dev/null +++ b/0077-Don-t-print-GNU-GRUB-header.patch @@ -0,0 +1,33 @@ +From 13d4be835d61ce8deba306472ad26a8fe04fce79 Mon Sep 17 00:00:00 2001 +From: William Jon McCann +Date: Wed, 15 May 2013 13:53:48 -0400 +Subject: [PATCH 077/112] Don't print GNU GRUB header + +No one cares. +--- + grub-core/normal/main.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c +index 85d2a28..3777cd2 100644 +--- a/grub-core/normal/main.c ++++ b/grub-core/normal/main.c +@@ -212,6 +212,7 @@ grub_normal_init_page (struct grub_term_output *term, + + grub_term_cls (term); + ++#if 0 + msg_formatted = grub_xasprintf (_("GNU GRUB version %s"), PACKAGE_VERSION); + if (!msg_formatted) + return; +@@ -235,6 +236,7 @@ grub_normal_init_page (struct grub_term_output *term, + grub_putcode ('\n', term); + grub_putcode ('\n', term); + grub_free (unicode_msg); ++#endif + } + + static void +-- +1.8.5.3 + diff --git a/0078-Don-t-add-to-highlighted-row.patch b/0078-Don-t-add-to-highlighted-row.patch new file mode 100644 index 0000000..1242ff5 --- /dev/null +++ b/0078-Don-t-add-to-highlighted-row.patch @@ -0,0 +1,26 @@ +From 01cd2e5801596931a09a3c4b6759915f7b04c08a Mon Sep 17 00:00:00 2001 +From: William Jon McCann +Date: Wed, 15 May 2013 17:49:45 -0400 +Subject: [PATCH 078/112] Don't add '*' to highlighted row + +It is already highlighted. +--- + grub-core/normal/menu_text.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c +index 2ff2941..daf92b5 100644 +--- a/grub-core/normal/menu_text.c ++++ b/grub-core/normal/menu_text.c +@@ -242,7 +242,7 @@ print_entry (int y, int highlight, grub_menu_entry_t entry, + unicode_title[i] = ' '; + + if (data->geo.num_entries > 1) +- grub_putcode (highlight ? '*' : ' ', data->term); ++ grub_putcode (' ', term); + + grub_print_ucs4_menu (unicode_title, + unicode_title + len, +-- +1.8.5.3 + diff --git a/0079-Don-t-add-to-highlighted-row.patch b/0079-Don-t-add-to-highlighted-row.patch new file mode 100644 index 0000000..3221af7 --- /dev/null +++ b/0079-Don-t-add-to-highlighted-row.patch @@ -0,0 +1,26 @@ +From ad87f63c1936729ae09871cfed7a5900cdabe626 Mon Sep 17 00:00:00 2001 +From: William Jon McCann +Date: Wed, 15 May 2013 17:49:45 -0400 +Subject: [PATCH 079/112] Don't add '*' to highlighted row + +It is already highlighted. +--- + grub-core/normal/menu_text.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c +index daf92b5..2f84fcc 100644 +--- a/grub-core/normal/menu_text.c ++++ b/grub-core/normal/menu_text.c +@@ -242,7 +242,7 @@ print_entry (int y, int highlight, grub_menu_entry_t entry, + unicode_title[i] = ' '; + + if (data->geo.num_entries > 1) +- grub_putcode (' ', term); ++ grub_putcode (' ', data->term); + + grub_print_ucs4_menu (unicode_title, + unicode_title + len, +-- +1.8.5.3 + diff --git a/0080-Message-string-cleanups.patch b/0080-Message-string-cleanups.patch new file mode 100644 index 0000000..ab0be39 --- /dev/null +++ b/0080-Message-string-cleanups.patch @@ -0,0 +1,71 @@ +From a235208d5de23499f7d6e801116fceea170ccd08 Mon Sep 17 00:00:00 2001 +From: William Jon McCann +Date: Fri, 7 Jun 2013 11:09:04 -0400 +Subject: [PATCH 080/112] Message string cleanups + +Make use of terminology consistent. Remove jargon. +--- + grub-core/normal/menu_text.c | 21 +++++++++------------ + 1 file changed, 9 insertions(+), 12 deletions(-) + +diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c +index 2f84fcc..9d20c6b 100644 +--- a/grub-core/normal/menu_text.c ++++ b/grub-core/normal/menu_text.c +@@ -157,9 +157,8 @@ print_message (int nested, int edit, struct grub_term_output *term, int dry_run) + + if (edit) + { +- ret += grub_print_message_indented_real (_("Minimum Emacs-like screen editing is \ +-supported. TAB lists completions. Press Ctrl-x or F10 to boot, Ctrl-c or F2 for a \ +-command-line or ESC to discard edits and return to the GRUB menu."), ++ ret += grub_print_message_indented_real (_("Press Ctrl-x or F10 to start, Ctrl-c or F2 for a \ ++command prompt or Escape to discard edits and return to the menu. Pressing Tab lists possible completions."), + STANDARD_MARGIN, STANDARD_MARGIN, + term, dry_run); + } +@@ -167,8 +166,8 @@ command-line or ESC to discard edits and return to the GRUB menu."), + { + char *msg_translated; + +- msg_translated = grub_xasprintf (_("Use the %C and %C keys to select which " +- "entry is highlighted."), ++ msg_translated = grub_xasprintf (_("Use the %C and %C keys to change the " ++ "selection."), + GRUB_UNICODE_UPARROW, + GRUB_UNICODE_DOWNARROW); + if (!msg_translated) +@@ -181,17 +180,15 @@ command-line or ESC to discard edits and return to the GRUB menu."), + if (nested) + { + ret += grub_print_message_indented_real +- (_("Press enter to boot the selected OS, " +- "`e' to edit the commands before booting " +- "or `c' for a command-line. ESC to return previous menu."), ++ (_("Press 'e' to edit the selected item, " ++ "or 'c' for a command prompt. Press Escape to return to the previous menu."), + STANDARD_MARGIN, STANDARD_MARGIN, term, dry_run); + } + else + { + ret += grub_print_message_indented_real +- (_("Press enter to boot the selected OS, " +- "`e' to edit the commands before booting " +- "or `c' for a command-line."), ++ (_("Press 'e' to edit the selected item, " ++ "or 'c' for a command prompt."), + STANDARD_MARGIN, STANDARD_MARGIN, term, dry_run); + } + } +@@ -440,7 +437,7 @@ menu_text_print_timeout (int timeout, void *dataptr) + || data->timeout_msg == TIMEOUT_TERSE_NO_MARGIN) + msg_translated = grub_xasprintf (_("%ds"), timeout); + else +- msg_translated = grub_xasprintf (_("The highlighted entry will be executed automatically in %ds."), timeout); ++ msg_translated = grub_xasprintf (_("The selected entry will be started automatically in %ds."), timeout); + if (!msg_translated) + { + grub_print_error (); +-- +1.8.5.3 + diff --git a/0081-Fix-border-spacing-now-that-we-aren-t-displaying-it.patch b/0081-Fix-border-spacing-now-that-we-aren-t-displaying-it.patch new file mode 100644 index 0000000..843f12f --- /dev/null +++ b/0081-Fix-border-spacing-now-that-we-aren-t-displaying-it.patch @@ -0,0 +1,32 @@ +From 8f07fb007025c69cb13fa0a9f3c74c89bd85e75a Mon Sep 17 00:00:00 2001 +From: William Jon McCann +Date: Fri, 7 Jun 2013 14:08:23 -0400 +Subject: [PATCH 081/112] Fix border spacing now that we aren't displaying it + +--- + grub-core/normal/menu_text.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c +index 9d20c6b..aa3454f 100644 +--- a/grub-core/normal/menu_text.c ++++ b/grub-core/normal/menu_text.c +@@ -331,12 +331,12 @@ grub_menu_init_page (int nested, int edit, + int empty_lines = 1; + int version_msg = 1; + +- geo->border = 1; +- geo->first_entry_x = 1 /* margin */ + 1 /* border */; ++ geo->border = 0; ++ geo->first_entry_x = 0 /* margin */ + 0 /* border */; + geo->entry_width = grub_term_width (term) - 5; + + geo->first_entry_y = 2 /* two empty lines*/ +- + 1 /* GNU GRUB version text */ + 1 /* top border */; ++ + 0 /* GNU GRUB version text */ + 1 /* top border */; + + geo->timeout_lines = 2; + +-- +1.8.5.3 + diff --git a/0082-Use-the-correct-indentation-for-the-term-help-text.patch b/0082-Use-the-correct-indentation-for-the-term-help-text.patch new file mode 100644 index 0000000..f417716 --- /dev/null +++ b/0082-Use-the-correct-indentation-for-the-term-help-text.patch @@ -0,0 +1,28 @@ +From 1ec2c6847fcf55a2fce2f1fdef5d3f5b3e0d55d2 Mon Sep 17 00:00:00 2001 +From: William Jon McCann +Date: Fri, 7 Jun 2013 14:08:49 -0400 +Subject: [PATCH 082/112] Use the correct indentation for the term help text + +That is consistent with the menu help text +--- + grub-core/normal/main.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c +index 3777cd2..0da2a52 100644 +--- a/grub-core/normal/main.c ++++ b/grub-core/normal/main.c +@@ -426,8 +426,8 @@ grub_normal_reader_init (int nested) + grub_normal_init_page (term, 1); + grub_term_setcursor (term, 1); + +- if (grub_term_width (term) > 3 + STANDARD_MARGIN + 20) +- grub_print_message_indented (msg_formatted, 3, STANDARD_MARGIN, term); ++ if (grub_term_width (term) > 2 * STANDARD_MARGIN + 20) ++ grub_print_message_indented (msg_formatted, STANDARD_MARGIN, STANDARD_MARGIN, term); + else + grub_print_message_indented (msg_formatted, 0, 0, term); + grub_putcode ('\n', term); +-- +1.8.5.3 + diff --git a/0083-Indent-menu-entries.patch b/0083-Indent-menu-entries.patch new file mode 100644 index 0000000..0c9cf1e --- /dev/null +++ b/0083-Indent-menu-entries.patch @@ -0,0 +1,26 @@ +From ed8061445a585b697a74946d9b6e7d3dcd611824 Mon Sep 17 00:00:00 2001 +From: William Jon McCann +Date: Fri, 7 Jun 2013 14:30:55 -0400 +Subject: [PATCH 083/112] Indent menu entries + +--- + grub-core/normal/menu_text.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c +index aa3454f..01b6f1c 100644 +--- a/grub-core/normal/menu_text.c ++++ b/grub-core/normal/menu_text.c +@@ -239,7 +239,8 @@ print_entry (int y, int highlight, grub_menu_entry_t entry, + unicode_title[i] = ' '; + + if (data->geo.num_entries > 1) +- grub_putcode (' ', data->term); ++ for (i = 0; i < STANDARD_MARGIN; i++) ++ grub_putcode (' ', data->term); + + grub_print_ucs4_menu (unicode_title, + unicode_title + len, +-- +1.8.5.3 + diff --git a/0084-Fix-margins.patch b/0084-Fix-margins.patch new file mode 100644 index 0000000..567de5c --- /dev/null +++ b/0084-Fix-margins.patch @@ -0,0 +1,37 @@ +From 0bbd90ced7f33ffd5d8de3c552a2bd4c513f5024 Mon Sep 17 00:00:00 2001 +From: William Jon McCann +Date: Fri, 7 Jun 2013 14:59:36 -0400 +Subject: [PATCH 084/112] Fix margins + +--- + grub-core/normal/menu_text.c | 8 +++----- + 1 file changed, 3 insertions(+), 5 deletions(-) + +diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c +index 01b6f1c..ead3391 100644 +--- a/grub-core/normal/menu_text.c ++++ b/grub-core/normal/menu_text.c +@@ -333,17 +333,15 @@ grub_menu_init_page (int nested, int edit, + int version_msg = 1; + + geo->border = 0; +- geo->first_entry_x = 0 /* margin */ + 0 /* border */; +- geo->entry_width = grub_term_width (term) - 5; ++ geo->first_entry_x = 0; /* no margin */ ++ geo->entry_width = grub_term_width (term) - 1; + +- geo->first_entry_y = 2 /* two empty lines*/ +- + 0 /* GNU GRUB version text */ + 1 /* top border */; ++ geo->first_entry_y = 3; /* three empty lines*/ + + geo->timeout_lines = 2; + + /* 3 lines for timeout message and bottom margin. 2 lines for the border. */ + geo->num_entries = grub_term_height (term) - geo->first_entry_y +- - 1 /* bottom border */ + - 1 /* empty line before info message*/ + - geo->timeout_lines /* timeout */ + - 1 /* empty final line */; +-- +1.8.5.3 + diff --git a/0085-Add-support-for-UEFI-operating-systems-returned-by-o.patch b/0085-Add-support-for-UEFI-operating-systems-returned-by-o.patch new file mode 100644 index 0000000..6b336f2 --- /dev/null +++ b/0085-Add-support-for-UEFI-operating-systems-returned-by-o.patch @@ -0,0 +1,51 @@ +From 04f3190eefe364984e6f46cb22e1852baf6a2b52 Mon Sep 17 00:00:00 2001 +From: Matthew Garrett +Date: Wed, 12 Jun 2013 11:51:49 -0400 +Subject: [PATCH 085/112] Add support for UEFI operating systems returned by + os-prober + +os-prober returns UEFI operating systems in the form: + +path:long-name:name + +where path is the path under the EFI directory on the ESP. This is in +contrast to legacy OSes, where path is the device string. Handle this case. +--- + util/grub.d/30_os-prober.in | 22 ++++++++++++++++++---- + 1 file changed, 18 insertions(+), 4 deletions(-) + +diff --git a/util/grub.d/30_os-prober.in b/util/grub.d/30_os-prober.in +index 7cf8487..390bb0e 100644 +--- a/util/grub.d/30_os-prober.in ++++ b/util/grub.d/30_os-prober.in +@@ -319,9 +319,23 @@ EOF + EOF + ;; + *) +- echo -n " " +- # TRANSLATORS: %s is replaced by OS name. +- gettext_printf "%s is not yet supported by grub-mkconfig.\n" "${LONGNAME}" >&2 +- ;; ++ case ${DEVICE} in ++ *.efi) ++ cat << EOF ++menuentry '$(echo "${LONGNAME}" | grub_quote)' { ++EOF ++ save_default_entry | grub_add_tab ++ cat << EOF ++ chainloader /EFI/${DEVICE} ++ boot ++} ++EOF ++ ;; ++ *) ++ echo -n " " ++ # TRANSLATORS: %s is replaced by OS name. ++ gettext_printf "%s is not yet supported by grub-mkconfig.\n" "${LONGNAME}" >&2 ++ ;; ++ esac + esac + done +-- +1.8.5.3 + diff --git a/0086-Disable-GRUB-video-support-for-IBM-power-machines.patch b/0086-Disable-GRUB-video-support-for-IBM-power-machines.patch new file mode 100644 index 0000000..b41bd7f --- /dev/null +++ b/0086-Disable-GRUB-video-support-for-IBM-power-machines.patch @@ -0,0 +1,65 @@ +From 177a0a8aa023838195f34802125707428042a159 Mon Sep 17 00:00:00 2001 +From: Paulo Flabiano Smorigo +Date: Tue, 11 Jun 2013 15:14:05 -0300 +Subject: [PATCH 086/112] Disable GRUB video support for IBM power machines + +Should fix the problem in bugzilla: +https://bugzilla.redhat.com/show_bug.cgi?id=973205 +--- + grub-core/kern/ieee1275/cmain.c | 5 ++++- + grub-core/video/ieee1275.c | 9 ++++++--- + include/grub/ieee1275/ieee1275.h | 2 ++ + 3 files changed, 12 insertions(+), 4 deletions(-) + +diff --git a/grub-core/kern/ieee1275/cmain.c b/grub-core/kern/ieee1275/cmain.c +index d92ae14..409c922 100644 +--- a/grub-core/kern/ieee1275/cmain.c ++++ b/grub-core/kern/ieee1275/cmain.c +@@ -88,7 +88,10 @@ grub_ieee1275_find_options (void) + is_qemu = 1; + + if (rc >= 0 && grub_strncmp (tmp, "IBM", 3) == 0) +- grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_NO_TREE_SCANNING_FOR_DISKS); ++ { ++ grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_NO_TREE_SCANNING_FOR_DISKS); ++ grub_ieee1275_set_flag (GRUB_IEEE1275_FLAG_DISABLE_VIDEO_SUPPORT); ++ } + + /* Old Macs have no key repeat, newer ones have fully working one. + The ones inbetween when repeated key generates an escaoe sequence +diff --git a/grub-core/video/ieee1275.c b/grub-core/video/ieee1275.c +index 0b150ec..813ab38 100644 +--- a/grub-core/video/ieee1275.c ++++ b/grub-core/video/ieee1275.c +@@ -351,9 +351,12 @@ static struct grub_video_adapter grub_video_ieee1275_adapter = + + GRUB_MOD_INIT(ieee1275_fb) + { +- find_display (); +- if (display) +- grub_video_register (&grub_video_ieee1275_adapter); ++ if (! grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_DISABLE_VIDEO_SUPPORT)) ++ { ++ find_display (); ++ if (display) ++ grub_video_register (&grub_video_ieee1275_adapter); ++ } + } + + GRUB_MOD_FINI(ieee1275_fb) +diff --git a/include/grub/ieee1275/ieee1275.h b/include/grub/ieee1275/ieee1275.h +index 6a21f5d..663935d 100644 +--- a/include/grub/ieee1275/ieee1275.h ++++ b/include/grub/ieee1275/ieee1275.h +@@ -146,6 +146,8 @@ enum grub_ieee1275_flag + GRUB_IEEE1275_FLAG_BROKEN_REPEAT, + + GRUB_IEEE1275_FLAG_CURSORONOFF_ANSI_BROKEN, ++ ++ GRUB_IEEE1275_FLAG_DISABLE_VIDEO_SUPPORT + }; + + extern int EXPORT_FUNC(grub_ieee1275_test_flag) (enum grub_ieee1275_flag flag); +-- +1.8.5.3 + diff --git a/0087-Use-2-instead-of-1-for-our-right-hand-margin-so-line.patch b/0087-Use-2-instead-of-1-for-our-right-hand-margin-so-line.patch new file mode 100644 index 0000000..a97a324 --- /dev/null +++ b/0087-Use-2-instead-of-1-for-our-right-hand-margin-so-line.patch @@ -0,0 +1,27 @@ +From 5155dc7742218bf40ec1c28430af4a8758dc101e Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Fri, 21 Jun 2013 14:44:08 -0400 +Subject: [PATCH 087/112] Use -2 instead of -1 for our right-hand margin, so + linewrapping works (#976643). + +Signed-off-by: Peter Jones +--- + grub-core/normal/menu_text.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c +index ead3391..bc1fc71 100644 +--- a/grub-core/normal/menu_text.c ++++ b/grub-core/normal/menu_text.c +@@ -334,7 +334,7 @@ grub_menu_init_page (int nested, int edit, + + geo->border = 0; + geo->first_entry_x = 0; /* no margin */ +- geo->entry_width = grub_term_width (term) - 1; ++ geo->entry_width = grub_term_width (term) - 2; + + geo->first_entry_y = 3; /* three empty lines*/ + +-- +1.8.5.3 + diff --git a/0088-Use-linux16-when-appropriate-880840.patch b/0088-Use-linux16-when-appropriate-880840.patch new file mode 100644 index 0000000..9f25948 --- /dev/null +++ b/0088-Use-linux16-when-appropriate-880840.patch @@ -0,0 +1,52 @@ +From 30e29a3cad6153c188d809bdf5f939bbaf5f0941 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 28 Oct 2013 10:05:07 -0400 +Subject: [PATCH 088/112] Use linux16 when appropriate (#880840) + +The kernel group really would prefer that we use the 16 bit entry point +on x86 bios machines. + +Resolves: rhbz#880840 + +Signed-off-by: Peter Jones +--- + util/grub.d/10_linux.in | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in +index e762e1f..600bfd2 100644 +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -74,6 +74,11 @@ linux_entry () + type="$3" + args="$4" + ++ sixteenbit="" ++ case "$machine" in ++ i?86|x86_64) sixteenbit="16" ;; ++ esac ++ + if [ -z "$boot_device_id" ]; then + boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")" + fi +@@ -132,7 +137,7 @@ linux_entry () + EOF + else + sed "s/^/$submenu_indentation/" << EOF +- linux ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} ++ linux${sixteenbit} ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} + EOF + fi + if test -n "${initrd}" ; then +@@ -142,7 +147,7 @@ EOF + EOF + else + sed "s/^/$submenu_indentation/" << EOF +- initrd ${rel_dirname}/${initrd} ++ initrd${sixteenbit} ${rel_dirname}/${initrd} + EOF + fi + fi +-- +1.8.5.3 + diff --git a/0089-Enable-pager-by-default.-985860.patch b/0089-Enable-pager-by-default.-985860.patch new file mode 100644 index 0000000..caeb0ad --- /dev/null +++ b/0089-Enable-pager-by-default.-985860.patch @@ -0,0 +1,26 @@ +From 0fde3057b8c44516559de63a36fd0d4243988c13 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 28 Oct 2013 10:09:27 -0400 +Subject: [PATCH 089/112] Enable pager by default. (#985860) + +Signed-off-by: Peter Jones +--- + util/grub.d/00_header.in | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in +index ce2ec81..fefa7dd 100644 +--- a/util/grub.d/00_header.in ++++ b/util/grub.d/00_header.in +@@ -43,6 +43,8 @@ if [ "x${GRUB_DEFAULT_BUTTON}" = "xsaved" ] ; then GRUB_DEFAULT_BUTTON='${saved_ + if [ "x${GRUB_TIMEOUT_BUTTON}" = "x" ] ; then GRUB_TIMEOUT_BUTTON="$GRUB_TIMEOUT" ; fi + + cat << EOF ++set pager=1 ++ + if [ -s \$prefix/grubenv ]; then + load_env + fi +-- +1.8.5.3 + diff --git a/0090-F10-doesn-t-work-on-serial-so-don-t-tell-the-user-to.patch b/0090-F10-doesn-t-work-on-serial-so-don-t-tell-the-user-to.patch new file mode 100644 index 0000000..38470ed --- /dev/null +++ b/0090-F10-doesn-t-work-on-serial-so-don-t-tell-the-user-to.patch @@ -0,0 +1,27 @@ +From f6a7dbcc10c5d5268a0a72af27dc5bbcd2badec7 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 28 Oct 2013 10:13:27 -0400 +Subject: [PATCH 090/112] F10 doesn't work on serial, so don't tell the user to + hit it (#987443) + +Signed-off-by: Peter Jones +--- + grub-core/normal/menu_text.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c +index bc1fc71..6202c2a 100644 +--- a/grub-core/normal/menu_text.c ++++ b/grub-core/normal/menu_text.c +@@ -157,7 +157,7 @@ print_message (int nested, int edit, struct grub_term_output *term, int dry_run) + + if (edit) + { +- ret += grub_print_message_indented_real (_("Press Ctrl-x or F10 to start, Ctrl-c or F2 for a \ ++ ret += grub_print_message_indented_real (_("Press Ctrl-x to start, Ctrl-c for a \ + command prompt or Escape to discard edits and return to the menu. Pressing Tab lists possible completions."), + STANDARD_MARGIN, STANDARD_MARGIN, + term, dry_run); +-- +1.8.5.3 + diff --git a/0091-Don-t-say-GNU-Linux-in-generated-menus.patch b/0091-Don-t-say-GNU-Linux-in-generated-menus.patch new file mode 100644 index 0000000..3088c6d --- /dev/null +++ b/0091-Don-t-say-GNU-Linux-in-generated-menus.patch @@ -0,0 +1,45 @@ +From b2a9d95e5e1ecaf5eb2814c6f35c26f432c4c810 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 14 Mar 2011 14:27:42 -0400 +Subject: [PATCH 091/112] Don't say "GNU/Linux" in generated menus. + +--- + util/grub.d/10_linux.in | 4 ++-- + util/grub.d/20_linux_xen.in | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in +index 600bfd2..c943a1e 100644 +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -29,9 +29,9 @@ export TEXTDOMAINDIR="@localedir@" + CLASS="--class gnu-linux --class gnu --class os" + + if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then +- OS=GNU/Linux ++ OS="$(sed 's, release .*$,,g' /etc/system-release)" + else +- OS="${GRUB_DISTRIBUTOR} GNU/Linux" ++ OS="${GRUB_DISTRIBUTOR}" + CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}" + fi + +diff --git a/util/grub.d/20_linux_xen.in b/util/grub.d/20_linux_xen.in +index a608435..79d4e38 100644 +--- a/util/grub.d/20_linux_xen.in ++++ b/util/grub.d/20_linux_xen.in +@@ -29,9 +29,9 @@ export TEXTDOMAINDIR="@localedir@" + CLASS="--class gnu-linux --class gnu --class os --class xen" + + if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then +- OS=GNU/Linux ++ OS="$(sed 's, release .*$,,g' /etc/system-release)" + else +- OS="${GRUB_DISTRIBUTOR} GNU/Linux" ++ OS="${GRUB_DISTRIBUTOR}" + CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}" + fi + +-- +1.8.5.3 + diff --git a/0092-Don-t-draw-a-border-around-the-menu.patch b/0092-Don-t-draw-a-border-around-the-menu.patch new file mode 100644 index 0000000..a46661d --- /dev/null +++ b/0092-Don-t-draw-a-border-around-the-menu.patch @@ -0,0 +1,74 @@ +From 66fe0163ad12914729e064ec92364a1f0fb6a016 Mon Sep 17 00:00:00 2001 +From: William Jon McCann +Date: Wed, 15 May 2013 16:47:33 -0400 +Subject: [PATCH 092/112] Don't draw a border around the menu + +It looks cleaner without it. +--- + grub-core/normal/menu_text.c | 43 ------------------------------------------- + 1 file changed, 43 deletions(-) + +diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c +index 6202c2a..beddd7f 100644 +--- a/grub-core/normal/menu_text.c ++++ b/grub-core/normal/menu_text.c +@@ -108,47 +108,6 @@ grub_print_message_indented (const char *msg, int margin_left, int margin_right, + grub_print_message_indented_real (msg, margin_left, margin_right, term, 0); + } + +-static void +-draw_border (struct grub_term_output *term, const struct grub_term_screen_geometry *geo) +-{ +- int i; +- +- grub_term_setcolorstate (term, GRUB_TERM_COLOR_NORMAL); +- +- grub_term_gotoxy (term, (struct grub_term_coordinate) { geo->first_entry_x - 1, +- geo->first_entry_y - 1 }); +- grub_putcode (GRUB_UNICODE_CORNER_UL, term); +- for (i = 0; i < geo->entry_width + 1; i++) +- grub_putcode (GRUB_UNICODE_HLINE, term); +- grub_putcode (GRUB_UNICODE_CORNER_UR, term); +- +- for (i = 0; i < geo->num_entries; i++) +- { +- grub_term_gotoxy (term, (struct grub_term_coordinate) { geo->first_entry_x - 1, +- geo->first_entry_y + i }); +- grub_putcode (GRUB_UNICODE_VLINE, term); +- grub_term_gotoxy (term, +- (struct grub_term_coordinate) { geo->first_entry_x + geo->entry_width + 1, +- geo->first_entry_y + i }); +- grub_putcode (GRUB_UNICODE_VLINE, term); +- } +- +- grub_term_gotoxy (term, +- (struct grub_term_coordinate) { geo->first_entry_x - 1, +- geo->first_entry_y - 1 + geo->num_entries + 1 }); +- grub_putcode (GRUB_UNICODE_CORNER_LL, term); +- for (i = 0; i < geo->entry_width + 1; i++) +- grub_putcode (GRUB_UNICODE_HLINE, term); +- grub_putcode (GRUB_UNICODE_CORNER_LR, term); +- +- grub_term_setcolorstate (term, GRUB_TERM_COLOR_NORMAL); +- +- grub_term_gotoxy (term, +- (struct grub_term_coordinate) { geo->first_entry_x - 1, +- (geo->first_entry_y - 1 + geo->num_entries +- + GRUB_TERM_MARGIN + 1) }); +-} +- + static int + print_message (int nested, int edit, struct grub_term_output *term, int dry_run) + { +@@ -403,8 +362,6 @@ grub_menu_init_page (int nested, int edit, + + grub_term_normal_color = grub_color_menu_normal; + grub_term_highlight_color = grub_color_menu_highlight; +- if (geo->border) +- draw_border (term, geo); + grub_term_normal_color = old_color_normal; + grub_term_highlight_color = old_color_highlight; + geo->timeout_y = geo->first_entry_y + geo->num_entries +-- +1.8.5.3 + diff --git a/0093-Use-the-standard-margin-for-the-timeout-string.patch b/0093-Use-the-standard-margin-for-the-timeout-string.patch new file mode 100644 index 0000000..1f1d71b --- /dev/null +++ b/0093-Use-the-standard-margin-for-the-timeout-string.patch @@ -0,0 +1,43 @@ +From 2941e05b1a087aa449373086d3d5518bb2d5fa9a Mon Sep 17 00:00:00 2001 +From: William Jon McCann +Date: Fri, 7 Jun 2013 10:52:32 -0400 +Subject: [PATCH 093/112] Use the standard margin for the timeout string + +So that it aligns with the other messages +--- + grub-core/normal/menu_text.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c +index beddd7f..33b208b 100644 +--- a/grub-core/normal/menu_text.c ++++ b/grub-core/normal/menu_text.c +@@ -369,7 +369,7 @@ grub_menu_init_page (int nested, int edit, + if (bottom_message) + { + grub_term_gotoxy (term, +- (struct grub_term_coordinate) { GRUB_TERM_MARGIN, ++ (struct grub_term_coordinate) { STANDARD_MARGIN, + geo->timeout_y }); + + print_message (nested, edit, term, 0); +@@ -404,14 +404,14 @@ menu_text_print_timeout (int timeout, void *dataptr) + if (data->timeout_msg == TIMEOUT_UNKNOWN) + { + data->timeout_msg = grub_print_message_indented_real (msg_translated, +- 3, 1, data->term, 1) ++ STANDARD_MARGIN, 1, data->term, 1) + <= data->geo.timeout_lines ? TIMEOUT_NORMAL : TIMEOUT_TERSE; + if (data->timeout_msg == TIMEOUT_TERSE) + { + grub_free (msg_translated); + msg_translated = grub_xasprintf (_("%ds"), timeout); + if (grub_term_width (data->term) < 10) +- data->timeout_msg = TIMEOUT_TERSE_NO_MARGIN; ++ data->timeout_msg = STANDARD_MARGIN; + } + } + +-- +1.8.5.3 + diff --git a/0094-Fix-grub_script_execute_sourcecode-usage-on-ppc.patch b/0094-Fix-grub_script_execute_sourcecode-usage-on-ppc.patch new file mode 100644 index 0000000..1bbca86 --- /dev/null +++ b/0094-Fix-grub_script_execute_sourcecode-usage-on-ppc.patch @@ -0,0 +1,29 @@ +From 236f9489de02fc6d1c64cc428d78b55b269ec7c2 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Fri, 10 Jan 2014 09:36:24 -0500 +Subject: [PATCH 094/112] Fix grub_script_execute_sourcecode() usage on ppc. + +593e430c made it not take the extra argc/argv that this code still +passes it. + +Signed-off-by: Peter Jones +--- + grub-core/normal/main.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c +index 0da2a52..f66c03c 100644 +--- a/grub-core/normal/main.c ++++ b/grub-core/normal/main.c +@@ -289,7 +289,7 @@ grub_normal_execute (const char *config, int nested, int batch) + if (! grub_ieee1275_cas_reboot (script)) + { + char *dummy[1] = { NULL }; +- if (! grub_script_execute_sourcecode (script, 0, dummy)) ++ if (! grub_script_execute_sourcecode (script)) + boot = 1; + } + grub_free (script); +-- +1.8.5.3 + diff --git a/0095-Add-.eh_frame-to-list-of-relocations-stripped.patch b/0095-Add-.eh_frame-to-list-of-relocations-stripped.patch new file mode 100644 index 0000000..dfaee69 --- /dev/null +++ b/0095-Add-.eh_frame-to-list-of-relocations-stripped.patch @@ -0,0 +1,25 @@ +From 7f1cf8a3e6ba5c6eb64f8c3ef5a3b2274c53b5b5 Mon Sep 17 00:00:00 2001 +From: Fedora Ninjas +Date: Mon, 13 Jan 2014 21:50:59 -0500 +Subject: [PATCH 095/112] Add .eh_frame to list of relocations stripped + +--- + conf/Makefile.common | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/conf/Makefile.common b/conf/Makefile.common +index e4c301f..6f836d8 100644 +--- a/conf/Makefile.common ++++ b/conf/Makefile.common +@@ -45,7 +45,7 @@ CFLAGS_KERNEL = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding + LDFLAGS_KERNEL = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) $(TARGET_LDFLAGS_STATIC_LIBGCC) + CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -DGRUB_KERNEL=1 + CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) +-STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version ++STRIPFLAGS_KERNEL = -R .eh_frame -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version + + CFLAGS_MODULE = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding + LDFLAGS_MODULE = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-r,-d +-- +1.8.5.3 + diff --git a/0096-Make-10_linux-work-with-our-changes-for-linux16-and-.patch b/0096-Make-10_linux-work-with-our-changes-for-linux16-and-.patch new file mode 100644 index 0000000..d5f0844 --- /dev/null +++ b/0096-Make-10_linux-work-with-our-changes-for-linux16-and-.patch @@ -0,0 +1,85 @@ +From 86833e4fabbbf0eacef7501ec1520d5086ab2b9c Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Tue, 14 Jan 2014 13:12:23 -0500 +Subject: [PATCH 096/112] Make 10_linux work with our changes for linux16 and + linuxefi on aarch64 + +Signed-off-by: Peter Jones +--- + util/grub.d/10_linux.in | 31 ++++++++++++++++++++++++++++--- + 1 file changed, 28 insertions(+), 3 deletions(-) + +diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in +index c943a1e..2b8c561 100644 +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -75,8 +75,18 @@ linux_entry () + args="$4" + + sixteenbit="" ++ linuxefi="linux" ++ initrdefi="initrd" + case "$machine" in +- i?86|x86_64) sixteenbit="16" ;; ++ i?86|x86_64) ++ sixteenbit="16" ++ linuxefi="linuxefi" ++ initrdefi="initrdefi" ++ ;; ++ aarch64) ++ linuxefi="linux" ++ initrdefi="initrd" ++ ;; + esac + + if [ -z "$boot_device_id" ]; then +@@ -133,7 +143,7 @@ linux_entry () + fi + if [ -d /sys/firmware/efi ]; then + sed "s/^/$submenu_indentation/" << EOF +- linuxefi ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} ++ ${linuxefi} ${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args} + EOF + else + sed "s/^/$submenu_indentation/" << EOF +@@ -143,7 +153,7 @@ EOF + if test -n "${initrd}" ; then + if [ -d /sys/firmware/efi ]; then + sed "s/^/$submenu_indentation/" << EOF +- initrdefi ${rel_dirname}/${initrd} ++ ${initrdefi} ${rel_dirname}/${initrd} + EOF + else + sed "s/^/$submenu_indentation/" << EOF +@@ -151,6 +161,13 @@ EOF + EOF + fi + fi ++ if test -n "${fdt}" ; then ++ message="$(gettext_printf "Loading fdt ...")" ++ sed "s/^/$submenu_indentation/" << EOF ++ echo '$(echo "$message" | grub_quote)' ++ devicetree ${rel_dirname}/${fdt} ++EOF ++ fi + sed "s/^/$submenu_indentation/" << EOF + } + EOF +@@ -211,6 +228,14 @@ while [ "x$list" != "x" ] ; do + fi + done + ++ fdt= ++ for i in "dtb-${version}" "dtb-${alt_version}"; do ++ if test -e "${dirname}/${i}/foundation-v8.dtb" ; then ++ fdt="${i}/foundation-v8.dtb" ++ break ++ fi ++ done ++ + config= + for i in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do + if test -e "${i}" ; then +-- +1.8.5.3 + diff --git a/0097-Don-t-print-during-fdt-loading-method.patch b/0097-Don-t-print-during-fdt-loading-method.patch new file mode 100644 index 0000000..6053760 --- /dev/null +++ b/0097-Don-t-print-during-fdt-loading-method.patch @@ -0,0 +1,27 @@ +From 74b685c11c5be60033cb3e9fb65760e2ab0aa087 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Tue, 14 Jan 2014 16:15:46 -0500 +Subject: [PATCH 097/112] Don't print during fdt loading method. + +Signed-off-by: Peter Jones +--- + util/grub.d/10_linux.in | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in +index 2b8c561..acf2e0e 100644 +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -162,9 +162,7 @@ EOF + fi + fi + if test -n "${fdt}" ; then +- message="$(gettext_printf "Loading fdt ...")" + sed "s/^/$submenu_indentation/" << EOF +- echo '$(echo "$message" | grub_quote)' + devicetree ${rel_dirname}/${fdt} + EOF + fi +-- +1.8.5.3 + diff --git a/0098-Honor-a-symlink-when-generating-configuration-by-gru.patch b/0098-Honor-a-symlink-when-generating-configuration-by-gru.patch new file mode 100644 index 0000000..d84bea4 --- /dev/null +++ b/0098-Honor-a-symlink-when-generating-configuration-by-gru.patch @@ -0,0 +1,29 @@ +From 6ff2c5cd3d4b323d9ce9e306eb2ff23123bc49e7 Mon Sep 17 00:00:00 2001 +From: Marcel Kolaja +Date: Tue, 21 Jan 2014 10:57:08 -0500 +Subject: [PATCH 098/112] Honor a symlink when generating configuration by + grub2-mkconfig + +Honor a symlink when generating configuration by grub2-mkconfig, so that +the -o option follows it rather than overwriting it with a regular file. +--- + util/grub-mkconfig.in | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in +index ca040dd..b00f9e6 100644 +--- a/util/grub-mkconfig.in ++++ b/util/grub-mkconfig.in +@@ -272,7 +272,8 @@ and /etc/grub.d/* files or please file a bug report with + echo >&2 + else + # none of the children aborted with error, install the new grub.cfg +- mv -f ${grub_cfg}.new ${grub_cfg} ++ cat ${grub_cfg}.new > ${grub_cfg} ++ rm -f ${grub_cfg}.new + fi + fi + +-- +1.8.5.3 + diff --git a/0099-Don-t-require-a-password-to-boot-entries-generated-b.patch b/0099-Don-t-require-a-password-to-boot-entries-generated-b.patch new file mode 100644 index 0000000..3de6add --- /dev/null +++ b/0099-Don-t-require-a-password-to-boot-entries-generated-b.patch @@ -0,0 +1,31 @@ +From 620f2b6d613c1a1c176a24d338ebb112e9db0c1d Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Tue, 11 Feb 2014 11:14:50 -0500 +Subject: [PATCH 099/112] Don't require a password to boot entries generated by + grub-mkconfig. + +When we set a password, we just want that to mean you can't /edit/ an entry. + +Resolves: rhbz#1030176 + +Signed-off-by: Peter Jones +--- + util/grub.d/10_linux.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in +index acf2e0e..136abd7 100644 +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -26,7 +26,7 @@ datarootdir="@datarootdir@" + export TEXTDOMAIN=@PACKAGE@ + export TEXTDOMAINDIR="@localedir@" + +-CLASS="--class gnu-linux --class gnu --class os" ++CLASS="--class gnu-linux --class gnu --class os --unrestricted" + + if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then + OS="$(sed 's, release .*$,,g' /etc/system-release)" +-- +1.8.5.3 + diff --git a/0100-Don-t-emit-Booting-.-message.patch b/0100-Don-t-emit-Booting-.-message.patch new file mode 100644 index 0000000..c85e665 --- /dev/null +++ b/0100-Don-t-emit-Booting-.-message.patch @@ -0,0 +1,48 @@ +From ff7ae4d9410e282ecb10e4fb7cb34c274543406c Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Tue, 18 Feb 2014 09:37:49 -0500 +Subject: [PATCH 100/112] Don't emit "Booting ..." message. + +UI team still hates this stuff, so we're disabling it for RHEL 7. + +Resolves: rhbz#1023142 + +Signed-off-by: Peter Jones +--- + grub-core/normal/menu.c | 2 ++ + grub-core/normal/menu_entry.c | 3 --- + 2 files changed, 2 insertions(+), 3 deletions(-) + +diff --git a/grub-core/normal/menu.c b/grub-core/normal/menu.c +index b47991a..cc27c37 100644 +--- a/grub-core/normal/menu.c ++++ b/grub-core/normal/menu.c +@@ -810,9 +810,11 @@ static void + notify_booting (grub_menu_entry_t entry, + void *userdata __attribute__((unused))) + { ++#if 0 + grub_printf (" "); + grub_printf_ (N_("Booting `%s'"), entry->title); + grub_printf ("\n\n"); ++#endif + } + + /* Callback invoked when a default menu entry executed because of a timeout +diff --git a/grub-core/normal/menu_entry.c b/grub-core/normal/menu_entry.c +index b485df8..62e5db1 100644 +--- a/grub-core/normal/menu_entry.c ++++ b/grub-core/normal/menu_entry.c +@@ -1156,9 +1156,6 @@ run (struct screen *screen) + char *dummy[1] = { NULL }; + + grub_cls (); +- grub_printf (" "); +- grub_printf_ (N_("Booting a command list")); +- grub_printf ("\n\n"); + + errs_before = grub_err_printed_errors; + +-- +1.8.5.3 + diff --git a/0101-Make-CTRL-and-ALT-keys-work-as-expected-on-EFI-syste.patch b/0101-Make-CTRL-and-ALT-keys-work-as-expected-on-EFI-syste.patch new file mode 100644 index 0000000..a7134f4 --- /dev/null +++ b/0101-Make-CTRL-and-ALT-keys-work-as-expected-on-EFI-syste.patch @@ -0,0 +1,304 @@ +From 0f4b22f0c161076af596bf0d368e28e8b117cfab Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Mon, 3 Feb 2014 15:21:46 -0500 +Subject: [PATCH 101/112] Make CTRL and ALT keys work as expected on EFI + systems (version 5). + +This is version 4. + +Changes from version 1: +- handles SHIFT as a modifier +- handles F11 and F12 keys +- uses the handle provided by the system table to find our _EX protocol. + +Changes from version 2: +- eliminate duplicate keycode translation. + +Changes from version 3: +- Do not add the shift modifier for any ascii character between space + (0x20) and DEL (0x7f); the combination of the modifier and many of the + keys causes it not to be recognized at all. Specifically, if we + include the modifier on any querty punctuation character, i.e. + anything the string "~!@#$%^&*()_+{}|:\"<>?" represents in C, it stops + being recognized whatsoever. + +Changes from version 4: +- Always initialize term->data from locate protocol (i.e. make it + unconditional.) + +Signed-off-by: Peter Jones +--- + grub-core/term/efi/console.c | 118 +++++++++++++++++++++++++++++++++++-------- + include/grub/efi/api.h | 65 +++++++++++++++++++++++- + 2 files changed, 161 insertions(+), 22 deletions(-) + +diff --git a/grub-core/term/efi/console.c b/grub-core/term/efi/console.c +index a37eb84..677eab5 100644 +--- a/grub-core/term/efi/console.c ++++ b/grub-core/term/efi/console.c +@@ -104,26 +104,12 @@ const unsigned efi_codes[] = + GRUB_TERM_KEY_DC, GRUB_TERM_KEY_PPAGE, GRUB_TERM_KEY_NPAGE, GRUB_TERM_KEY_F1, + GRUB_TERM_KEY_F2, GRUB_TERM_KEY_F3, GRUB_TERM_KEY_F4, GRUB_TERM_KEY_F5, + GRUB_TERM_KEY_F6, GRUB_TERM_KEY_F7, GRUB_TERM_KEY_F8, GRUB_TERM_KEY_F9, +- GRUB_TERM_KEY_F10, 0, 0, '\e' ++ GRUB_TERM_KEY_F10, GRUB_TERM_KEY_F10, GRUB_TERM_KEY_F11, '\e' + }; + +- + static int +-grub_console_getkey (struct grub_term_input *term __attribute__ ((unused))) ++grub_efi_translate_key (grub_efi_input_key_t key) + { +- grub_efi_simple_input_interface_t *i; +- grub_efi_input_key_t key; +- grub_efi_status_t status; +- +- if (grub_efi_is_finished) +- return 0; +- +- i = grub_efi_system_table->con_in; +- status = efi_call_2 (i->read_key_stroke, i, &key); +- +- if (status != GRUB_EFI_SUCCESS) +- return GRUB_TERM_NO_KEY; +- + if (key.scan_code == 0) + { + /* Some firmware implementations use VT100-style codes against the spec. +@@ -139,9 +125,98 @@ grub_console_getkey (struct grub_term_input *term __attribute__ ((unused))) + else if (key.scan_code < ARRAY_SIZE (efi_codes)) + return efi_codes[key.scan_code]; + ++ if (key.unicode_char >= 0x20 && key.unicode_char <= 0x7f) ++ return key.unicode_char; ++ + return GRUB_TERM_NO_KEY; + } + ++static int ++grub_console_getkey_con (struct grub_term_input *term __attribute__ ((unused))) ++{ ++ grub_efi_simple_input_interface_t *i; ++ grub_efi_input_key_t key; ++ grub_efi_status_t status; ++ ++ i = grub_efi_system_table->con_in; ++ status = efi_call_2 (i->read_key_stroke, i, &key); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ return GRUB_TERM_NO_KEY; ++ ++ return grub_efi_translate_key(key); ++} ++ ++static int ++grub_console_getkey_ex(struct grub_term_input *term) ++{ ++ grub_efi_key_data_t key_data; ++ grub_efi_status_t status; ++ grub_efi_uint32_t kss; ++ int key = -1; ++ ++ grub_efi_simple_text_input_ex_interface_t *text_input = term->data; ++ ++ status = efi_call_2 (text_input->read_key_stroke, text_input, &key_data); ++ ++ if (status != GRUB_EFI_SUCCESS) ++ return GRUB_TERM_NO_KEY; ++ ++ kss = key_data.key_state.key_shift_state; ++ key = grub_efi_translate_key(key_data.key); ++ ++ if (key == GRUB_TERM_NO_KEY) ++ return GRUB_TERM_NO_KEY; ++ ++ if (kss & GRUB_EFI_SHIFT_STATE_VALID) ++ { ++ if ((kss & GRUB_EFI_LEFT_SHIFT_PRESSED ++ || kss & GRUB_EFI_RIGHT_SHIFT_PRESSED) ++ && !(key >= 0x20 && key <= 0x7f)) ++ key |= GRUB_TERM_SHIFT; ++ if (kss & GRUB_EFI_LEFT_ALT_PRESSED || kss & GRUB_EFI_RIGHT_ALT_PRESSED) ++ key |= GRUB_TERM_ALT; ++ if (kss & GRUB_EFI_LEFT_CONTROL_PRESSED ++ || kss & GRUB_EFI_RIGHT_CONTROL_PRESSED) ++ key |= GRUB_TERM_CTRL; ++ } ++ ++ return key; ++} ++ ++static grub_err_t ++grub_efi_console_input_init (struct grub_term_input *term) ++{ ++ grub_efi_guid_t text_input_ex_guid = ++ GRUB_EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID; ++ ++ if (grub_efi_is_finished) ++ return 0; ++ ++ grub_efi_simple_text_input_ex_interface_t *text_input = term->data; ++ if (text_input) ++ return 0; ++ ++ text_input = grub_efi_open_protocol(grub_efi_system_table->console_in_handler, ++ &text_input_ex_guid, ++ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); ++ term->data = (void *)text_input; ++ ++ return 0; ++} ++ ++static int ++grub_console_getkey (struct grub_term_input *term) ++{ ++ if (grub_efi_is_finished) ++ return 0; ++ ++ if (term->data) ++ return grub_console_getkey_ex(term); ++ else ++ return grub_console_getkey_con(term); ++} ++ + static struct grub_term_coordinate + grub_console_getwh (struct grub_term_output *term __attribute__ ((unused))) + { +@@ -243,7 +318,7 @@ grub_console_setcursor (struct grub_term_output *term __attribute__ ((unused)), + } + + static grub_err_t +-grub_efi_console_init (struct grub_term_output *term) ++grub_efi_console_output_init (struct grub_term_output *term) + { + grub_efi_set_text_mode (1); + grub_console_setcursor (term, 1); +@@ -251,7 +326,7 @@ grub_efi_console_init (struct grub_term_output *term) + } + + static grub_err_t +-grub_efi_console_fini (struct grub_term_output *term) ++grub_efi_console_output_fini (struct grub_term_output *term) + { + grub_console_setcursor (term, 0); + grub_efi_set_text_mode (0); +@@ -262,13 +337,14 @@ static struct grub_term_input grub_console_term_input = + { + .name = "console", + .getkey = grub_console_getkey, ++ .init = grub_efi_console_input_init, + }; + + static struct grub_term_output grub_console_term_output = + { + .name = "console", +- .init = grub_efi_console_init, +- .fini = grub_efi_console_fini, ++ .init = grub_efi_console_output_init, ++ .fini = grub_efi_console_output_fini, + .putchar = grub_console_putchar, + .getwh = grub_console_getwh, + .getxy = grub_console_getxy, +@@ -291,8 +367,8 @@ grub_console_init (void) + return; + } + +- grub_term_register_input ("console", &grub_console_term_input); + grub_term_register_output ("console", &grub_console_term_output); ++ grub_term_register_input ("console", &grub_console_term_input); + } + + void +diff --git a/include/grub/efi/api.h b/include/grub/efi/api.h +index e5dd543..1423403 100644 +--- a/include/grub/efi/api.h ++++ b/include/grub/efi/api.h +@@ -111,7 +111,7 @@ + { 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \ + } + +-#define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID \ ++#define GRUB_EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID \ + { 0xdd9e7534, 0x7762, 0x4698, \ + { 0x8c, 0x14, 0xf5, 0x85, 0x17, 0xa6, 0x25, 0xaa } \ + } +@@ -952,6 +952,32 @@ struct grub_efi_input_key + }; + typedef struct grub_efi_input_key grub_efi_input_key_t; + ++typedef grub_efi_uint8_t grub_efi_key_toggle_state_t; ++struct grub_efi_key_state ++{ ++ grub_efi_uint32_t key_shift_state; ++ grub_efi_key_toggle_state_t key_toggle_state; ++}; ++typedef struct grub_efi_key_state grub_efi_key_state_t; ++ ++#define GRUB_EFI_SHIFT_STATE_VALID 0x80000000 ++#define GRUB_EFI_RIGHT_SHIFT_PRESSED 0x00000001 ++#define GRUB_EFI_LEFT_SHIFT_PRESSED 0x00000002 ++#define GRUB_EFI_RIGHT_CONTROL_PRESSED 0x00000004 ++#define GRUB_EFI_LEFT_CONTROL_PRESSED 0x00000008 ++#define GRUB_EFI_RIGHT_ALT_PRESSED 0x00000010 ++#define GRUB_EFI_LEFT_ALT_PRESSED 0x00000020 ++#define GRUB_EFI_RIGHT_LOGO_PRESSED 0x00000040 ++#define GRUB_EFI_LEFT_LOGO_PRESSED 0x00000080 ++#define GRUB_EFI_MENU_KEY_PRESSED 0x00000100 ++#define GRUB_EFI_SYS_REQ_PRESSED 0x00000200 ++ ++#define GRUB_EFI_TOGGLE_STATE_VALID 0x80 ++#define GRUB_EFI_KEY_STATE_EXPOSED 0x40 ++#define GRUB_EFI_SCROLL_LOCK_ACTIVE 0x01 ++#define GRUB_EFI_NUM_LOCK_ACTIVE 0x02 ++#define GRUB_EFI_CAPS_LOCK_ACTIVE 0x04 ++ + struct grub_efi_simple_text_output_mode + { + grub_efi_int32_t max_mode; +@@ -1294,6 +1320,43 @@ struct grub_efi_simple_input_interface + }; + typedef struct grub_efi_simple_input_interface grub_efi_simple_input_interface_t; + ++struct grub_efi_key_data { ++ grub_efi_input_key_t key; ++ grub_efi_key_state_t key_state; ++}; ++typedef struct grub_efi_key_data grub_efi_key_data_t; ++ ++typedef grub_efi_status_t (*grub_efi_key_notify_function_t) ( ++ grub_efi_key_data_t *key_data ++ ); ++ ++struct grub_efi_simple_text_input_ex_interface ++{ ++ grub_efi_status_t ++ (*reset) (struct grub_efi_simple_text_input_ex_interface *this, ++ grub_efi_boolean_t extended_verification); ++ ++ grub_efi_status_t ++ (*read_key_stroke) (struct grub_efi_simple_text_input_ex_interface *this, ++ grub_efi_key_data_t *key_data); ++ ++ grub_efi_event_t wait_for_key; ++ ++ grub_efi_status_t ++ (*set_state) (struct grub_efi_simple_text_input_ex_interface *this, ++ grub_efi_key_toggle_state_t *key_toggle_state); ++ ++ grub_efi_status_t ++ (*register_key_notify) (struct grub_efi_simple_text_input_ex_interface *this, ++ grub_efi_key_data_t *key_data, ++ grub_efi_key_notify_function_t key_notification_function); ++ ++ grub_efi_status_t ++ (*unregister_key_notify) (struct grub_efi_simple_text_input_ex_interface *this, ++ void *notification_handle); ++}; ++typedef struct grub_efi_simple_text_input_ex_interface grub_efi_simple_text_input_ex_interface_t; ++ + struct grub_efi_simple_text_output_interface + { + grub_efi_status_t +-- +1.8.5.3 + diff --git a/0102-May-as-well-try-it.patch b/0102-May-as-well-try-it.patch new file mode 100644 index 0000000..2938952 --- /dev/null +++ b/0102-May-as-well-try-it.patch @@ -0,0 +1,1963 @@ +From bc450a7ff6c40a2f498ce6026d9e6c4dd022ca59 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Tue, 4 Mar 2014 11:00:23 -0500 +Subject: [PATCH 102/112] May as well try it. + +--- + .gitignore | 2 + + conf/Makefile.extra-dist | 1 - + configure.ac | 23 ++++++ + docs/Makefile.am | 2 - + docs/man/grub-bios-setup.h2m | 6 -- + docs/man/grub-editenv.h2m | 5 -- + docs/man/grub-emu.h2m | 6 -- + docs/man/grub-file.h2m | 2 - + docs/man/grub-fstest.h2m | 4 - + docs/man/grub-glue-efi.h2m | 4 - + docs/man/grub-install.h2m | 6 -- + docs/man/grub-kbdcomp.h2m | 10 --- + docs/man/grub-macbless.h2m | 4 - + docs/man/grub-macho2img.h2m | 4 - + docs/man/grub-menulst2cfg.h2m | 4 - + docs/man/grub-mkconfig.h2m | 4 - + docs/man/grub-mkfont.h2m | 4 - + docs/man/grub-mkimage.h2m | 6 -- + docs/man/grub-mklayout.h2m | 10 --- + docs/man/grub-mknetdir.h2m | 4 - + docs/man/grub-mkpasswd-pbkdf2.h2m | 4 - + docs/man/grub-mkrelpath.h2m | 4 - + docs/man/grub-mkrescue.h2m | 4 - + docs/man/grub-mkstandalone.h2m | 4 - + docs/man/grub-mount.h2m | 2 - + docs/man/grub-ofpathname.h2m | 4 - + docs/man/grub-pe2elf.h2m | 4 - + docs/man/grub-probe.h2m | 4 - + docs/man/grub-reboot.h2m | 5 -- + docs/man/grub-render-label.h2m | 3 - + docs/man/grub-script-check.h2m | 4 - + docs/man/grub-set-default.h2m | 5 -- + docs/man/grub-sparc64-setup.h2m | 6 -- + docs/man/grub-syslinux2cfg.h2m | 4 - + gentpl.py | 5 +- + util/grub-bios-setup.8 | 54 +++++++++++++ + util/grub-editenv.1 | 46 +++++++++++ + util/grub-file.1 | 165 ++++++++++++++++++++++++++++++++++++++ + util/grub-fstest.1 | 99 +++++++++++++++++++++++ + util/grub-glue-efi.1 | 31 +++++++ + util/grub-install.8 | 129 +++++++++++++++++++++++++++++ + util/grub-kbdcomp.1 | 19 +++++ + util/grub-macbless.1 | 22 +++++ + util/grub-menulst2cfg.1 | 12 +++ + util/grub-mkconfig.8 | 17 ++++ + util/grub-mkfont.1 | 87 ++++++++++++++++++++ + util/grub-mkimage.1 | 95 ++++++++++++++++++++++ + util/grub-mklayout.1 | 27 +++++++ + util/grub-mknetdir.1 | 12 +++ + util/grub-mkpasswd-pbkdf2.1 | 27 +++++++ + util/grub-mkrelpath.1 | 12 +++ + util/grub-mkrescue.1 | 123 ++++++++++++++++++++++++++++ + util/grub-mkstandalone.1 | 100 +++++++++++++++++++++++ + util/grub-ofpathname.8 | 12 +++ + util/grub-probe.8 | 80 ++++++++++++++++++ + util/grub-reboot.8 | 21 +++++ + util/grub-render-label.1 | 51 ++++++++++++ + util/grub-script-check.1 | 21 +++++ + util/grub-set-default.8 | 21 +++++ + util/grub-sparc64-setup.8 | 12 +++ + 60 files changed, 1321 insertions(+), 147 deletions(-) + delete mode 100644 docs/man/grub-bios-setup.h2m + delete mode 100644 docs/man/grub-editenv.h2m + delete mode 100644 docs/man/grub-emu.h2m + delete mode 100644 docs/man/grub-file.h2m + delete mode 100644 docs/man/grub-fstest.h2m + delete mode 100644 docs/man/grub-glue-efi.h2m + delete mode 100644 docs/man/grub-install.h2m + delete mode 100644 docs/man/grub-kbdcomp.h2m + delete mode 100644 docs/man/grub-macbless.h2m + delete mode 100644 docs/man/grub-macho2img.h2m + delete mode 100644 docs/man/grub-menulst2cfg.h2m + delete mode 100644 docs/man/grub-mkconfig.h2m + delete mode 100644 docs/man/grub-mkfont.h2m + delete mode 100644 docs/man/grub-mkimage.h2m + delete mode 100644 docs/man/grub-mklayout.h2m + delete mode 100644 docs/man/grub-mknetdir.h2m + delete mode 100644 docs/man/grub-mkpasswd-pbkdf2.h2m + delete mode 100644 docs/man/grub-mkrelpath.h2m + delete mode 100644 docs/man/grub-mkrescue.h2m + delete mode 100644 docs/man/grub-mkstandalone.h2m + delete mode 100644 docs/man/grub-mount.h2m + delete mode 100644 docs/man/grub-ofpathname.h2m + delete mode 100644 docs/man/grub-pe2elf.h2m + delete mode 100644 docs/man/grub-probe.h2m + delete mode 100644 docs/man/grub-reboot.h2m + delete mode 100644 docs/man/grub-render-label.h2m + delete mode 100644 docs/man/grub-script-check.h2m + delete mode 100644 docs/man/grub-set-default.h2m + delete mode 100644 docs/man/grub-sparc64-setup.h2m + delete mode 100644 docs/man/grub-syslinux2cfg.h2m + create mode 100644 util/grub-bios-setup.8 + create mode 100644 util/grub-editenv.1 + create mode 100644 util/grub-file.1 + create mode 100644 util/grub-fstest.1 + create mode 100644 util/grub-glue-efi.1 + create mode 100644 util/grub-install.8 + create mode 100644 util/grub-kbdcomp.1 + create mode 100644 util/grub-macbless.1 + create mode 100644 util/grub-menulst2cfg.1 + create mode 100644 util/grub-mkconfig.8 + create mode 100644 util/grub-mkfont.1 + create mode 100644 util/grub-mkimage.1 + create mode 100644 util/grub-mklayout.1 + create mode 100644 util/grub-mknetdir.1 + create mode 100644 util/grub-mkpasswd-pbkdf2.1 + create mode 100644 util/grub-mkrelpath.1 + create mode 100644 util/grub-mkrescue.1 + create mode 100644 util/grub-mkstandalone.1 + create mode 100644 util/grub-ofpathname.8 + create mode 100644 util/grub-probe.8 + create mode 100644 util/grub-reboot.8 + create mode 100644 util/grub-render-label.1 + create mode 100644 util/grub-script-check.1 + create mode 100644 util/grub-set-default.8 + create mode 100644 util/grub-sparc64-setup.8 + +diff --git a/conf/Makefile.extra-dist b/conf/Makefile.extra-dist +index 51f08c1..e914dfd 100644 +--- a/conf/Makefile.extra-dist ++++ b/conf/Makefile.extra-dist +@@ -10,7 +10,6 @@ EXTRA_DIST += unicode + EXTRA_DIST += util/import_gcry.py + EXTRA_DIST += util/import_unicode.py + +-EXTRA_DIST += docs/man + EXTRA_DIST += docs/autoiso.cfg + EXTRA_DIST += docs/grub.cfg + EXTRA_DIST += docs/osdetect.cfg +diff --git a/configure.ac b/configure.ac +index 8888c2f..2632e2d 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -70,6 +70,29 @@ grub_TRANSFORM([grub-set-default]) + grub_TRANSFORM([grub-sparc64-setup]) + grub_TRANSFORM([grub-render-label]) + grub_TRANSFORM([grub-file]) ++grub_TRANSFORM([grub-bios-setup.3]) ++grub_TRANSFORM([grub-editenv.1]) ++grub_TRANSFORM([grub-fstest.3]) ++grub_TRANSFORM([grub-glue-efi.3]) ++grub_TRANSFORM([grub-install.1]) ++grub_TRANSFORM([grub-kbdcomp.3]) ++grub_TRANSFORM([grub-menulst2cfg.1]) ++grub_TRANSFORM([grub-mkconfig.1]) ++grub_TRANSFORM([grub-mkfont.3]) ++grub_TRANSFORM([grub-mkimage.1]) ++grub_TRANSFORM([grub-mklayout.3]) ++grub_TRANSFORM([grub-mknetdir.3]) ++grub_TRANSFORM([grub-mkpasswd-pbkdf2.3]) ++grub_TRANSFORM([grub-mkrelpath.3]) ++grub_TRANSFORM([grub-mkrescue.1]) ++grub_TRANSFORM([grub-mkstandalone.3]) ++grub_TRANSFORM([grub-ofpathname.3]) ++grub_TRANSFORM([grub-probe.3]) ++grub_TRANSFORM([grub-reboot.3]) ++grub_TRANSFORM([grub-render-label.3]) ++grub_TRANSFORM([grub-script-check.3]) ++grub_TRANSFORM([grub-set-default.1]) ++grub_TRANSFORM([grub-sparc64-setup.3]) + + # Optimization flag. Allow user to override. + if test "x$TARGET_CFLAGS" = x; then +diff --git a/docs/Makefile.am b/docs/Makefile.am +index 93eb396..ab28f19 100644 +--- a/docs/Makefile.am ++++ b/docs/Makefile.am +@@ -5,5 +5,3 @@ info_TEXINFOS = grub.texi grub-dev.texi + grub_TEXINFOS = fdl.texi + + EXTRA_DIST = font_char_metrics.png font_char_metrics.txt +- +- +diff --git a/docs/man/grub-bios-setup.h2m b/docs/man/grub-bios-setup.h2m +deleted file mode 100644 +index ac6ede3..0000000 +--- a/docs/man/grub-bios-setup.h2m ++++ /dev/null +@@ -1,6 +0,0 @@ +-[NAME] +-grub-bios-setup \- set up a device to boot using GRUB +-[SEE ALSO] +-.BR grub-install (8), +-.BR grub-mkimage (1), +-.BR grub-mkrescue (1) +diff --git a/docs/man/grub-editenv.h2m b/docs/man/grub-editenv.h2m +deleted file mode 100644 +index 3859d3d..0000000 +--- a/docs/man/grub-editenv.h2m ++++ /dev/null +@@ -1,5 +0,0 @@ +-[NAME] +-grub-editenv \- edit GRUB environment block +-[SEE ALSO] +-.BR grub-reboot (8), +-.BR grub-set-default (8) +diff --git a/docs/man/grub-emu.h2m b/docs/man/grub-emu.h2m +deleted file mode 100644 +index ef1c000..0000000 +--- a/docs/man/grub-emu.h2m ++++ /dev/null +@@ -1,6 +0,0 @@ +-[NAME] +-grub-emu \- GRUB emulator +-[SEE ALSO] +-If you are trying to install GRUB, then you should use +-.BR grub-install (8) +-rather than this program. +diff --git a/docs/man/grub-file.h2m b/docs/man/grub-file.h2m +deleted file mode 100644 +index e09bb4d..0000000 +--- a/docs/man/grub-file.h2m ++++ /dev/null +@@ -1,2 +0,0 @@ +-[NAME] +-grub-file \- check file type +diff --git a/docs/man/grub-fstest.h2m b/docs/man/grub-fstest.h2m +deleted file mode 100644 +index 9676b15..0000000 +--- a/docs/man/grub-fstest.h2m ++++ /dev/null +@@ -1,4 +0,0 @@ +-[NAME] +-grub-fstest \- debug tool for GRUB filesystem drivers +-[SEE ALSO] +-.BR grub-probe (8) +diff --git a/docs/man/grub-glue-efi.h2m b/docs/man/grub-glue-efi.h2m +deleted file mode 100644 +index c1c6ded..0000000 +--- a/docs/man/grub-glue-efi.h2m ++++ /dev/null +@@ -1,4 +0,0 @@ +-[NAME] +-grub-glue-efi \- generate a fat binary for EFI +-[DESCRIPTION] +-grub-glue-efi processes ia32 and amd64 EFI images and glues them according to Apple format. +diff --git a/docs/man/grub-install.h2m b/docs/man/grub-install.h2m +deleted file mode 100644 +index 8cbbc87..0000000 +--- a/docs/man/grub-install.h2m ++++ /dev/null +@@ -1,6 +0,0 @@ +-[NAME] +-grub-install \- install GRUB to a device +-[SEE ALSO] +-.BR grub-mkconfig (8), +-.BR grub-mkimage (1), +-.BR grub-mkrescue (1) +diff --git a/docs/man/grub-kbdcomp.h2m b/docs/man/grub-kbdcomp.h2m +deleted file mode 100644 +index d81f915..0000000 +--- a/docs/man/grub-kbdcomp.h2m ++++ /dev/null +@@ -1,10 +0,0 @@ +-[NAME] +-grub-kbdcomp \- generate a GRUB keyboard layout file +-[DESCRIPTION] +-grub-kbdcomp processes a X keyboard layout description in +-.BR keymaps (5) +-format into a format that can be used by GRUB's +-.B keymap +-command. +-[SEE ALSO] +-.BR grub-mklayout (8) +diff --git a/docs/man/grub-macbless.h2m b/docs/man/grub-macbless.h2m +deleted file mode 100644 +index 0197c00..0000000 +--- a/docs/man/grub-macbless.h2m ++++ /dev/null +@@ -1,4 +0,0 @@ +-[NAME] +-grub-macbless \- bless a mac file/directory +-[SEE ALSO] +-.BR grub-install (1) +diff --git a/docs/man/grub-macho2img.h2m b/docs/man/grub-macho2img.h2m +deleted file mode 100644 +index d79aaee..0000000 +--- a/docs/man/grub-macho2img.h2m ++++ /dev/null +@@ -1,4 +0,0 @@ +-[NAME] +-grub-macho2img \- convert Mach-O to raw image +-[SEE ALSO] +-.BR grub-mkimage (1) +diff --git a/docs/man/grub-menulst2cfg.h2m b/docs/man/grub-menulst2cfg.h2m +deleted file mode 100644 +index c2e0055..0000000 +--- a/docs/man/grub-menulst2cfg.h2m ++++ /dev/null +@@ -1,4 +0,0 @@ +-[NAME] +-grub-menulst2cfg \- transform legacy menu.lst into grub.cfg +-[SEE ALSO] +-.BR grub-mkconfig (8) +diff --git a/docs/man/grub-mkconfig.h2m b/docs/man/grub-mkconfig.h2m +deleted file mode 100644 +index 9b42f81..0000000 +--- a/docs/man/grub-mkconfig.h2m ++++ /dev/null +@@ -1,4 +0,0 @@ +-[NAME] +-grub-mkconfig \- generate a GRUB configuration file +-[SEE ALSO] +-.BR grub-install (8) +diff --git a/docs/man/grub-mkfont.h2m b/docs/man/grub-mkfont.h2m +deleted file mode 100644 +index d46fe60..0000000 +--- a/docs/man/grub-mkfont.h2m ++++ /dev/null +@@ -1,4 +0,0 @@ +-[NAME] +-grub-mkfont \- make GRUB font files +-[SEE ALSO] +-.BR grub-mkconfig (8) +diff --git a/docs/man/grub-mkimage.h2m b/docs/man/grub-mkimage.h2m +deleted file mode 100644 +index f0fbc2b..0000000 +--- a/docs/man/grub-mkimage.h2m ++++ /dev/null +@@ -1,6 +0,0 @@ +-[NAME] +-grub-mkimage \- make a bootable image of GRUB +-[SEE ALSO] +-.BR grub-install (8), +-.BR grub-mkrescue (1), +-.BR grub-mknetdir (8) +diff --git a/docs/man/grub-mklayout.h2m b/docs/man/grub-mklayout.h2m +deleted file mode 100644 +index 1e43409..0000000 +--- a/docs/man/grub-mklayout.h2m ++++ /dev/null +@@ -1,10 +0,0 @@ +-[NAME] +-grub-mklayout \- generate a GRUB keyboard layout file +-[DESCRIPTION] +-grub-mklayout processes a keyboard layout description in +-.BR keymaps (5) +-format into a format that can be used by GRUB's +-.B keymap +-command. +-[SEE ALSO] +-.BR grub-mkconfig (8) +diff --git a/docs/man/grub-mknetdir.h2m b/docs/man/grub-mknetdir.h2m +deleted file mode 100644 +index a2ef13e..0000000 +--- a/docs/man/grub-mknetdir.h2m ++++ /dev/null +@@ -1,4 +0,0 @@ +-[NAME] +-grub-mknetdir \- prepare a GRUB netboot directory. +-[SEE ALSO] +-.BR grub-mkimage (1) +diff --git a/docs/man/grub-mkpasswd-pbkdf2.h2m b/docs/man/grub-mkpasswd-pbkdf2.h2m +deleted file mode 100644 +index 4d202f3..0000000 +--- a/docs/man/grub-mkpasswd-pbkdf2.h2m ++++ /dev/null +@@ -1,4 +0,0 @@ +-[NAME] +-grub-mkpasswd-pbkdf2 \- generate hashed password for GRUB +-[SEE ALSO] +-.BR grub-mkconfig (8) +diff --git a/docs/man/grub-mkrelpath.h2m b/docs/man/grub-mkrelpath.h2m +deleted file mode 100644 +index d01f396..0000000 +--- a/docs/man/grub-mkrelpath.h2m ++++ /dev/null +@@ -1,4 +0,0 @@ +-[NAME] +-grub-mkrelpath \- make a system path relative to its root +-[SEE ALSO] +-.BR grub-probe (8) +diff --git a/docs/man/grub-mkrescue.h2m b/docs/man/grub-mkrescue.h2m +deleted file mode 100644 +index a427f02..0000000 +--- a/docs/man/grub-mkrescue.h2m ++++ /dev/null +@@ -1,4 +0,0 @@ +-[NAME] +-grub-mkrescue \- make a GRUB rescue image +-[SEE ALSO] +-.BR grub-mkimage (1) +diff --git a/docs/man/grub-mkstandalone.h2m b/docs/man/grub-mkstandalone.h2m +deleted file mode 100644 +index c773139..0000000 +--- a/docs/man/grub-mkstandalone.h2m ++++ /dev/null +@@ -1,4 +0,0 @@ +-[NAME] +-grub-mkstandalone \- make a memdisk-based GRUB image +-[SEE ALSO] +-.BR grub-mkimage (1) +diff --git a/docs/man/grub-mount.h2m b/docs/man/grub-mount.h2m +deleted file mode 100644 +index 8d16898..0000000 +--- a/docs/man/grub-mount.h2m ++++ /dev/null +@@ -1,2 +0,0 @@ +-[NAME] +-grub-mount \- export GRUB filesystem with FUSE +diff --git a/docs/man/grub-ofpathname.h2m b/docs/man/grub-ofpathname.h2m +deleted file mode 100644 +index 74b43ee..0000000 +--- a/docs/man/grub-ofpathname.h2m ++++ /dev/null +@@ -1,4 +0,0 @@ +-[NAME] +-grub-ofpathname \- find OpenBOOT path for a device +-[SEE ALSO] +-.BR grub-probe (8) +diff --git a/docs/man/grub-pe2elf.h2m b/docs/man/grub-pe2elf.h2m +deleted file mode 100644 +index 7ca29bd..0000000 +--- a/docs/man/grub-pe2elf.h2m ++++ /dev/null +@@ -1,4 +0,0 @@ +-[NAME] +-grub-pe2elf \- convert PE image to ELF +-[SEE ALSO] +-.BR grub-mkimage (1) +diff --git a/docs/man/grub-probe.h2m b/docs/man/grub-probe.h2m +deleted file mode 100644 +index 6e1ffdc..0000000 +--- a/docs/man/grub-probe.h2m ++++ /dev/null +@@ -1,4 +0,0 @@ +-[NAME] +-grub-probe \- probe device information for GRUB +-[SEE ALSO] +-.BR grub-fstest (1) +diff --git a/docs/man/grub-reboot.h2m b/docs/man/grub-reboot.h2m +deleted file mode 100644 +index e4acace..0000000 +--- a/docs/man/grub-reboot.h2m ++++ /dev/null +@@ -1,5 +0,0 @@ +-[NAME] +-grub-reboot \- set the default boot entry for GRUB, for the next boot only +-[SEE ALSO] +-.BR grub-set-default (8), +-.BR grub-editenv (1) +diff --git a/docs/man/grub-render-label.h2m b/docs/man/grub-render-label.h2m +deleted file mode 100644 +index 50ae524..0000000 +--- a/docs/man/grub-render-label.h2m ++++ /dev/null +@@ -1,3 +0,0 @@ +-[NAME] +-grub-render-label \- generate a .disk_label for Apple Macs. +- +diff --git a/docs/man/grub-script-check.h2m b/docs/man/grub-script-check.h2m +deleted file mode 100644 +index 3653682..0000000 +--- a/docs/man/grub-script-check.h2m ++++ /dev/null +@@ -1,4 +0,0 @@ +-[NAME] +-grub-script-check \- check grub.cfg for syntax errors +-[SEE ALSO] +-.BR grub-mkconfig (8) +diff --git a/docs/man/grub-set-default.h2m b/docs/man/grub-set-default.h2m +deleted file mode 100644 +index 7945001..0000000 +--- a/docs/man/grub-set-default.h2m ++++ /dev/null +@@ -1,5 +0,0 @@ +-[NAME] +-grub-set-default \- set the saved default boot entry for GRUB +-[SEE ALSO] +-.BR grub-reboot (8), +-.BR grub-editenv (1) +diff --git a/docs/man/grub-sparc64-setup.h2m b/docs/man/grub-sparc64-setup.h2m +deleted file mode 100644 +index 18f803a..0000000 +--- a/docs/man/grub-sparc64-setup.h2m ++++ /dev/null +@@ -1,6 +0,0 @@ +-[NAME] +-grub-sparc64-setup \- set up a device to boot using GRUB +-[SEE ALSO] +-.BR grub-install (8), +-.BR grub-mkimage (1), +-.BR grub-mkrescue (1) +diff --git a/docs/man/grub-syslinux2cfg.h2m b/docs/man/grub-syslinux2cfg.h2m +deleted file mode 100644 +index ad25c8a..0000000 +--- a/docs/man/grub-syslinux2cfg.h2m ++++ /dev/null +@@ -1,4 +0,0 @@ +-[NAME] +-grub-syslinux2cfg \- transform syslinux config into grub.cfg +-[SEE ALSO] +-.BR grub-menulst2cfg (8) +diff --git a/gentpl.py b/gentpl.py +index bdcae1a..889cc91 100644 +--- a/gentpl.py ++++ b/gentpl.py +@@ -792,10 +792,7 @@ def manpage(defn, adddeps): + + output("if COND_MAN_PAGES\n") + gvar_add("man_MANS", name + "." + mansection) +- rule(name + "." + mansection, name + " " + adddeps, """ +-chmod a+x """ + name + """ +-PATH=$(builddir):$$PATH pkgdatadir=$(builddir) $(HELP2MAN) --section=""" + mansection + """ -i $(top_srcdir)/docs/man/""" + name + """.h2m -o $@ """ + name + """ +-""") ++ rule(name + "." + mansection, name + " " + adddeps, "cat $(top_srcdir)/util/" + name + "." + mansection + " | $(top_builddir)/config.status --file=$@:-") + gvar_add("CLEANFILES", name + "." + mansection) + output("endif\n") + +diff --git a/util/grub-bios-setup.8 b/util/grub-bios-setup.8 +new file mode 100644 +index 0000000..56f582b +--- /dev/null ++++ b/util/grub-bios-setup.8 +@@ -0,0 +1,54 @@ ++.TH GRUB-BIOS-SETUP 3 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-bios-setup\fR \(em Set up images to boot from a device. ++ ++.SH SYNOPSIS ++\fBgrub-bios-setup\fR [-a | --allow-floppy] [-b | --boot-image=\fIFILE\fR] ++.RS 17 ++[-c | --core-image=\fIFILE\fR] [-d | --directory=\fIDIR\fR] ++.RE ++.RS 17 ++[-f | --force] [-m | --device-map=\fIFILE\fR] ++.RE ++.RS 17 ++[-s | --skip-fs-probe] [-v | --verbose] \fIDEVICE\fR ++ ++.SH DESCRIPTION ++You should not normally run this program directly. Use grub-install instead. ++ ++.SH OPTIONS ++.TP ++\fB--allow-floppy\fR ++Make the device also bootable as a floppy. This option is the default for ++/dev/fdX devices. Some BIOSes will not boot images created with this option. ++ ++.TP ++\fB--boot-image\fR=\fIFILE\fR ++Use FILE as the boot image. The default value is \fBboot.img\fR. ++ ++.TP ++\fB--core-image\fR=\fIFILE\fR ++Use FILE as ther core image. The default value is \fBcore.img\fR. ++ ++.TP ++\fB--directory\fR=\fIDIR\fR ++Use GRUB files in the directory DIR. The default value is \fB/boot/grub\fR. ++ ++.TP ++\fB--force\fR ++Install even if problems are detected. ++ ++.TP ++\fB--device-map\fR=\fIFILE\fR ++Use FILE as the device map. The default value is /boot/grub/device.map . ++ ++.TP ++\fB--skip-fs-probe\fR ++Do not probe DEVICE for filesystems. ++ ++.TP ++\fB--verbose\fR ++Print verbose messages. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-editenv.1 b/util/grub-editenv.1 +new file mode 100644 +index 0000000..8dad33f +--- /dev/null ++++ b/util/grub-editenv.1 +@@ -0,0 +1,46 @@ ++.TH GRUB-EDITENV 1 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-editenv\fR \(em Manage the GRUB environment block. ++ ++.SH SYNOPSIS ++\fBgrub-editenv\fR [-v | --verbose] [\fIFILE\fR] ++.RS 14 ++ ++ ++.SH DESCRIPTION ++\fBgrub-editenv\fR is a command line tool to manage GRUB's stored environment. ++ ++.SH OPTIONS ++.TP ++\fB--verbose\fR ++Print verbose messages. ++ ++.TP ++\fBFILE\fR ++.RS 7 ++File name to use for grub environment. Default is /boot/grub/grubenv . ++.RE ++ ++.SH COMMANDS ++.TP ++\fBcreate\fR ++.RS 7 ++Create a blank environment block file. ++.RE ++ ++.TP ++\fBlist\fR ++.RS 7 ++List the current variables. ++.RE ++ ++.TP ++\fBset\fR [\fINAME\fR=\fIVALUE\fR ...] ++Set variables. ++ ++.TP ++\fBunset [\fINAME\fR ...] ++Delete variables. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-file.1 b/util/grub-file.1 +new file mode 100644 +index 0000000..b29cb32 +--- /dev/null ++++ b/util/grub-file.1 +@@ -0,0 +1,165 @@ ++.TH GRUB-FILE 1 "Web Feb 26 2014" ++.SH NAME ++\fBgrub-file\fR \(em Check if FILE is of specified type. ++ ++.SH SYNOPSIS ++\fBgrub-file\fR (--is-i386-xen-pae-domu | --is-x86_64-xen-domu | ++.RS 11 ++--is-x86-xen-dom0 | --is-x86-multiboot | ++.RE ++.RS 11 ++--is-x86-multiboot2 | --is-arm-linux | --is-arm64-linux | ++.RE ++.RS 11 ++--is-ia64-linux | --is-mips-linux | --is-mipsel-linux | ++.RE ++.RS 11 ++--is-sparc64-linux | --is-powerpc-linux | --is-x86-linux | ++.RE ++.RS 11 ++--is-x86-linux32 | --is-x86-kfreebsd | --is-i386-kfreebsd | ++.RE ++.RS 11 ++--is-x86_64-kfreebsd | --is-x86-knetbsd | ++.RE ++.RS 11 ++--is-i386-knetbsd | --is-x86_64-knetbsd | --is-i386-efi | ++.RE ++.RS 11 ++--is-x86_64-efi | --is-ia64-efi | --is-arm64-efi | ++.RE ++.RS 11 ++--is-arm-efi | --is-hibernated-hiberfil | --is-x86_64-xnu | ++.RE ++.RS 11 ++--is-i386-xnu | --is-xnu-hibr | --is-x86-bios-bootsector) ++.RE ++.RS 11 ++\fIFILE\fR ++ ++.SH DESCRIPTION ++\fBgrub-file\fR is used to check if \fIFILE\fR is of a specified type. ++ ++.SH OPTIONS ++.TP ++--is-i386-xen-pae-domu ++Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel ++ ++.TP ++--is-x86_64-xen-domu ++Check if FILE can be booted as x86_64 Xen unprivileged guest kernel ++ ++.TP ++--is-x86-xen-dom0 ++Check if FILE can be used as Xen x86 privileged guest kernel ++ ++.TP ++--is-x86-multiboot ++Check if FILE can be used as x86 multiboot kernel ++ ++.TP ++--is-x86-multiboot2 ++Check if FILE can be used as x86 multiboot2 kernel ++ ++.TP ++--is-arm-linux ++Check if FILE is ARM Linux ++ ++.TP ++--is-arm64-linux ++Check if FILE is ARM64 Linux ++ ++.TP ++--is-ia64-linux ++Check if FILE is IA64 Linux ++ ++.TP ++--is-mips-linux ++Check if FILE is MIPS Linux ++ ++.TP ++--is-mipsel-linux ++Check if FILE is MIPSEL Linux ++ ++.TP ++--is-sparc64-linux ++Check if FILE is SPARC64 Linux ++ ++.TP ++--is-powerpc-linux ++Check if FILE is POWERPC Linux ++ ++.TP ++--is-x86-linux ++Check if FILE is x86 Linux ++ ++.TP ++--is-x86-linux32 ++Check if FILE is x86 Linux supporting 32-bit protocol ++ ++.TP ++--is-x86-kfreebsd ++Check if FILE is x86 kFreeBSD ++ ++.TP ++--is-i386-kfreebsd ++Check if FILE is i386 kFreeBSD ++ ++.TP ++--is-x86_64-kfreebsd ++Check if FILE is x86_64 kFreeBSD ++ ++.TP ++--is-x86-knetbsd ++Check if FILE is x86 kNetBSD ++ ++.TP ++--is-i386-knetbsd ++Check if FILE is i386 kNetBSD ++ ++.TP ++--is-x86_64-knetbsd ++Check if FILE is x86_64 kNetBSD ++ ++.TP ++--is-i386-efi ++Check if FILE is i386 EFI file ++ ++.TP ++--is-x86_64-efi ++Check if FILE is x86_64 EFI file ++ ++.TP ++--is-ia64-efi ++Check if FILE is IA64 EFI file ++ ++.TP ++--is-arm64-efi ++Check if FILE is ARM64 EFI file ++ ++.TP ++--is-arm-efi ++Check if FILE is ARM EFI file ++ ++.TP ++--is-hibernated-hiberfil ++Check if FILE is hiberfil.sys in hibernated state ++ ++.TP ++--is-x86_64-xnu ++Check if FILE is x86_64 XNU (Mac OS X kernel) ++ ++.TP ++--is-i386-xnu ++Check if FILE is i386 XNU (Mac OS X kernel) ++ ++.TP ++--is-xnu-hibr ++Check if FILE is XNU (Mac OS X kernel) hibernated image ++ ++.TP ++--is-x86-bios-bootsector ++Check if FILE is BIOS bootsector ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-fstest.1 b/util/grub-fstest.1 +new file mode 100644 +index 0000000..792fa78 +--- /dev/null ++++ b/util/grub-fstest.1 +@@ -0,0 +1,99 @@ ++.TH GRUB-FSTEST 3 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-fstest\fR — Debug tool for GRUB's filesystem driver. ++ ++.SH SYNOPSIS ++\fBgrub-fstest\fR [-c | --diskcount=\fINUM\fR] [-C | --crypto] ++.RS 13 ++[-d | --debug=\fISTRING\fR] [-K | --zfs-key=\fIFILE\fR|\fIprompt\fR] ++.RE ++.RS 13 ++[-n | --length=\fINUM\fR] [-r | --root=\fIDEVICE_NAME\fR] ++.RE ++.RS 13 ++[-s | --skip=\fINUM\fR] [-u | --uncompress] [-v | --verbose] ++.RE ++.RS 13 ++\fIIMAGE_PATH\fR ++ ++.SH DESCRIPTION ++\fBgrub-fstest\fR is a tool for testing GRUB's filesystem drivers. You should not normally need to run this program. ++ ++.SH OPTIONS ++.TP ++\fB--diskcount\fR=\fINUM\fR ++Specify the number of input files. ++ ++.TP ++\fB--crypto\fR ++Mount cryptographic devices. ++ ++.TP ++\fB--debug\fR=\fISTRING\fR ++Set debug environment variable. ++ ++.TP ++\fB--zfs-key\fR=\fIFILE\fR|\fIprompt\fR ++Load ZFS cryptographic key. ++ ++.TP ++\fB--length\fR=\fINUM\fR ++Handle NUM bytes in output file. ++ ++.TP ++\fB--root\fR=\fIDEVICE_NAME\fR ++Set root device. ++ ++.TP ++\fB--skip\fR=\fINUM\fR ++Skip NUM bytes from output file. ++ ++.TP ++\fB--uncompress\fR ++Uncompress data. ++ ++.TP ++\fB--verbose\fR ++Print verbose messages. ++ ++.SH COMMANDS ++.TP ++\fBblocklist\fR \fIFILE\fR ++Display block list of \fIFILE\fR. ++ ++.TP ++\fBcat\fR \fIFILE\fR ++Display \fIFILE\fR on standard output. ++ ++.TP ++\fBcmp\fR \fIFILE\fR \fILOCAL\fR ++Compare \fIFILE\fR with local file \fILOCAL\fR. ++ ++.TP ++\fBcp\fR \fIFILE\fR \fILOCAL\fR ++Copy \fIFILE\fR to local file \fILOCAL\fR. ++ ++.TP ++\fBcrc\fR \fIFILE\fR ++Display the CRC-32 checksum of \fIFILE\fR. ++ ++.TP ++\fBhex\fR \fIFILE\fR ++Display contents of \fIFILE\fR in hexidecimal. ++ ++.TP ++\fBls\fR \fIPATH\fR ++List files at \fIPATH\fR. ++ ++.TP ++\fBxnu_uuid\fR \fIDEVICE\fR ++Display the XNU UUID of \fIDEVICE\fR. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-glue-efi.1 b/util/grub-glue-efi.1 +new file mode 100644 +index 0000000..72bd555 +--- /dev/null ++++ b/util/grub-glue-efi.1 +@@ -0,0 +1,31 @@ ++.TH GRUB-GLUE-EFI 3 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-glue-efi\fR \(em Create an Apple fat EFI binary. ++ ++.SH SYNOPSIS ++\fBgrub-glue-efi\fR <-3 | --input32=\fIFILE\fR> <-6 | --input64=\fIFILE\fR> ++.RS 15 ++<-o | --output=\fIFILE\fR> [-v | --verbose] ++ ++.SH DESCRIPTION ++\fBgrub-glue-efi\fR creates an Apple fat EFI binary from two EFI binaries. ++ ++.SH OPTIONS ++.TP ++\fB--input32\fR=\fIFILE\fR ++Read 32-bit binary from \fIFILE\fR. ++ ++.TP ++\fB--input64\fR=\fIFILE\fR ++Read 64-bit binary from \fIFILE\fR. ++ ++.TP ++\fB--output\fR=\fIFILE\fR ++Write resulting fat binary to \fIFILE\fR. ++ ++.TP ++\fB--verbose\fR ++Print verbose messages. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-install.8 b/util/grub-install.8 +new file mode 100644 +index 0000000..76272a3 +--- /dev/null ++++ b/util/grub-install.8 +@@ -0,0 +1,129 @@ ++.TH GRUB-INSTALL 1 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-install\fR \(em Install GRUB on a device. ++ ++.SH SYNOPSIS ++\fBgrub-install\fR [--modules=\fIMODULES\fR] [--install-modules=\fIMODULES\fR] ++.RS 14 ++[--themes=\fITHEMES\fR] [--fonts=\fIFONTS\fR] [--locales=\fILOCALES\fR] ++.RE ++.RS 14 ++[--compress[=\fIno\fR,\fIxz\fR,\fIgz\fR,\fIlzo\fR]] [-d | --directory=\fIDIR\fR] ++.RE ++.RS 14 ++[--grub-mkimage=\fIFILE\fR] [--boot-directory=\fIDIR\fR] ++.RE ++.RS 14 ++[--target=\fITARGET\fR] [--grub-setup=\fIFILE\fR] ++.RE ++.RS 14 ++[--grub-mkrelpath=\fIFILE\fR] [--grub-probe=\fIFILE\fR] ++.RE ++.RS 14 ++[--allow-floppy] [--recheck] [--force] [--force-file-id] ++.RE ++.RS 14 ++[--disk-module=\fIMODULE\fR] [--no-nvram] [--removable] ++.RE ++.RS 14 ++[--bootloader-id=\fIID\fR] [--efi-directory=\fIDIR\fR] \fIINSTALL_DEVICE\fR ++ ++.SH DESCRIPTION ++\fBgrub-install\fR installs GRUB onto a device. This includes copying GRUB images into the target directory (generally \fI/boot/grub\fR), and on some platforms may also include installing GRUB onto a boot sector. ++ ++.SH OPTIONS ++.TP ++\fB--modules\fR=\fIMODULES\fR\! ++Pre-load modules specified by \fIMODULES\fR. ++ ++.TP ++\fB--install-modules\fR=\fIMODULES\fR ++Install only \fIMODULES\fR and their dependencies. The default is to install all available modules. ++ ++.TP ++\fB--themes\fR=\fITHEMES\fR ++Install \fITHEMES\fR. The default is to install the \fIstarfield\fR theme, if available. ++ ++.TP ++\fB--fonts\fR=\fIFONTS\fR ++Install \fIFONTS\fR. The default is to install the \fIunicode\fR font. ++ ++.TP ++\fB--locales\fR=\fILOCALES\fR ++Install only locales listed in \fILOCALES\fR. The default is to install all available locales. ++ ++.TP ++\fB--compress\fR=\fIno\fR,\fIxz\fR,\fIgz\fR,\fIlzo\fR ++Compress GRUB files using the specified compression algorithm. ++ ++.TP ++\fB--directory\fR=\fIDIR\fR ++Use images and modules in \fIDIR\fR. ++ ++.TP ++\fB--grub-mkimage\fR=\fIFILE\fR ++Use \fIFILE\fR as \fBgrub-mkimage\fR. The default is \fI/usr/bin/grub-mkimage\fR. ++ ++.TP ++\fB--boot-directory\fR=\fIDIR\fR ++Use \fIDIR\fR as the boot directory. The default is \fI/boot\fR. GRUB will put its files in a subdirectory of this directory named \fIgrub\fR. ++ ++.TP ++\fB--target\fR=\fITARGET\fR ++Install GRUB for \fITARGET\fR platform. The default is the platform \fBgrub-install\fR is running on. ++ ++.TP ++\fB--grub-setup\fR=\fIFILE\fR ++Use \fIFILE\fR as \fBgrub-setup\fR. The default is \fI/usr/bin/grub-setup\fR. ++ ++.TP ++\fB--grub-mkrelpath\fR=\fIFILE\fR ++Use \fIFILE\fR as \fBgrub-mkrelpath\fR. The default is \fI/usr/bin/grub-mkrelpath\fR. ++ ++.TP ++\fB--grub-probe\fR=\fIFILE\fR ++Use \fIFILE\fR as \fBgrub-probe\fR. The default is \fI/usr/bin/grub-mkrelpath\fR. ++ ++.TP ++\fB--allow-floppy ++Make the device also bootable as a floppy. This option is the default for /dev/fdX devices. Some BIOSes will not boot images created with this option. ++ ++.TP ++\fB--recheck ++Delete any existing device map and create a new one if necessary. ++ ++.TP ++\fB--force ++Install even if problems are detected. ++ ++.TP ++\fB--force-file-id ++Use identifier file even if UUID is available. ++ ++.TP ++\fB--disk-module\fR=\fIMODULE\fR ++Use \fIMODULE\fR for disk access. This allows you to manually specify either \fIbiosdisk\fR or \fInative\fR disk access. This option is only available on the BIOS target platform. ++ ++.TP ++\fB--no-nvram ++Do not update the \fIboot-device\fR NVRAM variable. This option is only available on IEEE1275 target platforms. ++ ++.TP ++\fB--removable ++Treat the target device as if it is removeable. This option is only available on the EFI target platform. ++ ++.TP ++\fB--bootloader-id\fR=\fIID\fR ++Use \fIID\fR as the bootloader ID. This opption is only available on the EFI target platform. ++ ++.TP ++\fB--efi-directory\fR=\fIDIR\fR ++Use \fIDIR\fR as the EFI System Partition root. This opption is only available on the EFI ta ++rget platform. ++ ++.TP ++\fIINSTALL_DEVICE\fR ++Install GRUB to the block device \fIINSTALL_DEVICE\fR. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-kbdcomp.1 b/util/grub-kbdcomp.1 +new file mode 100644 +index 0000000..0bb969a +--- /dev/null ++++ b/util/grub-kbdcomp.1 +@@ -0,0 +1,19 @@ ++.TH GRUB-KBDCOMP 3 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-kbdcomp\fR \(em Generate a GRUB keyboard layout file. ++ ++.SH SYNOPSIS ++\fBgrub-kbdcomp\fR <-o | --output=\fIFILE\fR> \fICKBMAP_ARGUMENTS\fR ++ ++.SH DESCRIPTION ++\fBgrub-kbdcomp\fR processes an X keyboard layout description in ++\fBkeymaps\fR(5) format into a format that can be used by GRUB's \fBkeymap\fR ++command. ++ ++.SH OPTIONS ++.TP ++\fB--output\fR=\fIFILE\fR ++Write output to \fIFILE\fR. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-macbless.1 b/util/grub-macbless.1 +new file mode 100644 +index 0000000..41a9618 +--- /dev/null ++++ b/util/grub-macbless.1 +@@ -0,0 +1,22 @@ ++.TH GRUB-MACBLESS 1 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-macbless\fR \(em Mac-style bless on HFS or HFS+ ++ ++.SH SYNOPSIS ++\fBgrub-macbless\fR [-v | --verbose] [-p | --ppc] \fIFILE\fR | [-x | --x86] \fIFILE\fR ++ ++.SH OPTIONS ++.TP ++--x86 ++Bless for x86 based Macs. ++ ++.TP ++--ppc ++Bless for PPC based Macs. ++ ++.TP ++--verbose ++Print verbose messages. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-menulst2cfg.1 b/util/grub-menulst2cfg.1 +new file mode 100644 +index 0000000..91e2ef8 +--- /dev/null ++++ b/util/grub-menulst2cfg.1 +@@ -0,0 +1,12 @@ ++.TH GRUB-MENULST2CFG 1 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-menulst2cfg\fR \(em Convert a configuration file from GRUB 0.xx to GRUB 2.xx format. ++ ++.SH SYNOPSIS ++\fBgrub-menulst2cfg\fR [\fIINFILE\fR [\fIOUTFILE\fR]] ++ ++.SH DESCRIPTION ++\fBgrub-menulst2cfg\fR converts a configuration file from GRUB 0.xx to the current format. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-mkconfig.8 b/util/grub-mkconfig.8 +new file mode 100644 +index 0000000..a2d1f57 +--- /dev/null ++++ b/util/grub-mkconfig.8 +@@ -0,0 +1,17 @@ ++.TH GRUB-MKCONFIG 1 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-mkconfig\fR \(em Generate a GRUB configuration file. ++ ++.SH SYNOPSIS ++\fBgrub-mkconfig\fR [-o | --output=\fIFILE\fR] ++ ++.SH DESCRIPTION ++\fBgrub-mkconfig\fR generates a configuration file for GRUB. ++ ++.SH OPTIONS ++.TP ++\fB--output\fR=\fIFILE\fR ++Write generated output to \fIFILE\fR. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-mkfont.1 b/util/grub-mkfont.1 +new file mode 100644 +index 0000000..3494857 +--- /dev/null ++++ b/util/grub-mkfont.1 +@@ -0,0 +1,87 @@ ++.TH GRUB-MKFONT 3 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-mkfont\fR \(em Convert common font file formats into the PF2 format. ++ ++.SH SYNOPSIS ++\fBgrub-mkfont\fR [--ascii-bitmaps] [-a | --force-autohint] ++.RS 13 ++[-b | --bold] [-c | --asce=\fINUM\fR] [-d | --desc=\fINUM\fR] ++.RE ++.RS 13 ++[-i | --index=\fINUM\fR] [-n | --name=\fINAME\fR] [--no-bitmap] ++.RE ++.RS 13 ++[--no-hinting] <-o | --output=\fIFILE\fR> ++.RE ++.RS 13 ++[-r | --range=\fIFROM-TO\fR[\fI,FROM-TO\fR]] [-s | --size=\fISIZE\fR] ++.RE ++.RS 13 ++[-v | --verbose] [--width-spec] \fIFONT_FILES\fR ++ ++.SH DESCRIPTION ++\fBgrub-mkfont\fR converts font files from common formats into the PF2 format used by GRUB. ++ ++.SH OPTIONS ++.TP ++--ascii-bitmaps ++Save only bitmaps for ASCII characters. ++ ++.TP ++--force-autohint ++Force generation of automatic hinting. ++ ++.TP ++--bold ++Convert font to bold. ++ ++.TP ++--asce=\fINUM\fR ++Set font ascent to \fINUM\fR. ++ ++.TP ++--desc=\fINUM\fR ++Set font descent to \fINUM\fR. ++ ++.TP ++--index=\fINUM\fR ++Select face index \fINUM\fR. ++ ++.TP ++--name=\fINAME\fR ++Set font family to \fINAME\fR. ++ ++.TP ++--no-bitmap ++Ignore bitmap strikes when loading. ++ ++.TP ++--no-hinting ++Disable hinting. ++ ++.TP ++--output=\fIFILE\fR ++Save ouptut to \fIFILE\fR. This argument is required. ++ ++.TP ++--range=\fIFROM-TO\fR\fI,FROM-TO\fR ++Set the font ranges to each pair of \fIFROM\fR,\fITO\fR. ++ ++.TP ++--size=\fISIZE\fR ++Set font size to \fISIZE\fR. ++ ++.TP ++--verbose ++Print verbose messages. ++ ++.TP ++--width-spec ++Create a width summary file. ++ ++.TP ++\fIFONT_FILES\fR ++The input files to be converted. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-mkimage.1 b/util/grub-mkimage.1 +new file mode 100644 +index 0000000..4dea4f5 +--- /dev/null ++++ b/util/grub-mkimage.1 +@@ -0,0 +1,95 @@ ++.TH GRUB-MKIMAGE 1 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-mkimage\fR \(em Make a bootable GRUB image. ++ ++.SH SYNOPSIS ++\fBgrub-mkimage\fR [-c | --config=\fRFILE\fI] [-C | --compression=(\fIxz\fR,\fInone\fR,\fIauto\fR)] ++.RS 14 ++[-d | --directory=\fRDIR\fR] [-k | --pubkey=\fIFILE\fR] ++.RE ++.RS 14 ++[-m | --memdisk=\fIFILE\fR] [-n | --note] [-o | --output=\fIFILE\fR] ++.RE ++.RS 14 ++[-O | --format=\fIFORMAT\fR] [-p | --prefix=\fIDIR\fR] ++.RE ++.RS 14 ++[-v | --verbose] \fIMODULES\fR ++ ++.SH DESCRIPTION ++\fBgrub-mkimage\fI builds a bootable image of GRUB. ++ ++.SH OPTIONS ++.TP ++--config=\fIFILE\fR ++Embed \fIFILE\fR as the image's initial configuration file. ++ ++.TP ++--compression=(\fIxz\fR,\fInone\fR,\fIauto\fR) ++Use one of \fIxz\fR, \fInone\fR, or \fIauto\fR as the compression method for the core image. ++ ++.TP ++--directory=\fIDIR\fR ++Use images and modules from \fIDIR\fR. The default value is \fB/usr/lib/grub/\fR. ++ ++.TP ++--pubkey=\fIFILE\fR ++Embed the public key \fIFILE\fR for signature checking. ++ ++.TP ++--memdisk=\fIFILE\fR ++Embed the memdisk image \fIFILE\fR. If no \fB-p\fR option is also specified, this implies \fI-p (memdisk)/boot/grub\fR. ++ ++.TP ++--note ++Add a CHRP \fINOTE\fR section. This option is only valid on IEEE1275 platforms. ++ ++.TP ++--output=\fIFILE\fR ++Write the generated file to \fIFILE\fR. The default is to write to standard output. ++ ++.TP ++--format=\fIFORMAT\fR ++Generate an image in the specified \fIFORMAT\fR. Valid values are: ++.RS ++.RS 4 ++.P ++i386-coreboot, ++i386-multiboot, ++i386-pc, ++i386-pc-pxe, ++i386-efi, ++i386-ieee1275, ++i386-qemu, ++x86_64-efi, ++mipsel-yeeloong-flash, ++mipsel-fuloong2f-flash, ++mipself-loongson-elf, ++powerpc-ieee1275, ++sparc64-ieee1275-raw, ++sparc64-ieee1275-cdcore, ++sparc64-ieee1275-aout, ++ia64-efi, ++mips-arc, ++mipsel-arc, ++mipsel-qemu_mips-elf, ++mips-qemu_mips-flash, ++mipsel-qemu_mips-flash, ++mips-qemu_mips-elf ++.RE ++.RE ++ ++.TP ++--prefix=\fIDIR\fR ++Set prefix directory. The default value is \fI/boot/grub\fR. ++ ++.TP ++--verbose ++Print verbose messages. ++ ++.TP ++\fIMODULES\fR ++Include \fIMODULES\fR. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-mklayout.1 b/util/grub-mklayout.1 +new file mode 100644 +index 0000000..d1bbc2e +--- /dev/null ++++ b/util/grub-mklayout.1 +@@ -0,0 +1,27 @@ ++.TH GRUB-MKLAYOUT 3 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-mklayout\fR \(em Generate a GRUB keyboard layout file. ++ ++.SH SYNOPSIS ++\fBgrub-mklayout\fR [-i | --input=\fIFILE\fR] [-o | --output=\fIFILE\fR] ++.RS 15 ++[-v | --verbose] ++ ++.SH DESCRIPTION ++\fBgrub-mklayout\fR generates a GRUB keyboard layout description which corresponds with the Linux console layout description given as input. ++ ++.SH OPTIONS ++.TP ++--input=\fIFILE\fR ++Use \fIFILE\fR as the input. The default value is the standard input device. ++ ++.TP ++--output=\fIFILE\fR ++Use \fIFILE\fR as the output. The default value is the standard output device. ++ ++.TP ++--verbose ++Print verbose messages. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-mknetdir.1 b/util/grub-mknetdir.1 +new file mode 100644 +index 0000000..69c2262 +--- /dev/null ++++ b/util/grub-mknetdir.1 +@@ -0,0 +1,12 @@ ++.TH GRUB-MKNETDIR 3 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-mknetdir\fR \(em Prepare a GRUB netboot directory. ++ ++.SH SYNOPSIS ++\fBgrub-mknetdir\fR ++ ++.SH DESCRIPTION ++\fBgrub-mknetdir\fR prepares a directory for GRUB to be netbooted from. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-mkpasswd-pbkdf2.1 b/util/grub-mkpasswd-pbkdf2.1 +new file mode 100644 +index 0000000..73c437c +--- /dev/null ++++ b/util/grub-mkpasswd-pbkdf2.1 +@@ -0,0 +1,27 @@ ++.TH GRUB-MKPASSWD-PBKDF2 3 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-mkpasswd-pbkdf2\fR \(em Generate a PBKDF2 password hash. ++ ++.SH SYNOPSIS ++\fBgrub-mkpasswd-pbkdf2\fR [-c | --iteration-count=\fINUM\fR] [-l | --buflen=\fINUM\fR] ++.RS 22 ++[-s | --salt=\fINUM\fR] ++ ++.SH DESCRIPTION ++\fBgrub-mkpasswd-pbkdf2\fR generates a PBKDF2 password string suitable for use in a GRUB configuration file. ++ ++.SH OPTIONS ++.TP ++--iteration-count=\fINUM\fR ++Number of PBKDF2 iterations. ++ ++.TP ++--buflen=\fINUM\fR ++Length of generated hash. ++ ++.TP ++--salt=\fINUM\fR ++Length of salt to use. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-mkrelpath.1 b/util/grub-mkrelpath.1 +new file mode 100644 +index 0000000..85f1113 +--- /dev/null ++++ b/util/grub-mkrelpath.1 +@@ -0,0 +1,12 @@ ++.TH GRUB-MKRELPATH 3 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-mkrelpath\fR \(em Generate a relative GRUB path given an OS path. ++ ++.SH SYNOPSIS ++\fBgrub-mkrelpath\fR \fIFILE\fR ++ ++.SH DESCRIPTION ++\fBgrub-mkrelpath\fR takes an OS filesystem path for \fIFILE\fR and returns a relative path suitable for use in a GRUB configuration file. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-mkrescue.1 b/util/grub-mkrescue.1 +new file mode 100644 +index 0000000..4ed9fc7 +--- /dev/null ++++ b/util/grub-mkrescue.1 +@@ -0,0 +1,123 @@ ++.TH GRUB-MKRESCUE 3 "Wed Feb 26 2014" ++.SH NAME ++grub-mkrescue \(em Generate a GRUB rescue image using GNU Xorriso. ++ ++.SH SYNOPSIS ++\fBgrub-mkrescue\fR [-o | --output=\fIFILE\fR] [--modules=\fIMODULES\fR] ++.RS 15 ++[--install-modules=\fIMODULES\fR] [--themes=\fITHEMES\fR] ++.RE ++.RS 15 ++[--fonts=\fIFONTS\fR] [--locales=\fILOCALES\fR] ++.RE ++.RS 15 ++[--compress[=\fIno\fR,\fIxz\fR,\fIgz\fR,\fIlzo\fR]] [-d | --directory=\fIDIR\fR] ++.RE ++.RS 15 ++[--grub-mkimage=\fIFILE\fR] [--rom-directory=\fIDIR\fR] ++.RE ++.RS 15 ++[--xorriso=\fIFILE\fR] [--grub-glue-efi=\fIFILE\fR] ++.RE ++.RS 15 ++[--grub-render-label=\fIFILE\fR] [--label-font=\fIFILE\fR] ++.RE ++.RS 15 ++[--label-color=\fICOLOR\fR] [--label-bgcolor=\fIFILE\fR] ++.RE ++.RS 15 ++[--product-name=\fISTRING\fR] [--product-version=\fISTRING\fR] ++.RE ++.RS 15 ++[--sparc-boot] [--arcs-boot] ++ ++.SH DESCRIPTION ++\fBgrub-mkrescue\fR can be used to generate a rescue image with the GRUB bootloader. ++ ++.SH OPTIONS ++.TP ++\fB--output\fR=\fIFILE\fR ++Write the generated file to \fIFILE\fR. The default is to write to standard output. ++ ++.TP ++\fB--modules\fR=\fIMODULES\fR ++Pre-load modules specified by \fIMODULES\fR. ++ ++.TP ++\fB--install-modules\fR=\fIMODULES\fR ++Install only \fIMODULES\fR and their dependencies. The default is to install all available modules. ++ ++.TP ++\fB--themes\fR=\fITHEMES\fR ++Install \fITHEMES\fR. The default is to install the \fIstarfield\fR theme, if available. ++ ++.TP ++\fB--fonts\fR=\fIFONTS\fR ++Install \fIFONTS\fR. The default is to install the \fIunicode\fR font. ++ ++.TP ++\fB--locales\fR=\fILOCALES\fR ++Install only locales listed in \fILOCALES\fR. The default is to install all available locales. ++ ++.TP ++\fB--compress\fR[=\fIno\fR,\fIxz\fR,\fIgz\fR,\fIlzo\fR] ++Compress GRUB files using the specified compression algorithm. ++ ++.TP ++\fB--directory\fR=\fIDIR\fR ++Use images and modules in \fIDIR\fR. ++ ++.TP ++\fB--grub-mkimage\fR=\fIFILE\fR ++Use \fIFILE\fR as \fBgrub-mkimage\fR(1). The default is \fI/usr/bin/grub-mkimage\fR. ++ ++.TP ++\fB--rom-directory\fR=\fIDIR\fR ++Save ROM images in \fIDIR\fR. ++ ++.TP ++\fB--xorriso\fR=\fIFILE\fR ++Use \fIFILE\fR as \fBxorriso\fI. ++ ++.TP ++\fB--grub-glue-efi\fR=\fIFILE\fR ++Use \fIFILE\fR as \fBgrub-glue-efi\fR(3). ++ ++.TP ++\fB--grub-render-label\fR=\fIFILE\fR ++Use \fIFILE\fR as \fBgrub-render-label\fR(3). ++ ++.TP ++\fB--label-font\fR=\fIFILE\fR ++Use \fIFILE\fR as the font file for generated labels. ++ ++.TP ++\fB--label-color\fR=\fICOLOR\fR ++Use \fICOLOR\fI as the color for generated labels. ++ ++.TP ++\fB--label-bgcolor\fR=\fICOLOR\fR ++Use \fICOLOR\fR as the background color for generated labels. ++ ++.TP ++\fB--product-name\fR=\fISTRING\fR ++Use \fISTRING\fR as the product name in generated labels. ++ ++.TP ++\fB--product-version\fR=\fISTRING\fR ++Use \fISTRING\fR as the product version in generated labels. ++ ++.TP ++\fB--sparc-boot\fR ++Enable booting the SPARC platform. This disables HFS+, APM, ARCS, and "boot as disk image" on the \fIi386-pc\fR target platform. ++ ++.TP ++\fB--arcs-boot\fR ++Enable ARCS booting. This is typically for big-endian MIPS machines, and disables HFS+, APM, sparc64, and "boot as disk image" on the \fIi386-pc\fR target platform. ++ ++.TP ++\fB--\fR ++All options after a \fB--\fR will be passed directly to xorriso's command line when generating the image. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-mkstandalone.1 b/util/grub-mkstandalone.1 +new file mode 100644 +index 0000000..ba2d2bd +--- /dev/null ++++ b/util/grub-mkstandalone.1 +@@ -0,0 +1,100 @@ ++.TH GRUB-MKSTANDALONE 3 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-mkstandalone\fR \(em Generate a standalone image in the selected format. ++ ++.SH SYNOPSIS ++\fBgrub-mkstandalone\fR [-o | --output=\fIFILE\fR] [-O | --format=\fIFORMAT\fR] ++.RS 19 ++[-C | --compression=(\fIxz\fR|\fInone\fR|\fIauto\fR)] ++.RE ++.RS 19 ++[--modules=\fIMODULES\fR] [--install-modules=\fIMODULES\fR] ++.RE ++.RS 19 ++[--themes=\fITHEMES\fR] [--fonts=\fIFONTS\fR] ++.RE ++.RS 19 ++[--locales=\fILOCALES\fR] [--compress[=\fIno\fR,\fIxz\fR,\fIgz\fR,\fIlzo\fR]] ++.RE ++.RS 19 ++[-d | --directory=\fIDIR\fR] [--grub-mkimage=\fIFILE\fR] ++.RE ++.RS 19 ++\fISOURCE...\fR ++ ++.SH DESCRIPTION ++ ++.SH OPTIONS ++.TP ++--output=\fIFILE\fR ++Write the generated file to \fIFILE\fR. The default is to write to standard output. ++ ++.TP ++--format=\fIFORMAT\fR ++Generate an image in the specified \fIFORMAT\fR. Valid values are: ++.RS ++.RS 4 ++.P ++i386-coreboot, ++i386-multiboot, ++i386-pc, ++i386-pc-pxe, ++i386-efi, ++i386-ieee1275, ++i386-qemu, ++x86_64-efi, ++mipsel-yeeloong-flash, ++mipsel-fuloong2f-flash, ++mipself-loongson-elf, ++powerpc-ieee1275, ++sparc64-ieee1275-raw, ++sparc64-ieee1275-cdcore, ++sparc64-ieee1275-aout, ++ia64-efi, ++mips-arc, ++mipsel-arc, ++mipsel-qemu_mips-elf, ++mips-qemu_mips-flash, ++mipsel-qemu_mips-flash, ++mips-qemu_mips-elf ++.RE ++.RE ++ ++.TP ++--compression=(\fIxz\fR|\fInone\fR|\fIauto\fR) ++Use one of \fIxz\fR, \fInone\fR, or \fIauto\fR as the compression method for the core image. ++ ++.TP ++--modules=\fIMODULES\fR ++Pre-load modules specified by \fIMODULES\fR. ++ ++.TP ++--install-modules=\fIMODULES\fR ++Install only \fIMODULES\fR and their dependencies. The default is to install all available modules. ++ ++.TP ++--themes=\fITHEMES\fR ++Install \fITHEMES\fR. The default is to install the \fIstarfield\fR theme, if available. ++ ++.TP ++--fonts=\fIFONTS\fR ++Install \fIFONTS\fR. The default is to install the \fIunicode\fR font. ++ ++.TP ++--locales=\fILOCALES\fR ++Install only locales listed in \fILOCALES\fR. The default is to install all available locales. ++ ++.TP ++--compress[=\fIno\fR,\fIxz\fR,\fIgz\fR,\fIlzo\fR] ++Compress GRUB files using the specified compression algorithm. ++ ++.TP ++--directory=\fIDIR\fR ++Use images and modules in \fIDIR\fR. ++ ++.TP ++--grub-mkimage=\fIFILE\fR ++Use \fIFILE\fR as \fBgrub-mkimage\fR. The default is \fI/usr/bin/grub-mkimage\fR. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-ofpathname.8 b/util/grub-ofpathname.8 +new file mode 100644 +index 0000000..bf3743a +--- /dev/null ++++ b/util/grub-ofpathname.8 +@@ -0,0 +1,12 @@ ++.TH GRUB-OFPATHNAME 3 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-ofpathname\fR \(em Generate an IEEE-1275 device path for a specified device. ++ ++.SH SYNOPSIS ++\fBgrub-ofpathname\fR \fIDEVICE\fR ++ ++.SH DESCRIPTION ++\fBgrub-ofpathname\fR generates an IEEE-1275 device path for the specified \fIDEVICE\fR. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-probe.8 b/util/grub-probe.8 +new file mode 100644 +index 0000000..04e26c8 +--- /dev/null ++++ b/util/grub-probe.8 +@@ -0,0 +1,80 @@ ++.TH GRUB-PROBE 3 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-probe\fR \(em Probe device information for a given path. ++ ++.SH SYNOPSIS ++\fBgrub-probe\fR \[-d | --device] [-m | --device-map=\fIFILE\fR] ++.RS 12 ++[-t | --target=(fs|fs_uuid|fs_label|drive|device|partmap| ++.RE ++.RS 28 ++abstraction|cryptodisk_uuid| ++.RE ++.RS 28 ++msdos_parttype)] ++.RE ++.RS 12 ++[-v | --verbose] (PATH|DEVICE) ++ ++.SH DESCRIPTION ++\fBgrub-probe\fR probes a path or device for filesystem and related information. ++ ++.SH OPTIONS ++.TP ++--device ++Final option represents a \fIDEVICE\fR, rather than a filesystem \fIPATH\fR. ++.TP ++--device-map=\fIFILE\fR ++Use \fIFILE\fR as the device map. The default value is \fI/boot/grub/device.map\fR. ++ ++.TP ++--target=(fs|fs_uuid|fs_label|drive|device|partmap|msdos_parttype) ++Select among various output definitions. The default is \fIfs\fR. ++.RS ++.TP ++\fIfs\fR ++filesystem module ++ ++.TP ++\fIfs_uuid\fR ++filesystem UUID ++ ++.TP ++\fIfs_label\fR ++filesystem label ++ ++.TP ++\fIdrive\fR ++GRUB drive name ++ ++.TP ++\fIdevice\fR ++System device ++ ++.TP ++\fIpartmap\fR ++partition map module ++ ++.TP ++\fIabstraction\fR ++abstraction module ++ ++.TP ++\fIcryptodisk_uuid\fR ++cryptographic container ++ ++.TP ++\fImsdos_partmap\fR ++MS-DOS partition map ++.RE ++ ++.TP ++--verbose ++Print verbose output. ++ ++.TP ++(\fIPATH\fR|\fIDEVICE\fR) ++If --device is passed, a block \fIDEVICE\fR. Otherwise, the \fIPATH\fR of a file on the filesystem. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-reboot.8 b/util/grub-reboot.8 +new file mode 100644 +index 0000000..faa5e4e +--- /dev/null ++++ b/util/grub-reboot.8 +@@ -0,0 +1,21 @@ ++.TH GRUB-REBOOT 3 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-reboot\fR \(em Set the default boot menu entry for the next boot only. ++ ++.SH SYNOPSIS ++\fBgrub-reboot\fR [--boot-directory=\fIDIR\fR] \fIMENU_ENTRY\fR ++ ++.SH DESCRIPTION ++\fBgrub-reboot\fR sets the default boot menu entry for the next boot, but not further boots after that. This command only works for GRUB configuration files created with \fIGRUB_DEFAULT=saved\fR in \fI/etc/default/grub\fR. ++ ++.SH OPTIONS ++.TP ++--boot-directory=\fIDIR\fR ++Find GRUB images under \fIDIR/grub\fR. The default value is \fI/boot\fR, resulting in grub images being search for at \fI/boot/grub\fR. ++ ++.TP ++\fIMENU_ENTRY\fR ++A number, a menu item title or a menu item identifier. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-render-label.1 b/util/grub-render-label.1 +new file mode 100644 +index 0000000..4d51c8a +--- /dev/null ++++ b/util/grub-render-label.1 +@@ -0,0 +1,51 @@ ++.TH GRUB-RENDER-LABEL 3 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-render-label\fR \(em Render an Apple disk label. ++ ++.SH SYNOPSIS ++\fBgrub-render-label\fR [-b | --bgcolor=\fICOLOR\fR] [-c | --color=\fICOLOR\fR] ++.RS 19 ++[-f | --font=\fIFILE\fR] [-i | --input=\fIFILE\fR] ++.RE ++.RS 19 ++[-o | --output=\fIFILE\fR] [-t | --text=\fISTRING\fR] ++.RE ++.RS 19 ++[-v | --verbose] ++ ++.SH DESCRIPTION ++\fBgrub-render-label\fR renders an Apple disk label (.disk_label) file. ++ ++ ++.SH OPTIONS ++.TP ++\fB--color\fR=\fICOLOR\fR ++Use \fICOLOR\fI as the color for generated labels. ++ ++.TP ++\fB--bgcolor\fR=\fICOLOR\fR ++Use \fICOLOR\fR as the background color for generated labels. ++ ++.TP ++\fB--font\fR=\fIFILE\fR ++Use \fIFILE\fR as the font file for generated labels. ++ ++.TP ++--input=\fIFILE\fR ++Read input text from \fIFILE\fR. ++ ++.TP ++--output=\fIFILE\fR ++Render output to \fIFILE\fR. ++ ++.TP ++--text=\fISTRING\fR ++Use \fISTRING\fR as input text. ++ ++.TP ++--verbose ++Print verbose output. ++ ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-script-check.1 b/util/grub-script-check.1 +new file mode 100644 +index 0000000..0f1f625 +--- /dev/null ++++ b/util/grub-script-check.1 +@@ -0,0 +1,21 @@ ++.TH GRUB-SCRIPT-CHECK 3 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-script-check\fR \(em Check GRUB configuration file for syntax errors. ++ ++.SH SYNOPSIS ++\fBgrub-script-check\fR [-v | --verbose] \fIPATH\fR ++ ++.SH DESCRIPTION ++\fBgrub-script-check\fR verifies that a specified GRUB configuration file does not contain syntax errors. ++ ++.SH OPTIONS ++.TP ++--verbose ++Print verbose output. ++ ++.TP ++\fIPATH\fR ++Path of the file to use as input. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-set-default.8 b/util/grub-set-default.8 +new file mode 100644 +index 0000000..a96265a +--- /dev/null ++++ b/util/grub-set-default.8 +@@ -0,0 +1,21 @@ ++.TH GRUB-SET-DEFAULT 1 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-set-default\fR \(em Set the default boot menu entry for GRUB. ++ ++.SH SYNOPSIS ++\fBgrub-set-default\fR [--boot-directory=\fIDIR\fR] \fIMENU_ENTRY\fR ++ ++.SH DESCRIPTION ++\fBgrub-set-default\fR sets the default boot menu entry for all subsequent boots. This command only works for GRUB configuration files created with \fIGRUB_DEFAULT=saved\fR in \fI/etc/default/grub\fR. ++ ++.SH OPTIONS ++.TP ++--boot-directory=\fIDIR\fR ++Find GRUB images under \fIDIR/grub\fR. The default value is \fI/boot\fR, resulting in grub images being search for at \fI/boot/grub\fR. ++ ++.TP ++\fIMENU_ENTRY\fR ++A number, a menu item title or a menu item identifier. ++ ++.SH SEE ALSO ++.BR "info grub" +diff --git a/util/grub-sparc64-setup.8 b/util/grub-sparc64-setup.8 +new file mode 100644 +index 0000000..37ea2dd +--- /dev/null ++++ b/util/grub-sparc64-setup.8 +@@ -0,0 +1,12 @@ ++.TH GRUB-SPARC64-SETUP 3 "Wed Feb 26 2014" ++.SH NAME ++\fBgrub-sparc64-setup\fR \(em Set up a device to boot a sparc64 GRUB image. ++ ++.SH SYNOPSIS ++\fBgrub-sparc64-setup\fR [OPTIONS]. ++ ++.SH DESCRIPTION ++You should not normally run this program directly. Use grub-install instead. ++ ++.SH SEE ALSO ++.BR "info grub" +-- +1.8.5.3 + diff --git a/0103-use-fw_path-prefix-when-fallback-searching-for-grub-.patch b/0103-use-fw_path-prefix-when-fallback-searching-for-grub-.patch new file mode 100644 index 0000000..2ce20b2 --- /dev/null +++ b/0103-use-fw_path-prefix-when-fallback-searching-for-grub-.patch @@ -0,0 +1,45 @@ +From 44880b8c21f94703940a7cfb5e0a66d0e9185dcf Mon Sep 17 00:00:00 2001 +From: Fedora Ninjas +Date: Wed, 19 Feb 2014 15:58:43 -0500 +Subject: [PATCH 103/112] use fw_path prefix when fallback searching for grub + config + +When PXE booting via UEFI firmware, grub was searching for grub.cfg +in the fw_path directory where the grub application was found. If +that didn't exist, a fallback search would look for config file names +based on MAC and IP address. However, the search would look in the +prefix directory which may not be the same fw_path. This patch +changes that behavior to use the fw_path directory for the fallback +search. Only if fw_path is NULL will the prefix directory be searched. + +Signed-off-by: Mark Salter +--- + grub-core/normal/main.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c +index f66c03c..5e2ac15 100644 +--- a/grub-core/normal/main.c ++++ b/grub-core/normal/main.c +@@ -343,7 +343,7 @@ grub_cmd_normal (struct grub_command *cmd __attribute__ ((unused)), + char *config; + const char *prefix, *fw_path; + +- fw_path = grub_env_get ("fw_path"); ++ prefix = fw_path = grub_env_get ("fw_path"); + if (fw_path) + { + config = grub_xasprintf ("%s/grub.cfg", fw_path); +@@ -366,7 +366,8 @@ grub_cmd_normal (struct grub_command *cmd __attribute__ ((unused)), + } + } + +- prefix = grub_env_get ("prefix"); ++ if (! prefix) ++ prefix = grub_env_get ("prefix"); + if (prefix) + { + grub_size_t config_len; +-- +1.8.5.3 + diff --git a/0104-Try-mac-guid-etc-before-grub.cfg-on-tftp-config-file.patch b/0104-Try-mac-guid-etc-before-grub.cfg-on-tftp-config-file.patch new file mode 100644 index 0000000..d22cfa4 --- /dev/null +++ b/0104-Try-mac-guid-etc-before-grub.cfg-on-tftp-config-file.patch @@ -0,0 +1,115 @@ +From ae4b0a2e8a798b13e351c4b830e31021ca2d8da3 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Thu, 6 Mar 2014 11:51:33 -0500 +Subject: [PATCH 104/112] Try mac/guid/etc before grub.cfg on tftp config + files. + +Signed-off-by: Peter Jones +--- + grub-core/normal/main.c | 80 ++++++++++++++++++++++++++----------------------- + 1 file changed, 43 insertions(+), 37 deletions(-) + +diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c +index 5e2ac15..4190985 100644 +--- a/grub-core/normal/main.c ++++ b/grub-core/normal/main.c +@@ -341,53 +341,59 @@ grub_cmd_normal (struct grub_command *cmd __attribute__ ((unused)), + /* Guess the config filename. It is necessary to make CONFIG static, + so that it won't get broken by longjmp. */ + char *config; +- const char *prefix, *fw_path; +- +- prefix = fw_path = grub_env_get ("fw_path"); +- if (fw_path) +- { +- config = grub_xasprintf ("%s/grub.cfg", fw_path); +- if (config) +- { +- grub_file_t file; +- +- file = grub_file_open (config); +- if (file) +- { +- grub_file_close (file); +- grub_enter_normal_mode (config); +- } +- else +- { +- /* Ignore all errors. */ +- grub_errno = 0; +- } +- grub_free (config); +- } +- } ++ const char *prefix; + ++ prefix = grub_env_get ("fw_path"); + if (! prefix) + prefix = grub_env_get ("prefix"); ++ + if (prefix) +- { +- grub_size_t config_len; +- config_len = grub_strlen (prefix) + +- sizeof ("/grub.cfg-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"); +- config = grub_malloc (config_len); ++ { ++ if (grub_strncmp (prefix + 1, "tftp", sizeof ("tftp") - 1) == 0) ++ { ++ grub_size_t config_len; ++ config_len = grub_strlen (prefix) + ++ sizeof ("/grub.cfg-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"); ++ config = grub_malloc (config_len); ++ ++ if (! config) ++ goto quit; + +- if (! config) +- goto quit; ++ grub_snprintf (config, config_len, "%s/grub.cfg", prefix); + +- grub_snprintf (config, config_len, "%s/grub.cfg", prefix); ++ grub_net_search_configfile (config); + +- if (grub_strncmp (prefix + 1, "tftp", sizeof ("tftp") - 1) == 0) +- grub_net_search_configfile (config); ++ grub_enter_normal_mode (config); ++ grub_free (config); ++ config = NULL; ++ } + +- grub_enter_normal_mode (config); +- grub_free (config); ++ if (!config) ++ { ++ config = grub_xasprintf ("%s/grub.cfg", prefix); ++ if (config) ++ { ++ grub_file_t file; ++ ++ file = grub_file_open (config); ++ if (file) ++ { ++ grub_file_close (file); ++ grub_enter_normal_mode (config); ++ } ++ else ++ { ++ /* Ignore all errors. */ ++ grub_errno = 0; ++ } ++ grub_free (config); ++ } ++ } + } + else +- grub_enter_normal_mode (0); ++ { ++ grub_enter_normal_mode (0); ++ } + } + else + grub_enter_normal_mode (argv[0]); +-- +1.8.5.3 + diff --git a/0105-trim-arp-packets-with-abnormal-size.patch b/0105-trim-arp-packets-with-abnormal-size.patch new file mode 100644 index 0000000..aad519d --- /dev/null +++ b/0105-trim-arp-packets-with-abnormal-size.patch @@ -0,0 +1,31 @@ +From 876f1ca10cf9c59b32ebb5184901eb44559f1afe Mon Sep 17 00:00:00 2001 +From: Paulo Flabiano Smorigo +Date: Wed, 5 Feb 2014 09:42:42 -0200 +Subject: [PATCH 105/112] trim arp packets with abnormal size + +GRUB uses arp request to create the arp response. If the incoming packet +is foobared, GRUB needs to trim the arp response packet before sending it. +--- + grub-core/net/arp.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/grub-core/net/arp.c b/grub-core/net/arp.c +index d62d0cc..77581f4 100644 +--- a/grub-core/net/arp.c ++++ b/grub-core/net/arp.c +@@ -162,6 +162,12 @@ grub_net_arp_receive (struct grub_net_buff *nb, + if (grub_net_addr_cmp (&inf->address, &target_addr) == 0 + && grub_be_to_cpu16 (arp_header->op) == ARP_REQUEST) + { ++ if ((nb->tail - nb->data) > 50) ++ { ++ grub_dprintf ("net", "arp packet with abnormal size (%ld bytes).\n", ++ nb->tail - nb->data); ++ nb->tail = nb->data + 50; ++ } + grub_net_link_level_address_t target; + /* We've already checked that pln is either 4 or 16. */ + char tmp[16]; +-- +1.8.5.3 + diff --git a/0106-Fix-convert-function-to-support-NVMe-devices.patch b/0106-Fix-convert-function-to-support-NVMe-devices.patch new file mode 100644 index 0000000..62a43aa --- /dev/null +++ b/0106-Fix-convert-function-to-support-NVMe-devices.patch @@ -0,0 +1,59 @@ +From 0389c4140e8b359323e3d614032b0e55142ef337 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Tue, 18 Feb 2014 11:34:00 -0500 +Subject: [PATCH 106/112] Fix convert function to support NVMe devices + +This is adapted from the patch at +https://bugzilla.redhat.com/show_bug.cgi?id=1019660 , which is against +the now very old version of convert_system_partition_to_system_disk(). + +As such, it certainly not the right thing for upstream, but should +function for now. + +Resolves: rhbz#1019660 + +Signed-off-by: Peter Jones +--- + util/getroot.c | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +diff --git a/util/getroot.c b/util/getroot.c +index 3958105..e700610 100644 +--- a/util/getroot.c ++++ b/util/getroot.c +@@ -152,6 +152,7 @@ convert_system_partition_to_system_disk (const char *os_dev, int *is_part) + { + #if GRUB_UTIL_FD_STAT_IS_FUNCTIONAL + struct stat st; ++ char *path = xmalloc(PATH_MAX); + + if (stat (os_dev, &st) < 0) + { +@@ -164,6 +165,24 @@ convert_system_partition_to_system_disk (const char *os_dev, int *is_part) + + *is_part = 0; + ++ if (realpath(os_dev, path)) ++ { ++ if ((strncmp ("/dev/nvme", path, 9) == 0)) ++ { ++ char *p = path + 5; ++ p = strchr(p, 'p'); ++ if (p) ++ { ++ *is_part = 1; ++ *p = '\0'; ++ } ++ return path; ++ } ++ } ++ ++ grub_free (path); ++ *is_part = 0; ++ + if (grub_util_device_is_mapped_stat (&st)) + return grub_util_devmapper_part_to_disk (&st, is_part, os_dev); + +-- +1.8.5.3 + diff --git a/0107-Fix-bad-test-on-GRUB_DISABLE_SUBMENU.patch b/0107-Fix-bad-test-on-GRUB_DISABLE_SUBMENU.patch new file mode 100644 index 0000000..3f636db --- /dev/null +++ b/0107-Fix-bad-test-on-GRUB_DISABLE_SUBMENU.patch @@ -0,0 +1,37 @@ +From 958c24780d09d0f08869aee320db830634269911 Mon Sep 17 00:00:00 2001 +From: Prarit Bhargava +Date: Wed, 12 Mar 2014 10:58:16 -0400 +Subject: [PATCH 107/112] Fix bad test on GRUB_DISABLE_SUBMENU. + +The file /etc/grub.d/10_linux does + +if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xy ]; then + +when it should do + +if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xtrue ]; then + +which results in submenus in /boot/grub2/grub.cfg when +GRUB_DISABLE_SUBMENU="yes". + +Resolves: rhbz#1063414 +--- + util/grub.d/10_linux.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in +index 136abd7..3f799e9 100644 +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -255,7 +255,7 @@ while [ "x$list" != "x" ] ; do + linux_root_device_thisversion=${GRUB_DEVICE} + fi + +- if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xy ]; then ++ if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xtrue ]; then + linux_entry "${OS}" "${version}" simple \ + "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" + +-- +1.8.5.3 + diff --git a/0108-Switch-to-use-APM-Mustang-device-tree-for-hardware-t.patch b/0108-Switch-to-use-APM-Mustang-device-tree-for-hardware-t.patch new file mode 100644 index 0000000..dba3173 --- /dev/null +++ b/0108-Switch-to-use-APM-Mustang-device-tree-for-hardware-t.patch @@ -0,0 +1,29 @@ +From 9266ee449882452a32f8cfd0d9ef590ca8c8851c Mon Sep 17 00:00:00 2001 +From: Fedora Ninjas +Date: Mon, 10 Feb 2014 16:13:10 -0500 +Subject: [PATCH 108/112] Switch to use APM Mustang device tree, for hardware + testing. + +Signed-off-by: David A. Marlin +--- + util/grub.d/10_linux.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in +index 3f799e9..2639511 100644 +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -228,8 +228,8 @@ while [ "x$list" != "x" ] ; do + + fdt= + for i in "dtb-${version}" "dtb-${alt_version}"; do +- if test -e "${dirname}/${i}/foundation-v8.dtb" ; then +- fdt="${i}/foundation-v8.dtb" ++ if test -e "${dirname}/${i}/apm-mustang.dtb" ; then ++ fdt="${i}/apm-mustang.dtb" + break + fi + done +-- +1.8.5.3 + diff --git a/0109-Use-the-default-device-tree-from-the-grub-default-fi.patch b/0109-Use-the-default-device-tree-from-the-grub-default-fi.patch new file mode 100644 index 0000000..048e3df --- /dev/null +++ b/0109-Use-the-default-device-tree-from-the-grub-default-fi.patch @@ -0,0 +1,46 @@ +From 3d0e76048d0c50fb3f02fbd27f7bf52fbf8ca2c4 Mon Sep 17 00:00:00 2001 +From: Fedora Ninjas +Date: Wed, 12 Feb 2014 14:54:04 -0500 +Subject: [PATCH 109/112] Use the default device tree from the grub default + file + +instead of hardcoding a value. + +Signed-off-by: David A. Marlin +--- + util/grub-mkconfig.in | 3 ++- + util/grub.d/10_linux.in | 4 ++-- + 2 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in +index b00f9e6..beb22de 100644 +--- a/util/grub-mkconfig.in ++++ b/util/grub-mkconfig.in +@@ -224,7 +224,8 @@ export GRUB_DEFAULT \ + GRUB_ENABLE_CRYPTODISK \ + GRUB_BADRAM \ + GRUB_OS_PROBER_SKIP_LIST \ +- GRUB_DISABLE_SUBMENU ++ GRUB_DISABLE_SUBMENU \ ++ GRUB_DEFAULT_DTB + + if test "x${grub_cfg}" != "x"; then + rm -f "${grub_cfg}.new" +diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in +index 2639511..6480cd6 100644 +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -228,8 +228,8 @@ while [ "x$list" != "x" ] ; do + + fdt= + for i in "dtb-${version}" "dtb-${alt_version}"; do +- if test -e "${dirname}/${i}/apm-mustang.dtb" ; then +- fdt="${i}/apm-mustang.dtb" ++ if test -f "${dirname}/${i}/${GRUB_DEFAULT_DTB}" ; then ++ fdt="${i}/${GRUB_DEFAULT_DTB}" + break + fi + done +-- +1.8.5.3 + diff --git a/0110-reopen-SNP-protocol-for-exclusive-use-by-grub.patch b/0110-reopen-SNP-protocol-for-exclusive-use-by-grub.patch new file mode 100644 index 0000000..350055a --- /dev/null +++ b/0110-reopen-SNP-protocol-for-exclusive-use-by-grub.patch @@ -0,0 +1,46 @@ +From 42d3848d0162ea8f824d63d57afb43b8b0a96860 Mon Sep 17 00:00:00 2001 +From: Fedora Ninjas +Date: Sat, 15 Feb 2014 15:10:22 -0500 +Subject: [PATCH 110/112] reopen SNP protocol for exclusive use by grub + +--- + grub-core/net/drivers/efi/efinet.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/grub-core/net/drivers/efi/efinet.c b/grub-core/net/drivers/efi/efinet.c +index 2b344d6..a6e4c79 100644 +--- a/grub-core/net/drivers/efi/efinet.c ++++ b/grub-core/net/drivers/efi/efinet.c +@@ -223,6 +223,7 @@ grub_efi_net_config_real (grub_efi_handle_t hnd, char **device, + { + struct grub_net_card *card; + grub_efi_device_path_t *dp; ++ grub_efi_simple_network_t *net; + + dp = grub_efi_get_device_path (hnd); + if (! dp) +@@ -250,6 +251,21 @@ grub_efi_net_config_real (grub_efi_handle_t hnd, char **device, + &pxe_mode->dhcp_ack, + sizeof (pxe_mode->dhcp_ack), + 1, device, path); ++ net = grub_efi_open_protocol (card->efi_handle, &net_io_guid, ++ GRUB_EFI_OPEN_PROTOCOL_BY_EXCLUSIVE); ++ if (net) { ++ if (net->mode->state == GRUB_EFI_NETWORK_STOPPED ++ && efi_call_1 (net->start, net) != GRUB_EFI_SUCCESS) ++ continue; ++ ++ if (net->mode->state == GRUB_EFI_NETWORK_STOPPED) ++ continue; ++ ++ if (net->mode->state == GRUB_EFI_NETWORK_STARTED ++ && efi_call_3 (net->initialize, net, 0, 0) != GRUB_EFI_SUCCESS) ++ continue; ++ card->efi_net = net; ++ } + return; + } + } +-- +1.8.5.3 + diff --git a/0111-Reduce-timer-event-frequency-by-10.patch b/0111-Reduce-timer-event-frequency-by-10.patch new file mode 100644 index 0000000..2882ea5 --- /dev/null +++ b/0111-Reduce-timer-event-frequency-by-10.patch @@ -0,0 +1,40 @@ +From 3cedd7c7beb7244ef9bd0e52ca7e3dcef0f206ff Mon Sep 17 00:00:00 2001 +From: Mark Salter +Date: Thu, 20 Feb 2014 12:54:52 -0500 +Subject: [PATCH 111/112] Reduce timer event frequency by 10 + +Timer event to keep grub msec counter was running at 1000HZ. This was too +fast for UEFI timer driver and resulted in a 10x slowdown in grub time +versus wallclock. Reduce the timer event frequency and increase tick +increment accordingly to keep better time. + +Signed-off-by: Mark Salter +--- + grub-core/kern/arm/efi/init.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/grub-core/kern/arm/efi/init.c b/grub-core/kern/arm/efi/init.c +index a6ae034..0c17d83 100644 +--- a/grub-core/kern/arm/efi/init.c ++++ b/grub-core/kern/arm/efi/init.c +@@ -38,7 +38,7 @@ static void + increment_timer (grub_efi_event_t event __attribute__ ((unused)), + void *context __attribute__ ((unused))) + { +- tmr++; ++ tmr += 10; + } + + void +@@ -52,7 +52,7 @@ grub_machine_init (void) + + efi_call_5 (b->create_event, GRUB_EFI_EVT_TIMER | GRUB_EFI_EVT_NOTIFY_SIGNAL, + GRUB_EFI_TPL_CALLBACK, increment_timer, NULL, &tmr_evt); +- efi_call_3 (b->set_timer, tmr_evt, GRUB_EFI_TIMER_PERIODIC, 10000); ++ efi_call_3 (b->set_timer, tmr_evt, GRUB_EFI_TIMER_PERIODIC, 100000); + + grub_install_get_time_ms (grub_efi_get_time_ms); + } +-- +1.8.5.3 + diff --git a/0112-always-return-error-to-UEFI.patch b/0112-always-return-error-to-UEFI.patch new file mode 100644 index 0000000..523f591 --- /dev/null +++ b/0112-always-return-error-to-UEFI.patch @@ -0,0 +1,25 @@ +From 3349ad8d2c349541a42867afd389cdbe0d413dd6 Mon Sep 17 00:00:00 2001 +From: Fedora Ninjas +Date: Wed, 26 Feb 2014 21:49:12 -0500 +Subject: [PATCH 112/112] always return error to UEFI + +--- + grub-core/kern/efi/efi.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c +index cd839cc..1a8dba5 100644 +--- a/grub-core/kern/efi/efi.c ++++ b/grub-core/kern/efi/efi.c +@@ -158,7 +158,7 @@ grub_exit (void) + { + grub_efi_fini (); + efi_call_4 (grub_efi_system_table->boot_services->exit, +- grub_efi_image_handle, GRUB_EFI_SUCCESS, 0, 0); ++ grub_efi_image_handle, GRUB_EFI_LOAD_ERROR, 0, 0); + for (;;) ; + } + +-- +1.8.5.3 + diff --git a/grub2.spec b/grub2.spec index 64faeb1..56a6058 100644 --- a/grub2.spec +++ b/grub2.spec @@ -47,7 +47,7 @@ Name: grub2 Epoch: 1 Version: 2.02 -Release: 0.2%{?dist} +Release: 0.3%{?dist} Summary: Bootloader with support for Linux, Multiboot and more Group: System Environment/Base @@ -59,46 +59,122 @@ Source0: ftp://alpha.gnu.org/gnu/grub/grub-%{tarversion}.tar.xz Source4: http://unifoundry.com/unifont-5.1.20080820.pcf.gz Source5: theme.tar.bz2 #Source6: grub-cd.cfg -Patch0001: 0001-Migrate-PPC-from-Yaboot-to-Grub2.patch -Patch0002: 0002-Add-fw_path-variable-revised.patch -Patch0003: 0003-Add-support-for-linuxefi.patch -Patch0004: 0004-Use-linuxefi-and-initrdefi-where-appropriate.patch -Patch0005: 0005-Don-t-allow-insmod-when-secure-boot-is-enabled.patch -Patch0006: 0006-Pass-x-hex-hex-straight-through-unmolested.patch -Patch0007: 0007-Fix-crash-on-http.patch -Patch0008: 0008-IBM-client-architecture-CAS-reboot-support.patch -Patch0009: 0009-Add-vlan-tag-support.patch -Patch0010: 0010-Add-X-option-to-printf-functions.patch -Patch0011: 0011-DHCP-client-ID-and-UUID-options-added.patch -Patch0012: 0012-Search-for-specific-config-file-for-netboot.patch -Patch0013: 0013-blscfg-add-blscfg-module-to-parse-Boot-Loader-Specif.patch -Patch0014: 0014-Move-bash-completion-script-922997.patch -Patch0015: 0015-for-ppc-reset-console-display-attr-when-clear-screen.patch -Patch0016: 0016-Don-t-write-messages-to-the-screen.patch -Patch0017: 0017-Don-t-print-GNU-GRUB-header.patch -Patch0018: 0018-Don-t-add-to-highlighted-row.patch -Patch0019: 0019-Don-t-add-to-highlighted-row.patch -Patch0020: 0020-Message-string-cleanups.patch -Patch0021: 0021-Fix-border-spacing-now-that-we-aren-t-displaying-it.patch -Patch0022: 0022-Use-the-correct-indentation-for-the-term-help-text.patch -Patch0023: 0023-Indent-menu-entries.patch -Patch0024: 0024-Fix-margins.patch -Patch0025: 0025-Add-support-for-UEFI-operating-systems-returned-by-o.patch -Patch0026: 0026-Disable-GRUB-video-support-for-IBM-power-machines.patch -Patch0027: 0027-Use-2-instead-of-1-for-our-right-hand-margin-so-line.patch -Patch0028: 0028-Use-linux16-when-appropriate-880840.patch -Patch0029: 0029-Enable-pager-by-default.-985860.patch -Patch0030: 0030-F10-doesn-t-work-on-serial-so-don-t-tell-the-user-to.patch -Patch0031: 0031-Don-t-say-GNU-Linux-in-generated-menus.patch -Patch0032: 0032-Don-t-draw-a-border-around-the-menu.patch -Patch0033: 0033-Use-the-standard-margin-for-the-timeout-string.patch -Patch0034: 0034-Fix-grub_script_execute_sourcecode-usage-on-ppc.patch -Patch0035: 0035-Add-.eh_frame-to-list-of-relocations-stripped.patch -Patch0036: 0036-arm64-set-correct-length-of-device-path-end-entry.patch -Patch0037: 0037-Make-10_linux-work-with-our-changes-for-linux16-and-.patch + +Patch0001: 0001-fix-EFI-detection-on-Windows.patch +Patch0002: 0002-grub-core-kern-arm-cache_armv6.S-Remove-.arch-direct.patch +Patch0003: 0003-NEWS-First-draft-of-2.02-entry.patch +Patch0004: 0004-remove-unused-error.h-from-kern-emu-misc.c.patch +Patch0005: 0005-Don-t-abort-on-unavailable-coreboot-tables-if-not-ru.patch +Patch0006: 0006-NEWS-Add-few-missing-entries.-Correct-existing-ones.patch +Patch0007: 0007-strip-.eh_frame-section-from-arm64-efi-kernel.patch +Patch0008: 0008-use-grub-boot-aa64.efi-for-boot-images-on-AArch64.patch +Patch0009: 0009-fix-32-bit-compilation-on-MinGW-w64.patch +Patch0010: 0010-Change-grub-mkrescue-to-use-bootaa64.efi-too.patch +Patch0011: 0011-arm64-set-correct-length-of-device-path-end-entry.patch +Patch0012: 0012-Makefile.util.def-grub-macbless-Change-mansection-to.patch +Patch0013: 0013-add-part_apple-to-EFI-rescue-image-to-fix-missing-pr.patch +Patch0014: 0014-freebsd-hostdisk.c-is-only-ever-compiled-on-FreeBSD.patch +Patch0015: 0015-Prefer-more-portable-test-1-constructs.patch +Patch0016: 0016-NEWS-Add-few-missing-entries.patch +Patch0017: 0017-grub-core-kern-efi-efi.c-Ensure-that-the-result-star.patch +Patch0018: 0018-util-grub-mount.c-Extend-GCC-warning-workaround-to-g.patch +Patch0019: 0019-reintroduce-BUILD_LDFLAGS-for-the-cross-compile-case.patch +Patch0020: 0020-grub-core-term-terminfo.c-Recognize-keys-F1-F12.patch +Patch0021: 0021-Fix-ChangeLog-date.patch +Patch0022: 0022-Use-_W64-to-detect-MinGW-W64-32-instead-of-_FILE_OFF.patch +Patch0023: 0023-add-BUILD_EXEEXT-support-to-fix-make-clean-on-Window.patch +Patch0024: 0024-fix-include-loop-on-MinGW-due-to-libintl.h-pulling-s.patch +Patch0025: 0025-grub-core-commands-macbless.c-Rename-FILE-and-DIR-to.patch +Patch0026: 0026-Makefile.util.def-Link-grub-ofpathname-with-zfs-libs.patch +Patch0027: 0027-Makefile.am-default_payload.elf-Add-modules.patch +Patch0028: 0028-fix-removal-of-cpu-machine-links-on-mingw-msys.patch +Patch0029: 0029-grub-core-normal-main.c-read_config_file-Buffer-conf.patch +Patch0030: 0030-util-grub-install.c-Fix-a-typo.patch +Patch0031: 0031-use-MODULE_FILES-for-genemuinit-instead-of-MOD_FILES.patch +Patch0032: 0032-Ignore-EPERM-when-modifying-kern.geom.debugflags.patch +Patch0033: 0033-change-stop-condition-to-avoid-infinite-loops.patch +Patch0034: 0034-increase-network-try-interval-gradually.patch +Patch0035: 0035-look-for-DejaVu-also-in-usr-share-fonts-truetype.patch +Patch0036: 0036-Show-detected-path-to-DejaVuSans-in-configure-summar.patch +Patch0037: 0037-add-GRUB_WINDOWS_EXTRA_DIST-to-allow-shipping-runtim.patch +Patch0038: 0038-util-grub-install.c-write_to_disk-Add-an-info-messag.patch +Patch0039: 0039-util-grub-install.c-List-available-targets.patch +Patch0040: 0040-Fix-several-translatable-strings.patch +Patch0041: 0041-do-not-set-default-prefix-in-grub-mkimage.patch +Patch0042: 0042-fix-Mingw-W64-32-cross-compile-failure-due-to-printf.patch +Patch0043: 0043-grub-core-term-serial.c-grub_serial_register-Fix-inv.patch +Patch0044: 0044-grub-install-support-for-partitioned-partx-loop-devi.patch +Patch0045: 0045-grub-core-term-at_keyboard.c-Tolerate-missing-keyboa.patch +Patch0046: 0046-grub-core-disk-ahci.c-Do-not-enable-I-O-decoding-and.patch +Patch0047: 0047-grub-core-disk-ahci.c-Allocate-and-clean-space-for-a.patch +Patch0048: 0048-grub-core-disk-ahci.c-Add-safety-cleanups.patch +Patch0049: 0049-grub-core-disk-ahci.c-Properly-handle-transactions-w.patch +Patch0050: 0050-grub-core-disk-ahci.c-Increase-timeout.-Some-SSDs-ta.patch +Patch0051: 0051-util-grub-mkfont.c-Build-fix-for-argp.h-with-older-g.patch +Patch0052: 0052-util-grub-mkrescue.c-Build-fix-for-argp.h-with-older.patch +Patch0053: 0053-add-grub_env_set_net_property-function.patch +Patch0054: 0054-add-bootpath-parser-for-open-firmware.patch +Patch0055: 0055-grub-core-disk-ahci.c-Ignore-NPORTS-field-and-rely-o.patch +Patch0056: 0056-grub-core-kern-i386-coreboot-mmap.c-Filter-out-0xa00.patch +Patch0057: 0057-grub-core-loader-i386-multiboot_mbi.c-grub_multiboot.patch +Patch0058: 0058-grub-core-mmap-i386-uppermem.c-lower_hook-COREBOOT-I.patch +Patch0059: 0059-grub-core-kern-i386-pc-mmap.c-Fallback-to-EISA-memor.patch +Patch0060: 0060-include-grub-i386-openbsd_bootarg.h-Add-addr-and-fre.patch +Patch0061: 0061-Migrate-PPC-from-Yaboot-to-Grub2.patch +Patch0062: 0062-Add-fw_path-variable-revised.patch +Patch0063: 0063-Add-support-for-linuxefi.patch +Patch0064: 0064-Use-linuxefi-and-initrdefi-where-appropriate.patch +Patch0065: 0065-Don-t-allow-insmod-when-secure-boot-is-enabled.patch +Patch0066: 0066-Pass-x-hex-hex-straight-through-unmolested.patch +Patch0067: 0067-Fix-crash-on-http.patch +Patch0068: 0068-IBM-client-architecture-CAS-reboot-support.patch +Patch0069: 0069-Add-vlan-tag-support.patch +Patch0070: 0070-Add-X-option-to-printf-functions.patch +Patch0071: 0071-DHCP-client-ID-and-UUID-options-added.patch +Patch0072: 0072-Search-for-specific-config-file-for-netboot.patch +Patch0073: 0073-blscfg-add-blscfg-module-to-parse-Boot-Loader-Specif.patch +Patch0074: 0074-Move-bash-completion-script-922997.patch +Patch0075: 0075-for-ppc-reset-console-display-attr-when-clear-screen.patch +Patch0076: 0076-Don-t-write-messages-to-the-screen.patch +Patch0077: 0077-Don-t-print-GNU-GRUB-header.patch +Patch0078: 0078-Don-t-add-to-highlighted-row.patch +Patch0079: 0079-Don-t-add-to-highlighted-row.patch +Patch0080: 0080-Message-string-cleanups.patch +Patch0081: 0081-Fix-border-spacing-now-that-we-aren-t-displaying-it.patch +Patch0082: 0082-Use-the-correct-indentation-for-the-term-help-text.patch +Patch0083: 0083-Indent-menu-entries.patch +Patch0084: 0084-Fix-margins.patch +Patch0085: 0085-Add-support-for-UEFI-operating-systems-returned-by-o.patch +Patch0086: 0086-Disable-GRUB-video-support-for-IBM-power-machines.patch +Patch0087: 0087-Use-2-instead-of-1-for-our-right-hand-margin-so-line.patch +Patch0088: 0088-Use-linux16-when-appropriate-880840.patch +Patch0089: 0089-Enable-pager-by-default.-985860.patch +Patch0090: 0090-F10-doesn-t-work-on-serial-so-don-t-tell-the-user-to.patch +Patch0091: 0091-Don-t-say-GNU-Linux-in-generated-menus.patch +Patch0092: 0092-Don-t-draw-a-border-around-the-menu.patch +Patch0093: 0093-Use-the-standard-margin-for-the-timeout-string.patch +Patch0094: 0094-Fix-grub_script_execute_sourcecode-usage-on-ppc.patch +Patch0095: 0095-Add-.eh_frame-to-list-of-relocations-stripped.patch +Patch0096: 0096-Make-10_linux-work-with-our-changes-for-linux16-and-.patch +Patch0097: 0097-Don-t-print-during-fdt-loading-method.patch +Patch0098: 0098-Honor-a-symlink-when-generating-configuration-by-gru.patch +Patch0099: 0099-Don-t-require-a-password-to-boot-entries-generated-b.patch +Patch0100: 0100-Don-t-emit-Booting-.-message.patch +Patch0101: 0101-Make-CTRL-and-ALT-keys-work-as-expected-on-EFI-syste.patch +Patch0102: 0102-May-as-well-try-it.patch +Patch0103: 0103-use-fw_path-prefix-when-fallback-searching-for-grub-.patch +Patch0104: 0104-Try-mac-guid-etc-before-grub.cfg-on-tftp-config-file.patch +Patch0105: 0105-trim-arp-packets-with-abnormal-size.patch +Patch0106: 0106-Fix-convert-function-to-support-NVMe-devices.patch +Patch0107: 0107-Fix-bad-test-on-GRUB_DISABLE_SUBMENU.patch +Patch0108: 0108-Switch-to-use-APM-Mustang-device-tree-for-hardware-t.patch +Patch0109: 0109-Use-the-default-device-tree-from-the-grub-default-fi.patch +Patch0110: 0110-reopen-SNP-protocol-for-exclusive-use-by-grub.patch +Patch0111: 0111-Reduce-timer-event-frequency-by-10.patch +Patch0112: 0112-always-return-error-to-UEFI.patch BuildRequires: flex bison binutils python -BuildRequires: ncurses-devel xz-devel +BuildRequires: ncurses-devel xz-devel bzip2-devel BuildRequires: freetype-devel libusb-devel %ifarch %{sparc} x86_64 aarch64 # sparc builds need 64 bit glibc-devel - also for 32 bit userland @@ -524,6 +600,9 @@ fi %{_datarootdir}/grub/themes/ %changelog +* Thu Mar 13 2014 Peter Jones - 2.02-0.3 +- Merge in RHEL 7 changes and ARM works in progress. + * Mon Jan 06 2014 Peter Jones - 2.02-0.2 - Update to grub-2.02~beta2