From b65b645183ae9135edf43084ab1a4ec353a591bb Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Fri, 16 Mar 2018 16:41:23 -0400 Subject: [PATCH] Rebased to newer upstream for fedora-28 Signed-off-by: Peter Jones --- 0210-make-better-backtraces.patch | 80 ++++-- ...w-our-startup-message-if-debug-is-se.patch | 2 +- ...-some-minor-include-path-weirdnesses.patch | 2 +- ...it-possible-to-enabled-build-id-sha1.patch | 2 +- ...f-grub_dprintf-without-the-file-line.patch | 2 +- ...dprintf-that-tells-us-load-addresses.patch | 2 +- 0216-Static.patch | 265 ++++++++++++++++++ grub.patches | 1 + grub2.spec | 5 +- 9 files changed, 325 insertions(+), 36 deletions(-) create mode 100644 0216-Static.patch diff --git a/0210-make-better-backtraces.patch b/0210-make-better-backtraces.patch index dcc1e17..e71be4c 100644 --- a/0210-make-better-backtraces.patch +++ b/0210-make-better-backtraces.patch @@ -1,4 +1,4 @@ -From 1954221a4b99a4f83500b4a52e41e68b7ca7c4cc Mon Sep 17 00:00:00 2001 +From 775dacceb8acc4036737080040f592f48daeb6e8 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Mon, 6 Nov 2017 18:31:56 -0500 Subject: [PATCH 210/216] make better backtraces @@ -8,16 +8,16 @@ Signed-off-by: Peter Jones grub-core/Makefile.core.def | 15 ++-- grub-core/{lib => commands}/backtrace.c | 2 +- grub-core/gdb/cstub.c | 1 - - grub-core/kern/arm64/backtrace.c | 75 ++++++++++++++++++++ + grub-core/kern/arm64/backtrace.c | 94 +++++++++++++++++++++++++ grub-core/kern/backtrace.c | 95 +++++++++++++++++++++++++ grub-core/kern/dl.c | 45 ++++++++++++ - grub-core/kern/i386/backtrace.c | 120 ++++++++++++++++++++++++++++++++ + grub-core/kern/i386/backtrace.c | 121 ++++++++++++++++++++++++++++++++ grub-core/kern/i386/pc/init.c | 4 +- grub-core/kern/ieee1275/init.c | 1 - grub-core/kern/misc.c | 13 ++-- grub-core/kern/mm.c | 6 +- - grub-core/lib/arm64/backtrace.c | 62 ----------------- - grub-core/lib/i386/backtrace.c | 78 --------------------- + grub-core/lib/arm64/backtrace.c | 62 ---------------- + grub-core/lib/i386/backtrace.c | 78 -------------------- include/grub/backtrace.h | 10 ++- include/grub/dl.h | 2 + include/grub/kernel.h | 3 + @@ -28,7 +28,7 @@ Signed-off-by: Peter Jones grub-core/kern/ia64/efi/startup.S | 3 +- grub-core/kern/sparc64/ieee1275/crt0.S | 3 +- grub-core/Makefile.am | 1 + - 23 files changed, 382 insertions(+), 166 deletions(-) + 23 files changed, 402 insertions(+), 166 deletions(-) rename grub-core/{lib => commands}/backtrace.c (98%) create mode 100644 grub-core/kern/arm64/backtrace.c create mode 100644 grub-core/kern/backtrace.c @@ -109,10 +109,10 @@ index b64acd70fee..99281472d36 100644 diff --git a/grub-core/kern/arm64/backtrace.c b/grub-core/kern/arm64/backtrace.c new file mode 100644 -index 00000000000..70de1b29414 +index 00000000000..019c6fdfef2 --- /dev/null +++ b/grub-core/kern/arm64/backtrace.c -@@ -0,0 +1,75 @@ +@@ -0,0 +1,94 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. @@ -139,34 +139,53 @@ index 00000000000..70de1b29414 +#include +#include + ++#define MAX_STACK_FRAME 102400 ++ ++struct fplr ++{ ++ void *lr; ++ struct fplr *fp; ++}; ++ +void +grub_backtrace_pointer (void *frame, unsigned int skip) +{ -+ do ++ unsigned int x = 0; ++ struct fplr *fplr = (struct fplr *)frame; ++ ++ while (fplr) + { + const char *name = NULL; + char *addr = NULL; + -+ void *ret = __builtin_return_address (skip); -+ frame = __builtin_frame_address (skip); -+ if (ret) -+ ret = __builtin_extract_return_addr (ret); ++ grub_dprintf("backtrace", "fp is %p next_fp is %p\n", ++ fplr, fplr->fp); + -+ grub_dprintf ("backtrace", "frame address:%p return address:%p\n", frame, ret); -+ if (!ret) -+ break; ++ if (x >= skip) ++ { ++ name = grub_get_symbol_by_addr (fplr->lr, 1); ++ if (name) ++ addr = grub_resolve_symbol (name); ++ grub_backtrace_print_address (fplr->lr); + -+ name = grub_get_symbol_by_addr (ret, 1); -+ if (name) -+ addr = grub_resolve_symbol (name); -+ grub_backtrace_print_address (ret); ++ if (addr && addr != fplr->lr) ++ grub_printf (" %s() %p+%p \n", name ? name : "unknown", addr, ++ (void *)((grub_uint64_t)fplr->lr - (grub_uint64_t)addr)); ++ else ++ grub_printf(" %s() %p \n", name ? name : "unknown", addr); + -+ if (addr && addr != ret) -+ grub_printf (" %s() %p+%p \n", name ? name : "unknown", addr, -+ (char *)((char *)ret - addr)); -+ else -+ grub_printf(" %s() %p \n", name ? name : "unknown", addr); -+ } while (frame); ++ } ++ ++ x += 1; ++ ++ if (fplr->fp < fplr || ++ (grub_uint64_t)fplr->fp - (grub_uint64_t)fplr > MAX_STACK_FRAME || ++ fplr->fp == fplr) ++ { ++ break; ++ } ++ fplr = fplr->fp; ++ } +} + +asm ("\t.global \"_text\"\n" @@ -186,7 +205,7 @@ index 00000000000..70de1b29414 + grub_printf ("Backtrace (.text %p .data %p):\n", + (void *)_text, (void *)_data); + skip += 1; -+ grub_backtrace_pointer(__builtin_frame_address(skip), skip); ++ grub_backtrace_pointer(__builtin_frame_address(0), skip); +} diff --git a/grub-core/kern/backtrace.c b/grub-core/kern/backtrace.c new file mode 100644 @@ -354,10 +373,10 @@ index 621070918d4..5028d157c46 100644 i++, s = (Elf_Shdr *) ((char *) s + e->e_shentsize)) diff --git a/grub-core/kern/i386/backtrace.c b/grub-core/kern/i386/backtrace.c new file mode 100644 -index 00000000000..f3bb839e1d7 +index 00000000000..c4f7e3f0e90 --- /dev/null +++ b/grub-core/kern/i386/backtrace.c -@@ -0,0 +1,120 @@ +@@ -0,0 +1,121 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2009 Free Software Foundation, Inc. @@ -463,7 +482,8 @@ index 00000000000..f3bb839e1d7 + skip += 1; +#if defined (__x86_64__) + asm volatile ("movq %%rbp, %%rdi\n" -+ "movl %0, %%rsi\n" ++ "movq 0, %%rsi\n" ++ "movl %0, %%esi\n" + "call " EXT_C("grub_backtrace_pointer") + : + : "r" (skip)); diff --git a/0211-normal-don-t-draw-our-startup-message-if-debug-is-se.patch b/0211-normal-don-t-draw-our-startup-message-if-debug-is-se.patch index 9c3c9eb..eea8d96 100644 --- a/0211-normal-don-t-draw-our-startup-message-if-debug-is-se.patch +++ b/0211-normal-don-t-draw-our-startup-message-if-debug-is-se.patch @@ -1,4 +1,4 @@ -From 82ae897af2691f21f500fb7bbee11263159236f0 Mon Sep 17 00:00:00 2001 +From cc1566933cbc2d8d56aa77ab1ca8a15392ee0d42 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Thu, 9 Nov 2017 15:58:52 -0500 Subject: [PATCH 211/216] normal: don't draw our startup message if debug is diff --git a/0212-Work-around-some-minor-include-path-weirdnesses.patch b/0212-Work-around-some-minor-include-path-weirdnesses.patch index 85aa01a..749ad6b 100644 --- a/0212-Work-around-some-minor-include-path-weirdnesses.patch +++ b/0212-Work-around-some-minor-include-path-weirdnesses.patch @@ -1,4 +1,4 @@ -From dcf64d8da777158cf00dec1b663f436f3b6bed9b Mon Sep 17 00:00:00 2001 +From 1829abfbbb0544a06973eaa76659a282aae8b32d Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Fri, 16 Mar 2018 13:28:57 -0400 Subject: [PATCH 212/216] Work around some minor include path weirdnesses diff --git a/0213-Make-it-possible-to-enabled-build-id-sha1.patch b/0213-Make-it-possible-to-enabled-build-id-sha1.patch index 28fdfa2..d3d2db4 100644 --- a/0213-Make-it-possible-to-enabled-build-id-sha1.patch +++ b/0213-Make-it-possible-to-enabled-build-id-sha1.patch @@ -1,4 +1,4 @@ -From cdf3041c33ca079b254f24c0e9262abe1efe0a57 Mon Sep 17 00:00:00 2001 +From 8e15f2dce2f8b2bdcad2d35da4d068e8af44eb1d Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Thu, 25 Jun 2015 15:41:06 -0400 Subject: [PATCH 213/216] Make it possible to enabled --build-id=sha1 diff --git a/0214-Add-grub_qdprintf-grub_dprintf-without-the-file-line.patch b/0214-Add-grub_qdprintf-grub_dprintf-without-the-file-line.patch index 5420245..fe60887 100644 --- a/0214-Add-grub_qdprintf-grub_dprintf-without-the-file-line.patch +++ b/0214-Add-grub_qdprintf-grub_dprintf-without-the-file-line.patch @@ -1,4 +1,4 @@ -From d94879fe76b6b8199afda00c76eafcce4769e1ba Mon Sep 17 00:00:00 2001 +From 29216d4ad0f75587c42274ebd63b8526fa9e815c Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Sun, 28 Jun 2015 13:09:58 -0400 Subject: [PATCH 214/216] Add grub_qdprintf() - grub_dprintf() without the diff --git a/0215-Make-a-gdb-dprintf-that-tells-us-load-addresses.patch b/0215-Make-a-gdb-dprintf-that-tells-us-load-addresses.patch index 782ec36..c219c0d 100644 --- a/0215-Make-a-gdb-dprintf-that-tells-us-load-addresses.patch +++ b/0215-Make-a-gdb-dprintf-that-tells-us-load-addresses.patch @@ -1,4 +1,4 @@ -From 0f79e0c4c498ea5b92e5475cb8845d48369b2169 Mon Sep 17 00:00:00 2001 +From bc8e33848ee9888fd8b3aa61b4d3ecf9094356aa Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Thu, 25 Jun 2015 15:11:36 -0400 Subject: [PATCH 215/216] Make a "gdb" dprintf that tells us load addresses. diff --git a/0216-Static.patch b/0216-Static.patch new file mode 100644 index 0000000..b4a6c06 --- /dev/null +++ b/0216-Static.patch @@ -0,0 +1,265 @@ +From 808b17c8d8b5a4b4744a7fa0bfe59474ca1509f3 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Fri, 16 Mar 2018 16:22:20 -0400 +Subject: [PATCH 216/216] Static + +--- + Makefile.util.def | 7 +++ + util/grub-mkconfig_lib.in | 46 ++++++++++++++++ + util/grub-set-uuids.in | 134 ++++++++++++++++++++++++++++++++++++++++++++++ + util/grub.d/10_linux.in | 20 ++++--- + 4 files changed, 199 insertions(+), 8 deletions(-) + create mode 100644 util/grub-set-uuids.in + +diff --git a/Makefile.util.def b/Makefile.util.def +index fe392c24351..bbc38b894ad 100644 +--- a/Makefile.util.def ++++ b/Makefile.util.def +@@ -1348,6 +1348,13 @@ script = { + installdir = sbin; + }; + ++script = { ++ name = grub-set-uuids; ++ common = util/grub-set-uuids.in; ++ mansection = 8; ++ installdir = sbin; ++}; ++ + program = { + name = grub-glue-efi; + mansection = 1; +diff --git a/util/grub-mkconfig_lib.in b/util/grub-mkconfig_lib.in +index 70dc8d57e92..80674ef714d 100644 +--- a/util/grub-mkconfig_lib.in ++++ b/util/grub-mkconfig_lib.in +@@ -128,6 +128,52 @@ EOF + fi + } + ++add_device_modules () ++{ ++ local device=$1 && shift ++ ++ old_ifs="$IFS" ++ IFS=' ++' ++ partmap="`"${grub_probe}" --device ${device} --target=partmap`" ++ for module in ${partmap} ; do ++ case "${module}" in ++ netbsd | openbsd) ++ echo "insmod part_bsd";; ++ *) ++ echo "insmod part_${module}";; ++ esac ++ done ++ ++ # Abstraction modules aren't auto-loaded. ++ abstraction="`"${grub_probe}" --device ${device} --target=abstraction`" ++ for module in ${abstraction} ; do ++ echo "insmod ${module}" ++ done ++ ++ fs="`"${grub_probe}" --device ${device} --target=fs`" ++ for module in ${fs} ; do ++ echo "insmod ${module}" ++ done ++} ++ ++get_device_uuid () ++{ ++ local device=$1 && shift ++ if [ "$#" -gt 0 ]; then ++ local variable=$1 && shift ++ else ++ local variable=root ++ fi ++ old_ifs="$IFS" ++ IFS=' ++' ++ ++ fs_uuid="`"${grub_probe}" --device ${device} --target=fs_uuid 2> /dev/null`" ++ IFS="$old_ifs" ++ echo "$fs_uuid" ++} ++ + prepare_grub_to_access_device () + { + local device=$1 && shift +diff --git a/util/grub-set-uuids.in b/util/grub-set-uuids.in +new file mode 100644 +index 00000000000..72c239b4ef5 +--- /dev/null ++++ b/util/grub-set-uuids.in +@@ -0,0 +1,134 @@ ++#! /bin/sh ++# ++# Set a default boot entry for GRUB. ++# Copyright (C) 2004,2009 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 . ++ ++# Initialize some variables. ++prefix=@prefix@ ++exec_prefix=@exec_prefix@ ++bindir=@bindir@ ++sysconfdir="@sysconfdir@" ++PACKAGE_NAME=@PACKAGE_NAME@ ++PACKAGE_VERSION=@PACKAGE_VERSION@ ++datarootdir="@datarootdir@" ++datadir="@datadir@" ++if [ "x$pkgdatadir" = x ]; then ++ pkgdatadir="${datadir}/@PACKAGE@" ++fi ++ ++self=`basename $0` ++ ++grub_editenv=${bindir}/@grub_editenv@ ++bootdir=`echo "/@bootdirname@" | sed 's,//*,/,g'` ++grubdir=`echo "/@bootdirname@/@grubdirname@" | sed 's,//*,/,g'` ++grubenv="" ++ ++export TEXTDOMAIN=@PACKAGE@ ++export TEXTDOMAINDIR="@localedir@" ++ ++# Usage: usage ++# Print the usage. ++usage () { ++ gettext_printf "Usage: %s [OPTION]\n" "$self" ++ gettext "Set the boot and root UUIDs for GRUB."; echo ++ echo ++ print_option_help "-h, --help" "$(gettext "print this message and exit")" ++ print_option_help "-V, --version" "$(gettext "print the version information and exit")" ++ dirmsg="$(gettext_printf "expect GRUB images under the directory DIR/%s instead of the %s directory" "@grubdirname@" "$grubdir")" ++ print_option_help "--boot-directory=$(gettext "DIR")" "$dirmsg" ++ print_option_help "--grub-environment=$(gettext "FILE")" "${grubdir}/grubenv" ++ #echo ++ #gettext "Report bugs to ."; echo ++} ++ ++argument () { ++ opt=$1 ++ shift ++ ++ if test $# -eq 0; then ++ gettext_printf "%s: option requires an argument -- \`%s'\n" "$self" "$opt" 1>&2 ++ exit 1 ++ fi ++ echo $1 ++} ++ ++# Check the arguments. ++while test $# -gt 0 ++do ++ option=$1 ++ shift ++ ++ case "$option" in ++ -h | --help) ++ usage ++ exit 0 ;; ++ -V | --version) ++ echo "$self (${PACKAGE_NAME}) ${PACKAGE_VERSION}" ++ exit 0 ;; ++ ++# Accept for compatibility ++ --root-directory) ++ rootdir=`argument $option "$@"`; shift ;; ++ --root-directory=*) ++ rootdir=`echo "$option" | sed 's/--root-directory=//'` ;; ++ ++ --boot-directory) ++ bootdir=`argument $option "$@"`; shift;; ++ --boot-directory=*) ++ bootdir=`echo "$option" | sed 's/--boot-directory=//'` ;; ++ ++ --grub-environment) ++ grubenv=`argument $option "$@"`; shift;; ++ --grub-environment=*) ++ grubenv=`echo "$option" | sed 's/--grub-environment=//'` ;; ++ ++ *) ++ gettext_printf "Unrecognized option \`%s'\n" "$option" 1>&2 ++ usage ++ exit 1 ++ ;; ++ esac ++done ++ ++if [ -z "$bootdir" ]; then ++ # Default bootdir if bootdir not initialized. ++ bootdir=/@bootdirname@ ++ ++ if [ -n "$rootdir" ] ; then ++ # Initialize bootdir if rootdir was initialized. ++ bootdir=${rootdir}/@bootdirname@ ++ fi ++fi ++ ++grubdir=`echo "${bootdir}/@grubdirname@" | sed 's,//*,/,g'` ++ ++if [ -z "$grubenv" ]; then ++ grubenv="${grubdir}/grubenv" ++fi ++ ++# Device containing our /boot partition. Usually the same as GRUB_DEVICE. ++GRUB_DEVICE_BOOT="`${grub_probe} --target=device /boot`" ++GRUB_DEVICE_BOOT_UUID_GENERATED="`${grub_probe} --device ${GRUB_DEVICE_BOOT} --target=fs_uuid 2> /dev/null`" || true ++ ++# Device containing our /boot/efi partition. Usually not the same as GRUB_DEVICE. ++GRUB_DEVICE_BOOT_EFI="`${grub_probe} --target=device /boot/efi`" ++GRUB_DEVICE_BOOT_EFI_UUID_GENERATED="`${grub_probe} --device ${GRUB_DEVICE_BOOT_EFI} --target=fs_uuid 2> /dev/null`" || true ++ ++$grub_editenv "${grubenv}" set "bootuuid=${GRUB_DEVICE_BOOT_EFI_UUID_GENERATED}" ++$grub_editenv "${grubenv}" set "rootuuid=${GRUB_DEVICE_BOOT_UUID_GENERATED}" ++ ++# Bye. ++exit 0 +diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in +index f5daefb9d24..232f417d3e6 100644 +--- a/util/grub.d/10_linux.in ++++ b/util/grub.d/10_linux.in +@@ -129,17 +129,21 @@ linux_entry () + + if [ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]; then + if [ x$dirname = x/ ]; then +- if [ -z "${prepare_root_cache}" ]; then +- prepare_grub_to_access_device ${GRUB_DEVICE} +- fi ++ add_device_modules "${GRUB_DEVICE}" ++ uuid="$(get_device_uuid "${GRUB_DEVICE}")" ++ ${grub_editenv} - set rootuuid="${uuid}" + else +- if [ -z "${prepare_boot_cache}" ]; then +- prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} +- fi ++ add_device_modules "${GRUB_DEVICE_BOOT}" ++ uuid="$(get_device_uuid "${GRUB_DEVICE_BOOT}")" ++ ${grub_editenv} - set rootuuid="${uuid}" + fi ++ if [ -d /sys/firmware/efi/efivars ]; then ++ bootefi_device="`${grub_probe} --target=device /boot/efi/`" ++ add_device_modules ${bootefi_device} + +- bootefi_device="`${grub_probe} --target=device /boot/efi/`" +- prepare_grub_to_access_device ${bootefi_device} boot ++ uuid="$(get_device_uuid "${bootefi_device}")" ++ ${grub_editenv} - set bootuuid="${uuid}" ++ fi + + cat << EOF + insmod blscfg +-- +2.15.0 + diff --git a/grub.patches b/grub.patches index be8a143..799b1ef 100644 --- a/grub.patches +++ b/grub.patches @@ -213,3 +213,4 @@ Patch0212: 0212-Work-around-some-minor-include-path-weirdnesses.patch Patch0213: 0213-Make-it-possible-to-enabled-build-id-sha1.patch Patch0214: 0214-Add-grub_qdprintf-grub_dprintf-without-the-file-line.patch Patch0215: 0215-Make-a-gdb-dprintf-that-tells-us-load-addresses.patch +Patch0216: 0216-Static.patch diff --git a/grub2.spec b/grub2.spec index 4398393..5a243e6 100644 --- a/grub2.spec +++ b/grub2.spec @@ -7,7 +7,7 @@ Name: grub2 Epoch: 1 Version: 2.02 -Release: 28%{?dist} +Release: 29%{?dist} Summary: Bootloader with support for Linux, Multiboot and more Group: System Environment/Base License: GPLv3+ @@ -452,6 +452,9 @@ fi %endif %changelog +* Fri Mar 16 2018 pjones - 1:2.02-29 +- Rebased to newer upstream for fedora-28 + * Fri Mar 16 2018 Peter Jones - 2.02-28 - Install kernel-install scripts. (javierm) - Add grub2-switch-to-blscfg