46 lines
1.9 KiB
Diff
46 lines
1.9 KiB
Diff
From dcee38742d6376e3fec6e5997077c681d28d1656 Mon Sep 17 00:00:00 2001
|
|
From: Bin Meng <bmeng.cn@gmail.com>
|
|
Date: Sun, 16 Sep 2018 22:35:28 -0700
|
|
Subject: [PATCH] Makefile: Use -fno-strict-aliasing globally
|
|
|
|
The -fstrict-aliasing option is implicitly enabled at levels -O2,
|
|
-O3, -Os by GCC. This option allows the compiler to assume the
|
|
strictest aliasing rules applicable to the language being compiled.
|
|
For example, the practice of reading from a different union member
|
|
than the one most recently written to (called "type-punning") is
|
|
common. In this case, "type-punning" only works if the memory is
|
|
accessed through the union type, but might not work by taking the
|
|
address, casting the resulting pointer and dereferencing the result,
|
|
which is an undefined behavior per the "strict aliasing rules".
|
|
|
|
GCC's -Wstrict-aliasing (included in -Wall) option does not catch
|
|
all cases, but does attempt to catch the more common pitfalls. So
|
|
there are cases that GCC does not report but the codes are violating
|
|
the "strict aliasing rules".
|
|
|
|
Given lots of codes that may be written to rely on "type-punning",
|
|
and Linux kernel disables it by -fno-strict-aliasing globally, since
|
|
U-Boot currently does this on nds32/riscv/x86 builds only, extend
|
|
this for all architecture builds.
|
|
|
|
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
|
|
Reviewed-by: Tom Rini <trini@konsulko.com>
|
|
Reviewed-by: Simon Glass <sjg@chromium.org>
|
|
---
|
|
Makefile | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/Makefile b/Makefile
|
|
index 752bff499e..14cf1fae33 100644
|
|
--- a/Makefile
|
|
+++ b/Makefile
|
|
@@ -370,7 +370,7 @@ KBUILD_CPPFLAGS := -D__KERNEL__ -D__UBOOT__
|
|
KBUILD_CFLAGS := -Wall -Wstrict-prototypes \
|
|
-Wno-format-security \
|
|
-fno-builtin -ffreestanding $(CSTD_FLAG)
|
|
-KBUILD_CFLAGS += -fshort-wchar
|
|
+KBUILD_CFLAGS += -fshort-wchar -fno-strict-aliasing
|
|
KBUILD_AFLAGS := -D__ASSEMBLY__
|
|
|
|
# Read UBOOTRELEASE from include/config/uboot.release (if it exists)
|