summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2021-07-01 17:53:26 -0400
committerTom Rini <trini@konsulko.com>2021-07-01 17:53:26 -0400
commit03b61ffe5a780d6e8301df16e4e60b3dcd1d0b66 (patch)
treebd64c71036641c1ff8ad2d770f2f84469765f0ab
parent6b69f15fd6386770b6fe782a4a8b4ce9243e2327 (diff)
parentee3a46a437315cbbbc746890c2cf8eea5dd7f1e7 (diff)
downloadu-boot-03b61ffe5a780d6e8301df16e4e60b3dcd1d0b66.tar.gz
u-boot-03b61ffe5a780d6e8301df16e4e60b3dcd1d0b66.tar.bz2
u-boot-03b61ffe5a780d6e8301df16e4e60b3dcd1d0b66.zip
Merge branch '2021-07-01-buildtime-gd-sanity-check' into next
- Merge build-time sanity checks to ensure the size of gd doesn't change. This can happen during cleanups due to not all symbols being implemented in Kconfig.
-rw-r--r--include/asm-generic/global_data.h5
-rw-r--r--include/linux/build_bug.h19
2 files changed, 24 insertions, 0 deletions
diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h
index e278d4c941..5fed4db23f 100644
--- a/include/asm-generic/global_data.h
+++ b/include/asm-generic/global_data.h
@@ -23,6 +23,8 @@
#include <fdtdec.h>
#include <membuff.h>
#include <linux/list.h>
+#include <linux/build_bug.h>
+#include <asm-offsets.h>
struct acpi_ctx;
struct driver_rt;
@@ -464,6 +466,9 @@ struct global_data {
char *smbios_version;
#endif
};
+#ifndef DO_DEPS_ONLY
+static_assert(sizeof(struct global_data) == GD_SIZE);
+#endif
/**
* gd_board_type() - retrieve board type
diff --git a/include/linux/build_bug.h b/include/linux/build_bug.h
index b7d22d6000..9c7088bafa 100644
--- a/include/linux/build_bug.h
+++ b/include/linux/build_bug.h
@@ -79,6 +79,25 @@
*/
#define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed")
+/**
+ * static_assert - check integer constant expression at build time
+ *
+ * static_assert() is a wrapper for the C11 _Static_assert, with a
+ * little macro magic to make the message optional (defaulting to the
+ * stringification of the tested expression).
+ *
+ * Contrary to BUILD_BUG_ON(), static_assert() can be used at global
+ * scope, but requires the expression to be an integer constant
+ * expression (i.e., it is not enough that __builtin_constant_p() is
+ * true for expr).
+ *
+ * Also note that BUILD_BUG_ON() fails the build if the condition is
+ * true, while static_assert() fails the build if the expression is
+ * false.
+ */
+#define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
+#define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
+
#endif /* __CHECKER__ */
#endif /* _LINUX_BUILD_BUG_H */