summaryrefslogtreecommitdiff
path: root/src/southbridge
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2013-02-08 16:14:07 -0600
committerRonald G. Minnich <rminnich@gmail.com>2013-03-17 22:50:04 +0100
commit8aa210bbf0343b1da1ab4e164c22da13c985a796 (patch)
treefb5e21ccfe5f93a5003e32971c38c52521f471cc /src/southbridge
parent058d70f163e1a46e16d8577de4e612af04b9aeca (diff)
downloadcoreboot-8aa210bbf0343b1da1ab4e164c22da13c985a796.tar.xz
bd82x6x: don't use absolute symbols
objcopy -B provides symbols of the form _binary_<name>_(start|end|size). However, the _size variant is an absoult symbol. If one wants to relocate the smi loading the _size symbol will be relocated which is wrong since it is suppose to be a fixed size. There is no way to distinguish symbols that shouldn't be relocated vs ones that can. Instead use the _start and _end variants to determine the size. Change-Id: I55192992cf36f62a9d8dd896e5fb3043a3eacbd3 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: http://review.coreboot.org/2760 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Diffstat (limited to 'src/southbridge')
-rw-r--r--src/southbridge/intel/bd82x6x/smi.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/southbridge/intel/bd82x6x/smi.c b/src/southbridge/intel/bd82x6x/smi.c
index c89ae18636..f34a96e1e8 100644
--- a/src/southbridge/intel/bd82x6x/smi.c
+++ b/src/southbridge/intel/bd82x6x/smi.c
@@ -35,7 +35,7 @@
#endif
extern unsigned char _binary_smm_start;
-extern unsigned char _binary_smm_size;
+extern unsigned char _binary_smm_end;
/* While we read PMBASE dynamically in case it changed, let's
* initialize it with a sane value
@@ -352,7 +352,8 @@ static void smm_install(void)
/* copy the real SMM handler */
printk(BIOS_DEBUG, "Installing SMM handler to 0x%08x\n", smm_base);
- memcpy((void *)smm_base, &_binary_smm_start, (size_t)&_binary_smm_size);
+ memcpy((void *)smm_base, &_binary_smm_start,
+ (size_t)(&_binary_smm_end - &_binary_smm_start));
/* copy the IED header into place */
if (CONFIG_SMM_TSEG_SIZE > IED_SIZE) {