Fix cbmem to work on 64 bit platforms

For some reason which I fail to understand, specifying endiannes using
'@' (which means 'native' and should be the same as '<' on x86
platforms) causes cbmem.py to crash the machine on 64 bit systems.

What happens is that the addresses read from various table headers'
struct representations do not make sense, when bogus address gets
passed to get_phys_mem, the crash happens while that function is
executed.

dlaurie@ found out that replacing "@" with "<" in fact fixes the
issue. After some investigation I am just submitting this fix without
much understanding of the root cause.

Change-Id: Iaba9bc72a3f6b1d0407a5f1e3b459ccf5063969d
Signed-off-by: Duncan Laurie <dlaurie@chromium.org>
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-on: http://review.coreboot.org/1715
Tested-by: build bot (Jenkins)
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
Vadim Bendebury 2012-08-29 15:03:09 -07:00 committed by Stefan Reinauer
parent 01c3de9bb4
commit f27d36c361
1 changed files with 1 additions and 1 deletions

View File

@ -57,7 +57,7 @@ def get_phys_mem(addr, size):
class MetaCStruct(type): class MetaCStruct(type):
def __init__(cls, name, bases, dct): def __init__(cls, name, bases, dct):
struct_members = dct["struct_members"] struct_members = dct["struct_members"]
cls.struct_fmt = "@" cls.struct_fmt = "<"
for char, name in struct_members: for char, name in struct_members:
cls.struct_fmt += char cls.struct_fmt += char
cls.struct_len = struct.calcsize(cls.struct_fmt) cls.struct_len = struct.calcsize(cls.struct_fmt)