boot: Ensure ARM UEFI binary does not contain FP/SIMD instructions
authorJames T. Lee <james@james.tl>
Sat, 7 Mar 2020 23:05:34 +0000 (18:05 -0500)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 26 Mar 2020 13:21:41 +0000 (14:21 +0100)
commit869614a5515fd21c7c639cdbf5d96889f4316463
treef2b44fe444ce7390461c813d0cb9ad019f275489
parentc4280c342bbf4fa8da833103482362236c18f835
boot: Ensure ARM UEFI binary does not contain FP/SIMD instructions

ARM toolchains will sometimes optimize otherwise floating-point-free
code with floating point and SIMD instructions.  This was happening with
systemd-bootarm.efi and it was causing U-Boot to crash and reset the
CPU.  U-Boot does not support the ARM VFP floating point coprocessor,
which is an optional piece of hardware anyway [1].

Ensure the compiler does not generate FP/SIMD instructions by supplying
the `-mgeneral-regs-only` option when building for ARM [2].

The other option you often see to solve these problems is
`-msoft-float`, but that changes the ABI and prevents linking with
libgnuefi.

[1] https://lists.denx.de/pipermail/u-boot/2011-February/087736.html
[2] https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html#index-mgeneral-regs-only-1

(cherry picked from commit 1ad6056239b70ce69ea70108cf4e49a05a9c2a1d)
(cherry picked from commit 73678d2307042a45ceb3d7fe2fd182f6f6ec3f2d)
src/boot/efi/meson.build