1. 05 Mar, 2018 6 commits
    • Peter Jones's avatar
      mkimage: avoid copying relocations for sections that won't be copied. · ebc825b5
      Peter Jones authored
      Some versions of gcc include a plugin called "annobin", and in some
      build systems this is enabled by default.  This plugin creates special
      ELF note sections to track which ABI-breaking features are used by a
      binary, as well as a series of relocations to annotate where.
      If grub is compiled with this feature, then when grub-mkimage translates
      the binary to another file format which does not strongly associate
      relocation data with sections (i.e. when platform is *-efi), these
      relocations appear to be against the .text section rather than the
      original note section.  When the binary is loaded by the PE runtime
      loader, hilarity ensues.
      This issue is not necessarily limited to the annobin, but could arise
      any time there are relocations in sections that are not represented in
      grub-mkimage's output.
      This patch seeks to avoid this issue by only including relocations that
      refer to sections which will be included in the final binary.
      As an aside, this should also obviate the need to avoid -funwind-tables,
      -fasynchronous-unwind-tables, and any sections similar to .eh_frame in
      the future.  I've tested it on x86-64-efi with the following gcc command
      line options (as recorded by -grecord-gcc-flags), but I still need to
      test the result on some other platforms that have been problematic in
      the past (especially ARM Aarch64) before I feel comfortable making
      changes to the configure.ac bits:
      GNU C11 7.2.1 20180116 (Red Hat 7.2.1-7) -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow -msoft-float -mno-stack-arg-probe -mcmodel=large -mno-red-zone -m64 -mtune=generic -march=x86-64 -g3 -Os -freg-struct-return -fno-stack-protector -ffreestanding -funwind-tables -fasynchronous-unwind-tables -fno-strict-aliasing -fstack-clash-protection -fno-ident -fplugin=annobin
      Signed-off-by: default avatarPeter Jones <pjones@redhat.com>
      Reviewed-by: default avatarDaniel Kiper <daniel.kiper@oracle.com>
    • Peter Jones's avatar
      mkimage: refactor a bunch of section data into a struct. · 7542af69
      Peter Jones authored
      This basically moves a bunch of the section information we pass around a
      lot into a struct, and passes a pointer to a single one of those
      This shouldn't change the binary file output or the "grub-mkimage -v"
      output in any way.
      Signed-off-by: default avatarPeter Jones <pjones@redhat.com>
      Reviewed-by: default avatarDaniel Kiper <daniel.kiper@oracle.com>
    • Peter Jones's avatar
      mkimage: make locate_sections() set up vaddresses as well. · e30de949
      Peter Jones authored
      This puts both kinds of address initialization at the same place, and also lets
      us iterate through the section list one time fewer.
      Signed-off-by: default avatarPeter Jones <pjones@redhat.com>
      Reviewed-by: default avatarDaniel Kiper <daniel.kiper@oracle.com>
    • Peter Jones's avatar
      mkimage: rename a couple of things to be less confusing later. · 594ac315
      Peter Jones authored
      This renames some things:
      - the "strtab" and "strtab_section" in relocate_symbols are changed to "symtab"
        instead, so as to be less confusing when "strtab" is moved to a struct in a
        later patch.
      - The places where we pass section_vaddresses to functions are changed to also
        be called section_vaddresses"inside those functions, so I get less confused
        when I put addresses and vaddresses in a struct in a later patch.
      Signed-off-by: default avatarPeter Jones <pjones@redhat.com>
      Reviewed-by: default avatarDaniel Kiper <daniel.kiper@oracle.com>
    • Peter Jones's avatar
      mkimage: make it easier to run syntax checkers on grub-mkimagexx.c · 352868d1
      Peter Jones authored
      This makes it so you can treat grub-mkimagexx.c as a file you can build
      directly, so syntax checkers like vim's "syntastic" plugin, which uses
      "gcc -x c -fsyntax-only" to build it, will work.
      One still has to do whatever setup is required to make it pick the right
      include dirs, which -W options we use, etc., but this makes it so you
      can do the checking on the file you're editing, rather than on a
      different file.
      Signed-off-by: default avatarPeter Jones <pjones@redhat.com>
      Reviewed-by: default avatarDaniel Kiper <daniel.kiper@oracle.com>
    • Peter Jones's avatar
      aout.h: Fix missing include. · e1ead149
      Peter Jones authored
      grub_aout_load() has a grub_file_t parameter, and depending on what order
      includes land in, it's sometimes not defined.  This patch explicitly adds
      file.h to aout.h so that it will always be defined.
      Signed-off-by: default avatarPeter Jones <pjones@redhat.com>
      Reviewed-by: default avatarDaniel Kiper <daniel.kiper@oracle.com>
  2. 26 Feb, 2018 1 commit
  3. 23 Feb, 2018 12 commits
  4. 14 Feb, 2018 3 commits
    • Steve McIntyre's avatar
      Make grub-install check for errors from efibootmgr · 6400613a
      Steve McIntyre authored
      Code is currently ignoring errors from efibootmgr, giving users
      clearly bogus output like:
              Setting up grub-efi-amd64 (2.02~beta3-4) ...
              Installing for x86_64-efi platform.
              Could not delete variable: No space left on device
              Could not prepare Boot variable: No space left on device
              Installation finished. No error reported.
      and then potentially unbootable systems. If efibootmgr fails, grub-install
      should know that and report it!
      We've been using similar patch in Debian now for some time, with no ill effects.
      Signed-off-by: default avatarSteve McIntyre <93sam@debian.org>
      Reviewed-by: default avatarDaniel Kiper <daniel.kiper@oracle.com>
    • Eric Snowberg's avatar
      sparc64: fix OF path names for sun4v systems · d85c76b5
      Eric Snowberg authored
      Fix the Open Firmware (OF) path property for sun4v SPARC systems.
      These platforms do not have a /sas/ within their path. Over time
      different OF addressing schemes have been supported. There
      is no generic addressing scheme that works across every HBA.
      It looks that this functionality will not work if you try to cross-install
      SPARC GRUB2 binary using e.g. x86 grub-install. By default it should work.
      However, we will also have other issues here, like lack of access to OF
      firmware/paths, which make such configs unusable anyway. So, let's leave
      this patch as is for time being. If somebody cares then he/she should fix
      the issue(s) at some point.
      Signed-off-by: default avatarEric Snowberg <eric.snowberg@oracle.com>
      Signed-off-by: default avatarDaniel Kiper <daniel.kiper@oracle.com>
      Reviewed-by: default avatarDaniel Kiper <daniel.kiper@oracle.com>
    • Eric Snowberg's avatar
      sparc64: Add blocklist GPT support for SPARC · 69e0a67b
      Eric Snowberg authored
      Add block-list GPT support for SPARC.  The OBP "load" and "boot" methods
      are partition aware and neither command can see the partition table. Also
      neither command can address the entire physical disk. When the install
      happens, grub generates the block-list entries based on the beginning of the
      physical disk, not the beginning of the partition. This patch fixes the
      block-list entries so they match what OBP expects during boot for a GPT disk.
      T5 and above now supports GPT as well as VTOC.
      This patch has been tested on T5-2 and newer SPARC systems.
      Signed-off-by: default avatarEric Snowberg <eric.snowberg@oracle.com>
      Reviewed-by: default avatarDaniel Kiper <daniel.kiper@oracle.com>
  5. 29 Jan, 2018 2 commits
    • Stefan Fritsch's avatar
      ahci: Improve error handling · 566a03a6
      Stefan Fritsch authored
      Check the error bits in the interrupt status register. According to the
      AHCI 1.2 spec, "Interrupt sources that are disabled (‘0’) are still
      reflected in the status registers.", so this should work even though
      grub uses polling
      This fixes the following problem on a Fujitsu E744 laptop:
      Sometimes there is a very long delay (up to several minutes) when
      booting from hard disk. It seems accessing the DVD drive (which has no
      disk inserted) sometimes fails with some errors, which leads to each
      access being stalled until the 20s timeout triggers. This seems to
      happen when grub is trying to read filesystem/partition data.
      The problem is that the command_issue bit that is checked in the loop is
      only reset if the "HBA receives a FIS which clears the BSY, DRQ, and ERR
      bits for the command", but the ERR bit is never cleared. Therefore
      command_issue is never reset and grub waits for the timeout.
      The relevant bit in our case is the Task File Error Status (TFES), which
      is equivalent to the ERR bit 0 in tfd. But this patch also checks
      the other error bits except for the "Interface non-fatal error status"
      Signed-off-by: default avatarStefan Fritsch <fritsch@genua.de>
      Reviewed-by: default avatarDaniel Kiper <daniel.kiper@oracle.com>
    • dann frazier's avatar
      Keep the native terminal active when enabling gfxterm · 52ef7b23
      dann frazier authored
      grub-mkconfig will set GRUB_TERMINAL_OUTPUT to "gfxterm" unless the user
      has overridden it. On EFI systems, this will stop output from going to the
      default "console" terminal. When the EFI fw console is configured to output to
      both serial and video, this will cause GRUB to only display on video - while
      continuing to accept input from both video and serial.
      Instead of switching from "console" to "gfxterm", let's output to both.
      Reviewed-by: default avatarDaniel Kiper <daniel.kiper@oracle.com>
  6. 06 Dec, 2017 3 commits
  7. 28 Nov, 2017 1 commit
  8. 24 Nov, 2017 1 commit
  9. 06 Oct, 2017 1 commit
  10. 07 Sep, 2017 5 commits
    • Alexander Graf's avatar
      efi: Free malloc regions on exit · 92bfc33d
      Alexander Graf authored
      When we exit grub, we don't free all the memory that we allocated earlier
      for our heap region. This can cause problems with setups where you try
      to descend the boot order using "exit" entries, such as PXE -> HD boot
      Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
      Reviewed-by: default avatarDaniel Kiper <daniel.kiper@oracle.com>
    • Alexander Graf's avatar
      efi: Move grub_reboot() into kernel · 0ba90a7f
      Alexander Graf authored
      The reboot function calls machine_fini() and then reboots the system.
      Currently it lives in lib/ which means it gets compiled into the
      reboot module which lives on the heap.
      In a following patch, I want to free the heap on machine_fini()
      though, so we would free the memory that the code is running in. That
      obviously breaks with smarter UEFI implementations.
      So this patch moves it into the core. That way we ensure that all
      code running after machine_fini() in the UEFI case is running from
      memory that got allocated (and gets deallocated) by the UEFI core.
      Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
      Reviewed-by: default avatarDaniel Kiper <daniel.kiper@oracle.com>
    • Konrad Rzeszutek Wilk's avatar
      Use grub-file to figure out whether multiboot2 should be used for Xen.gz · b4d709b6
      Konrad Rzeszutek Wilk authored
      The multiboot2 is much more preferable than multiboot. Especiall
      if booting under EFI where multiboot does not have the functionality
      to pass ImageHandler.
      Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      Reviewed-by: default avatarDaniel Kiper <daniel.kiper@oracle.com>
    • Konrad Rzeszutek Wilk's avatar
      Fix util/grub.d/20_linux_xen.in: Add xen_boot command support for aarch64 · a8e0f1ad
      Konrad Rzeszutek Wilk authored
      Commit d33045ce introduced
      the support for this, but it does not work under x86 (as it stops
      20_linux_xen from running).
      The 20_linux_xen is run under a shell and any exits from within it:
      (For example on x86):
      + /usr/bin/grub2-file --is-arm64-efi /boot/xen-4.9.0.gz
      [root@tst063 grub]# echo $?
      will result in 20_linux_xen exiting without continuing
      and also causing grub2-mkconfig to stop processing.
      As in:
       [root@tst063 grub]# ./grub-mkconfig | tail
       Generating grub configuration file ...
       Found linux image: /boot/vmlinuz-4.13.0-0.rc5.git1.1.fc27.x86_64
       Found initrd image: /boot/initramfs-4.13.0-0.rc5.git1.1.fc27.x86_64.img
       Found linux image: /boot/vmlinuz-0-rescue-ec082ee24aea41b9b16aca52a6d10cc2
       Found initrd image: /boot/initramfs-0-rescue-ec082ee24aea41b9b16aca52a6d10cc2.img
       		echo	'Loading Linux 0-rescue-ec082ee24aea41b9b16aca52a6d10cc2 ...'
       		linux	/vmlinuz-0-rescue-ec082ee24aea41b9b16aca52a6d10cc2 root=/dev/mapper/fedora_tst063-root ro single
       		echo	'Loading initial ramdisk ...'
       		initrd	/initramfs-0-rescue-ec082ee24aea41b9b16aca52a6d10cc2.img
       ### END /usr/local/etc/grub.d/10_linux ###
       ### BEGIN /usr/local/etc/grub.d/20_linux_xen ###
       root@tst063 grub]#
      And no more.
      This patch wraps the invocation of grub-file to be a in subshell
      and to process the return value in a conditional. That fixes
      the issue.
      RH-BZ 1486002: grub2-mkconfig does not work if xen.gz is installed.
      CC: Fu Wei <fu.wei@linaro.org>
      Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      Reviewed-by: default avatarDaniel Kiper <daniel.kiper@oracle.com>
    • Vladimir Serbinenko's avatar
      Fix compilation for x86_64-efi. · 78d2b81b
      Vladimir Serbinenko authored
  11. 05 Sep, 2017 1 commit
  12. 30 Aug, 2017 4 commits