diff options
author | Aaron Durbin <adurbin@chromium.org> | 2013-02-08 16:14:07 -0600 |
---|---|---|
committer | Ronald G. Minnich <rminnich@gmail.com> | 2013-03-17 22:50:04 +0100 |
commit | 8aa210bbf0343b1da1ab4e164c22da13c985a796 (patch) | |
tree | fb5e21ccfe5f93a5003e32971c38c52521f471cc /src | |
parent | 058d70f163e1a46e16d8577de4e612af04b9aeca (diff) |
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')
-rw-r--r-- | src/southbridge/intel/bd82x6x/smi.c | 5 |
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) { |