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

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')
1.1.1.4 ! root       17:     symbols = layoutrom.parseObjDump(objinfofile, 'in')[1]
1.1       root       18: 
                     19:     # Read in raw file
                     20:     f = open(rawfile, 'rb')
                     21:     rawdata = f.read()
                     22:     f.close()
                     23:     datasize = len(rawdata)
                     24:     finalsize = 64*1024
                     25:     if datasize > 64*1024:
                     26:         finalsize = 128*1024
1.1.1.4 ! root       27:         if datasize > 128*1024:
        !            28:             finalsize = 256*1024
1.1       root       29: 
                     30:     # Sanity checks
1.1.1.4 ! root       31:     start = symbols['code32flat_start'].offset
        !            32:     end = symbols['code32flat_end'].offset
1.1.1.3   root       33:     expend = layoutrom.BUILD_BIOS_ADDR + layoutrom.BUILD_BIOS_SIZE
                     34:     if end != expend:
                     35:         print "Error!  Code does not end at 0x%x (got 0x%x)" % (
                     36:             expend, end)
1.1       root       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.3   root       42:     expdatasize = end - start
                     43:     if datasize != expdatasize:
1.1.1.2   root       44:         print "Error!  Unknown extra data (0x%x vs 0x%x)" % (
1.1.1.3   root       45:             datasize, expdatasize)
1.1.1.2   root       46:         sys.exit(1)
1.1       root       47: 
                     48:     # Print statistics
1.1.1.4 ! root       49:     runtimesize = datasize
        !            50:     if '_reloc_abs_start' in symbols:
        !            51:         runtimesize = end - symbols['code32init_end'].offset
        !            52:     print "Total size: %d  Fixed: %d  Free: %d (used %.1f%% of %dKiB rom)" % (
        !            53:         datasize, runtimesize, finalsize - datasize
1.1.1.3   root       54:         , (datasize / float(finalsize)) * 100.0
1.1       root       55:         , finalsize / 1024)
                     56: 
                     57:     # Write final file
                     58:     f = open(outfile, 'wb')
                     59:     f.write(("\0" * (finalsize - datasize)) + rawdata)
                     60:     f.close()
                     61: 
                     62: if __name__ == '__main__':
                     63:     main()

unix.superglobalmegacorp.com

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