summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRandall Spangler <rspangler@chromium.org>2013-08-01 10:27:33 -0700
committerDave Parker <dparker@chromium.org>2013-08-13 16:37:38 -0700
commitae14105dee52cedab626af7a733c271787e18bc2 (patch)
tree6d19f895875e604a8da5e46ee55fc135ffa1fcc7
parent0316ade28dc56e97345ba7bc5d44b54d40839af9 (diff)
downloadchrome-ec-ae14105dee52cedab626af7a733c271787e18bc2.tar.gz
CHERRY-PICK:Word-align the host memory map
This fixes unaligned access exceptions when totally-unrelated code changes happen to move around host_command.c's global variables. BUG=chrome-os-partner:21578 BRANCH=none TEST=add a ccprintf() call to host_command.c; no longer causes an exception Change-Id: I00605395a88ab65703f1b5a6b968660b4589a259 Original-Change-Id: I5407e5631a08ea647dc40e5bd9c7bd101868ced0 Signed-off-by: Randall Spangler <rspangler@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/64233 Reviewed-by: Bill Richardson <wfrichar@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/65758 Reviewed-by: Dave Parker <dparker@chromium.org> Tested-by: Dave Parker <dparker@chromium.org>
-rw-r--r--common/host_command.c6
-rw-r--r--include/common.h9
2 files changed, 12 insertions, 3 deletions
diff --git a/common/host_command.c b/common/host_command.c
index c6f7ff1dc4..489ae7b35f 100644
--- a/common/host_command.c
+++ b/common/host_command.c
@@ -28,7 +28,11 @@
static struct host_cmd_handler_args *pending_args;
#ifndef CONFIG_LPC
-static uint8_t host_memmap[EC_MEMMAP_SIZE];
+/*
+ * Simulated memory map. Must be word-aligned, because some of the elements
+ * in the memory map are words.
+ */
+static uint8_t host_memmap[EC_MEMMAP_SIZE] __aligned(4);
#endif
static enum {
diff --git a/include/common.h b/include/common.h
index c6eeb11fef..235540d220 100644
--- a/include/common.h
+++ b/include/common.h
@@ -32,9 +32,14 @@
#define REG16(addr) (*(volatile uint16_t *)(addr))
/*
- * Define __packed if someone hasn't beat us to it. Linux kernel style
- * checking prefers __packed over __attribute__((packed)).
+ * Define __aligned(n) and __packed if someone hasn't beat us to it. Linux
+ * kernel style checking prefers these over __attribute__((packed)) and
+ * __attribute__((aligned(n))).
*/
+#ifndef __aligned
+#define __aligned(n) __attribute__((aligned(n)))
+#endif
+
#ifndef __packed
#define __packed __attribute__((packed))
#endif