~ubuntu-branches/ubuntu/trusty/seabios/trusty-proposed

« back to all changes in this revision

Viewing changes to tools/checkrom.py

  • Committer: Package Import Robot
  • Author(s): Michael Tokarev
  • Date: 2013-07-08 21:34:44 UTC
  • mfrom: (1.1.7)
  • Revision ID: package-import@ubuntu.com-20130708213444-6ed9q23j39x143lu
Tags: 1.7.3-1
Multi-Arch: allowed

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
import sys
9
9
import layoutrom
10
10
 
 
11
def subst(data, offset, new):
 
12
    return data[:offset] + new + data[offset + len(new):]
 
13
 
 
14
def checksum(data, start, size, csum):
 
15
    sumbyte = 0
 
16
    while size:
 
17
        sumbyte = sumbyte + ord(data[start + size - 1])
 
18
        size = size - 1
 
19
    sumbyte = (0x100 - sumbyte) & 0xff
 
20
    return subst(data, start+csum, chr(sumbyte))
 
21
 
11
22
def main():
12
23
    # Get args
13
24
    objinfo, rawfile, outfile = sys.argv[1:]
45
56
            datasize, expdatasize)
46
57
        sys.exit(1)
47
58
 
 
59
    # Fix up CSM Compatibility16 table
 
60
    if 'csm_compat_table' in symbols and 'entry_csm' in symbols:
 
61
        # Field offsets within EFI_COMPATIBILITY16_TABLE
 
62
        ENTRY_FIELD_OFS = 14 # Compatibility16CallOffset (UINT16)
 
63
        SIZE_FIELD_OFS = 5   # TableLength (UINT8)
 
64
        CSUM_FIELD_OFS = 4   # TableChecksum (UINT8)
 
65
 
 
66
        tableofs = symbols['csm_compat_table'].offset - symbols['code32flat_start'].offset
 
67
        entry_addr = symbols['entry_csm'].offset - layoutrom.BUILD_BIOS_ADDR
 
68
        byte1 = chr(entry_addr & 0xff)
 
69
        byte2 = chr(entry_addr >> 8)
 
70
        rawdata = subst(rawdata, tableofs+ENTRY_FIELD_OFS, byte1+byte2)
 
71
 
 
72
        tablesize = ord(rawdata[tableofs+SIZE_FIELD_OFS])
 
73
        rawdata = checksum(rawdata, tableofs, tablesize, CSUM_FIELD_OFS)
 
74
 
48
75
    # Print statistics
49
 
    runtimesize = datasize
50
 
    if '_reloc_abs_start' in symbols:
51
 
        runtimesize = end - symbols['code32init_end'].offset
 
76
    runtimesize = end - symbols['code32init_end'].offset
52
77
    print "Total size: %d  Fixed: %d  Free: %d (used %.1f%% of %dKiB rom)" % (
53
78
        datasize, runtimesize, finalsize - datasize
54
79
        , (datasize / float(finalsize)) * 100.0