X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=tools%2Fcheckrom.py;h=b1d732a017082bc66323a1f882eb66a626955171;hb=5b8f80992019371e640b9957f3e5d1a2fb570776;hp=7dc5afcbab5d75917ccc9c61bc8e25883cd19bbc;hpb=31ae638cda019e9098127dba7a2f3f150fb65c0c;p=seabios.git diff --git a/tools/checkrom.py b/tools/checkrom.py index 7dc5afc..b1d732a 100755 --- a/tools/checkrom.py +++ b/tools/checkrom.py @@ -6,33 +6,56 @@ # This file may be distributed under the terms of the GNU GPLv3 license. import sys +import layoutrom def main(): - # Read in symbols (that are valid) + # Get args + objinfo, rawfile, outfile = sys.argv[1:] + + # Read in symbols + objinfofile = open(objinfo, 'rb') + symbols = layoutrom.parseObjDump(objinfofile)[1] syms = {} - for line in sys.stdin.readlines(): - try: - addr, type, sym = line.split() - syms[sym] = int(addr, 16) - except: - pass + for name, (addr, section) in symbols.items(): + syms[name] = addr + + # Read in raw file + f = open(rawfile, 'rb') + rawdata = f.read() + f.close() + datasize = len(rawdata) + finalsize = 64*1024 + if datasize > 64*1024: + finalsize = 128*1024 + # Sanity checks c16e = syms['code16_end'] + 0xf0000 f16e = syms['final_code16_end'] if c16e != f16e: print "Error! 16bit code moved during linking (0x%x vs 0x%x)" % ( c16e, f16e) sys.exit(1) + if datasize > finalsize: + print "Error! Code is too big (0x%x vs 0x%x)" % ( + datasize, finalsize) + sys.exit(1) + # Print statistics sizefree = syms['freespace_end'] - syms['freespace_start'] size16 = syms['code16_end'] - syms['code16_start'] size32 = syms['code32_end'] - syms['code32_start'] totalc = size16+size32 print "16bit size: %d" % size16 print "32bit size: %d" % size32 - print "Total size: %d Free space: %d Percent used: %.1f%%" % ( - totalc, sizefree - , (totalc / float(size16+size32+sizefree)) * 100.0) + print "Total size: %d Free space: %d Percent used: %.1f%% (%dKiB rom)" % ( + totalc, sizefree + finalsize - datasize + , (totalc / float(finalsize)) * 100.0 + , finalsize / 1024) + + # Write final file + f = open(outfile, 'wb') + f.write(("\0" * (finalsize - datasize)) + rawdata) + f.close() if __name__ == '__main__': main()