Annotation of qemu/roms/seabios/tools/checkrom.py, revision 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.