Annotation of qemu/roms/seabios/tools/checkrom.py, revision 1.1.1.2

1.1       root        1: #!/usr/bin/env python
                      2: # Script to check a bios image and report info on it.
                      3: #
                      4: # Copyright (C) 2008  Kevin O'Connor <[email protected]>
                      5: #
                      6: # This file may be distributed under the terms of the GNU GPLv3 license.
                      7: 
                      8: import sys
                      9: import layoutrom
                     10: 
                     11: def main():
                     12:     # Get args
                     13:     objinfo, rawfile, outfile = sys.argv[1:]
                     14: 
                     15:     # Read in symbols
                     16:     objinfofile = open(objinfo, 'rb')
                     17:     symbols = layoutrom.parseObjDump(objinfofile)[1]
                     18:     syms = {}
                     19:     for name, (addr, section) in symbols.items():
                     20:         syms[name] = addr
                     21: 
                     22:     # Read in raw file
                     23:     f = open(rawfile, 'rb')
                     24:     rawdata = f.read()
                     25:     f.close()
                     26:     datasize = len(rawdata)
                     27:     finalsize = 64*1024
                     28:     if datasize > 64*1024:
                     29:         finalsize = 128*1024
                     30: 
                     31:     # Sanity checks
1.1.1.2 ! root       32:     c16e = syms['text16_end'] + 0xf0000
        !            33:     f16e = syms['final_text16_end']
1.1       root       34:     if c16e != f16e:
                     35:         print "Error!  16bit code moved during linking (0x%x vs 0x%x)" % (
                     36:             c16e, f16e)
                     37:         sys.exit(1)
                     38:     if datasize > finalsize:
                     39:         print "Error!  Code is too big (0x%x vs 0x%x)" % (
                     40:             datasize, finalsize)
                     41:         sys.exit(1)
1.1.1.2 ! root       42:     actualdatasize = f16e - syms['code32flat_start']
        !            43:     if datasize != actualdatasize:
        !            44:         print "Error!  Unknown extra data (0x%x vs 0x%x)" % (
        !            45:             datasize, actualdatasize)
        !            46:         sys.exit(1)
1.1       root       47: 
                     48:     # Print statistics
                     49:     sizefree = syms['freespace_end'] - syms['freespace_start']
1.1.1.2 ! root       50:     size16 = syms['text16_end'] - syms['data16_start']
        !            51:     size32seg = syms['code32seg_end'] - syms['code32seg_start']
        !            52:     size32flat = syms['code32flat_end'] - syms['code32flat_start']
        !            53:     totalc = size16+size32seg+size32flat
        !            54:     print "16bit size:           %d" % size16
        !            55:     print "32bit segmented size: %d" % size32seg
        !            56:     print "32bit flat size:      %d" % size32flat
1.1       root       57:     print "Total size: %d  Free space: %d  Percent used: %.1f%% (%dKiB rom)" % (
                     58:         totalc, sizefree + finalsize - datasize
                     59:         , (totalc / float(finalsize)) * 100.0
                     60:         , finalsize / 1024)
                     61: 
                     62:     # Write final file
                     63:     f = open(outfile, 'wb')
                     64:     f.write(("\0" * (finalsize - datasize)) + rawdata)
                     65:     f.close()
                     66: 
                     67: if __name__ == '__main__':
                     68:     main()

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.