Skip to content

Commit

Permalink
scripts/signrom.py: Allow option ROM checksum script to write the siz…
Browse files Browse the repository at this point in the history
…e header.

Modify the signrom.py script so that if the size byte in the header is
0 (ie. not set) then the script will set the size.  If the size byte
is non-zero then we do the same as before, so this doesn't require
changes to any existing ROM sourcecode.

Signed-off-by: Richard W.M. Jones <[email protected]>
Message-Id: <[email protected]>
  • Loading branch information
rwmjones authored and bonzini committed May 23, 2016
1 parent 168340b commit 6f71b77
Showing 1 changed file with 22 additions and 3 deletions.
25 changes: 22 additions & 3 deletions scripts/signrom.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,29 @@
fout = open(sys.argv[2], 'wb')

fin.seek(2)
size = ord(fin.read(1)) * 512 - 1

size_byte = ord(fin.read(1))
fin.seek(0)
data = fin.read(size)

if size_byte == 0:
# If the caller left the size field blank then we will fill it in,
# also rounding the whole input to a multiple of 512 bytes.
data = fin.read()
# +1 because we need a byte to store the checksum.
size = len(data) + 1
# Round up to next multiple of 512.
size += 511
size -= size % 512
if size >= 65536:
sys.exit("%s: option ROM size too large" % sys.argv[1])
# size-1 because a final byte is added below to store the checksum.
data = data.ljust(size-1, '\0')
data = data[:2] + chr(size/512) + data[3:]
else:
# Otherwise the input file specifies the size so use it.
# -1 because we overwrite the last byte of the file with the checksum.
size = size_byte * 512 - 1
data = fin.read(size)

fout.write(data)

checksum = 0
Expand Down

0 comments on commit 6f71b77

Please sign in to comment.