diff options
author | Randall Spangler <rspangler@chromium.org> | 2013-08-01 10:27:33 -0700 |
---|---|---|
committer | Dave Parker <dparker@chromium.org> | 2013-08-13 16:37:38 -0700 |
commit | ae14105dee52cedab626af7a733c271787e18bc2 (patch) | |
tree | 6d19f895875e604a8da5e46ee55fc135ffa1fcc7 | |
parent | 0316ade28dc56e97345ba7bc5d44b54d40839af9 (diff) | |
download | chrome-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.c | 6 | ||||
-rw-r--r-- | include/common.h | 9 |
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 |