summaryrefslogtreecommitdiff
path: root/src/boot
diff options
context:
space:
mode:
authorJames T. Lee <james@james.tl>2020-03-07 18:05:34 -0500
committerYu Watanabe <watanabe.yu+github@gmail.com>2020-03-08 15:21:00 +0900
commit1ad6056239b70ce69ea70108cf4e49a05a9c2a1d (patch)
treed22796da193e5f1f887433b90369f436ad004cf0 /src/boot
parenta834cb52473f82be40b430425635f963ecf05297 (diff)
downloadsystemd-1ad6056239b70ce69ea70108cf4e49a05a9c2a1d.tar.gz
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
Diffstat (limited to 'src/boot')
-rw-r--r--src/boot/efi/meson.build2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
index c1fe04597b..ed81cefcd5 100644
--- a/src/boot/efi/meson.build
+++ b/src/boot/efi/meson.build
@@ -155,6 +155,8 @@ if have_gnu_efi
elif efi_arch == 'ia32'
compile_args += ['-mno-sse',
'-mno-mmx']
+ elif efi_arch == 'arm'
+ compile_args += ['-mgeneral-regs-only']
endif
if get_option('werror') == true
compile_args += ['-Werror']