From fd6410c6f9d9643866b8596eea85acf5e7e1fd2c Mon Sep 17 00:00:00 2001 From: Julien Olivain Date: Tue, 22 Aug 2023 21:23:14 +0200 Subject: [PATCH] package/kexec: fix link error when BR2_OPTIMIZE_0=y When BR2_OPTIMIZE_0, -O0 is passed in compiler CFLAGS. This means no code optimization will be performed. kexec code uses a trick to detect unaligned accesses at link time which needs at least dead-code-removal to work. See put/get_unaligned() macros in kexec/kexec.h. This code was re-enabled in upstream commit [1]. This commit sets at least -O1 (which include the sufficient dead-code-removal) when BR2_OPTIMIZE_0=y, to fix those issues. Fixes: - http://autobuild.buildroot.org/results/8f8/8f8532f1dfbd71e52c51c00118934af9fa45e7cb - http://autobuild.buildroot.org/results/528/528fd7baf9b0ad5549d22ec8e0623c5fa1f2d117 - http://autobuild.buildroot.org/results/499/499115439680adfb4b40042468e5bbb65d91ce6c - ...and many others [1] https://git.kernel.org/pub/scm/utils/kernel/kexec/kexec-tools.git/commit/?id=0723defb5308ac7fce296f8b596bff4df6803f01 Signed-off-by: Julien Olivain Signed-off-by: Arnout Vandecappelle (cherry picked from commit a411588b582ad6a0c8573ec9f59f737473d69bee) Signed-off-by: Peter Korsgaard --- package/kexec/kexec.mk | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/package/kexec/kexec.mk b/package/kexec/kexec.mk index df14b2d711..1fd8c0f0ab 100644 --- a/package/kexec/kexec.mk +++ b/package/kexec/kexec.mk @@ -16,6 +16,14 @@ KEXEC_SELINUX_MODULES = kdump # Makefile expects $STRIP -o to work, so needed for !BR2_STRIP_strip KEXEC_MAKE_OPTS = STRIP="$(TARGET_CROSS)strip" +# kexec requires at least -O1 optimization level. Its code uses a +# trick to detect unaligned accesses at link time which needs at least +# dead-code-removal to work. See put/get_unaligned() macros in +# kexec/kexec.h +ifeq ($(BR2_OPTIMIZE_0),y) +KEXEC_CONF_ENV += CFLAGS="$(TARGET_CFLAGS) -O1" +endif + ifeq ($(BR2_PACKAGE_KEXEC_ZLIB),y) KEXEC_CONF_OPTS += --with-zlib KEXEC_DEPENDENCIES += zlib