From ae14105dee52cedab626af7a733c271787e18bc2 Mon Sep 17 00:00:00 2001 From: Randall Spangler Date: Thu, 1 Aug 2013 10:27:33 -0700 Subject: 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 Reviewed-on: https://gerrit.chromium.org/gerrit/64233 Reviewed-by: Bill Richardson Reviewed-on: https://gerrit.chromium.org/gerrit/65758 Reviewed-by: Dave Parker Tested-by: Dave Parker --- common/host_command.c | 6 +++++- 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 -- cgit v1.2.1