summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2015-06-23 15:38:31 -0600
committerSimon Glass <sjg@chromium.org>2015-07-21 17:39:21 -0600
commitc9689ca3182b89f1051b11eac2296a627abd4d31 (patch)
treee15a18816eac5fb476a41696c440af54c31f3414
parent4eae498e68a3a6bdd8b18a8cb9191196e8843740 (diff)
downloadu-boot-imx-c9689ca3182b89f1051b11eac2296a627abd4d31.zip
u-boot-imx-c9689ca3182b89f1051b11eac2296a627abd4d31.tar.gz
u-boot-imx-c9689ca3182b89f1051b11eac2296a627abd4d31.tar.bz2
Add a way of checking the position of a structure member
U-Boot uses structures for hardware access so it is important that these structures are correct. Add a way of asserting that a structure member is at a particular offset. This can be created using the datasheet for the hardware. This implementation uses Static_assert() since BUILD_BUG_ON() only works within functions. Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r--include/common.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/include/common.h b/include/common.h
index 8f4b2ec..4566bd1 100644
--- a/include/common.h
+++ b/include/common.h
@@ -1010,6 +1010,17 @@ int cpu_release(int nr, int argc, char * const argv[]);
#define DEFINE_CACHE_ALIGN_BUFFER(type, name, size) \
DEFINE_ALIGN_BUFFER(type, name, size, ARCH_DMA_MINALIGN)
+/*
+ * check_member() - Check the offset of a structure member
+ *
+ * @structure: Name of structure (e.g. global_data)
+ * @member: Name of member (e.g. baudrate)
+ * @offset: Expected offset in bytes
+ */
+#define check_member(structure, member, offset) _Static_assert( \
+ offsetof(struct structure, member) == offset, \
+ "`struct " #structure "` offset for `" #member "` is not " #offset)
+
/* Pull in stuff for the build system */
#ifdef DO_DEPS_ONLY
# include <environment.h>