grub/util
Peter Jones ebc825b549 mkimage: avoid copying relocations for sections that won't be copied.
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: Peter Jones <pjones@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
2018-03-05 14:08:09 +01:00
..
bash-completion.d Clean up dangling references to grub-setup. 2013-01-12 13:30:37 +00:00
grub.d Keep the native terminal active when enabling gfxterm 2018-01-29 12:51:03 +01:00
i386/efi Merge mainline into install 2010-09-15 14:46:53 +02:00
ieee1275 ieee1275: Fix segfault in grub-ofpathname 2017-12-06 12:55:55 +01:00
bin2h.c Fix handling of build-time grub-bin2h and grub-mkfont when doing 2013-08-14 10:56:55 +02:00
config.c * util/config.c: Remove trailing newline from distributor in simple 2013-12-14 21:50:36 +01:00
editenv.c Add missing includes. 2013-12-21 13:47:27 +01:00
garbage-gen.c * util/garbage-gen.c: Add missing include of sys/time.h. 2013-11-23 12:42:30 +01:00
getroot.c i386, x86_64, ppc: fix switch fallthrough cases with GCC7 2017-04-04 19:23:55 +03:00
glue-efi.c Build fixes for argp.h with older gcc. 2013-12-21 18:08:25 +01:00
grub-editenv.c Build fixes for argp.h with older gcc. 2013-12-21 18:08:25 +01:00
grub-file.c Fix canonicalize_file_name clash. 2015-03-04 01:00:19 +01:00
grub-fstest.c Fix canonicalize_file_name clash. 2015-03-04 01:00:19 +01:00
grub-gen-asciih.c * util/grub-gen-asciih.c (add_glyph): Fix uninitialised variable. 2014-06-21 20:26:47 +02:00
grub-gen-widthspec.c Fix build with FreeType 2.5.1 2013-11-29 12:19:36 +00:00
grub-glue-efi.c Build fixes for argp.h with older gcc. 2013-12-21 18:08:25 +01:00
grub-install-common.c arm_coreboot: Support grub-mkstandalone. 2017-05-08 21:59:48 +02:00
grub-install.c Make grub-install check for errors from efibootmgr 2018-02-14 18:02:01 +01:00
grub-kbdcomp.in Change -v to -V for version of shell utils. 2016-02-12 15:46:05 +01:00
grub-macbless.c Fix canonicalize_file_name clash. 2015-03-04 01:00:19 +01:00
grub-macho2img.c * util/grub-macho2img.c: Use plain fopen rather than grub_util_fopen. 2013-11-11 22:48:43 +01:00
grub-menulst2cfg.c Add a wrapper for fopen. On unix-like systems just pass-through. On 2013-10-13 20:36:28 +02:00
grub-mkconfig.in Failed config now returns exit code (#1252311) 2016-03-11 17:24:56 +01:00
grub-mkconfig_lib.in grub-mkconfig: Fix detecting .sig files as system images 2017-12-06 12:58:54 +01:00
grub-mkfont.c grub-mkfont: Remove leftover debug statement. 2017-01-31 22:32:21 +01:00
grub-mkimage.c Add support for device-tree-based drivers. 2017-05-08 21:19:59 +02:00
grub-mkimage32.c mkimage: make it easier to run syntax checkers on grub-mkimagexx.c 2018-03-05 13:44:55 +01:00
grub-mkimage64.c mkimage: make it easier to run syntax checkers on grub-mkimagexx.c 2018-03-05 13:44:55 +01:00
grub-mkimagexx.c mkimage: avoid copying relocations for sections that won't be copied. 2018-03-05 14:08:09 +01:00
grub-mklayout.c grub-mklayout: check subscript bounds 2016-01-09 14:13:36 +03:00
grub-mknetdir.c grub-mknetdir: Add support for ARM64 EFI 2016-11-14 19:27:13 +03:00
grub-mkpasswd-pbkdf2.c Build fixes for argp.h with older gcc. 2013-12-21 18:08:25 +01:00
grub-mkrelpath.c Build fixes for argp.h with older gcc. 2013-12-21 18:08:25 +01:00
grub-mkrescue.c Fail if xorriso failed. 2017-08-07 18:08:39 +02:00
grub-mkstandalone.c util/grub-mkstandalone: fix memory leak. 2015-01-26 23:04:09 +03:00
grub-module-verifier.c x86-64: Treat R_X86_64_PLT32 as R_X86_64_PC32 2018-02-23 22:25:30 +01:00
grub-module-verifier32.c Verify modules on build-time rather than failing in runtime. 2015-12-31 13:09:15 +01:00
grub-module-verifier64.c Verify modules on build-time rather than failing in runtime. 2015-12-31 13:09:15 +01:00
grub-module-verifierXX.c arm64: Add support for GOT and PCREL32 relocations. 2017-02-01 21:46:19 +01:00
grub-mount.c i386, x86_64, ppc: fix switch fallthrough cases with GCC7 2017-04-04 19:23:55 +03:00
grub-pe2elf.c remove extra newlines in grub_util_* strings 2015-05-13 09:47:17 +03:00
grub-probe.c grub-probe: fix memory leak 2016-01-16 21:47:28 +03:00
grub-reboot.in Change -v to -V for version of shell utils. 2016-02-12 15:46:05 +01:00
grub-render-label.c Build fixes for argp.h with older gcc. 2013-12-21 18:08:25 +01:00
grub-script-check.c Build fixes for argp.h with older gcc. 2013-12-21 18:08:25 +01:00
grub-set-default.in Change -v to -V for version of shell utils. 2016-02-12 15:46:05 +01:00
grub-setup.c Build fixes for argp.h with older gcc. 2013-12-21 18:08:25 +01:00
grub-syslinux2cfg.c Fix canonicalize_file_name clash. 2015-03-04 01:00:19 +01:00
import_gcry.py fix Mingw W64-32 cross compile failure due to printf redefinition in libintl.h 2014-01-25 21:49:41 +04:00
import_gcrypth.sed Import libgcrypt 1.5.3. 2013-11-07 06:35:50 +01:00
import_unicode.py * util/import_unicode.py: Add missing brackets around string for 2012-03-10 20:47:12 +01:00
misc.c Move file loading functions to grub-emu. 2016-01-05 21:10:27 +01:00
mkimage.c Add support for device-tree-based drivers. 2017-05-08 21:19:59 +02:00
probe.c Fix canonicalize_file_name clash. 2015-03-04 01:00:19 +01:00
render-label.c Fix canonicalize_file_name clash. 2015-03-04 01:00:19 +01:00
resolve.c util/setup: fix grub_util_path_list leak 2016-01-09 13:55:18 +03:00
setup.c sparc64: Add blocklist GPT support for SPARC 2018-02-14 17:42:56 +01:00
setup_bios.c Split grub-setup.c into frontend (grub-setup.c) and backend (setup.c) 2013-10-15 16:16:04 +02:00
setup_sparc.c Split grub-setup.c into frontend (grub-setup.c) and backend (setup.c) 2013-10-15 16:16:04 +02:00
spkmodem-recv.c Improve spkmomdem reliability by adding a separator between bytes. 2013-01-21 14:55:30 +01:00