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

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
                     32:     c16e = syms['code16_end'] + 0xf0000
                     33:     f16e = syms['final_code16_end']
                     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)
                     42: 
                     43:     # Print statistics
                     44:     sizefree = syms['freespace_end'] - syms['freespace_start']
                     45:     size16 = syms['code16_end'] - syms['code16_start']
                     46:     size32 = syms['code32_end'] - syms['code32_start']
                     47:     totalc = size16+size32
                     48:     print "16bit size: %d" % size16
                     49:     print "32bit size: %d" % size32
                     50:     print "Total size: %d  Free space: %d  Percent used: %.1f%% (%dKiB rom)" % (
                     51:         totalc, sizefree + finalsize - datasize
                     52:         , (totalc / float(finalsize)) * 100.0
                     53:         , finalsize / 1024)
                     54: 
                     55:     # Write final file
                     56:     f = open(outfile, 'wb')
                     57:     f.write(("\0" * (finalsize - datasize)) + rawdata)
                     58:     f.close()
                     59: 
                     60: if __name__ == '__main__':
                     61:     main()

unix.superglobalmegacorp.com

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