diff options
author | Michael Brown | 2012-07-23 19:05:01 +0200 |
---|---|---|
committer | Michael Brown | 2012-07-23 19:05:01 +0200 |
commit | 8cac5c0c9299b8fd176561d8672a87f07de38f88 (patch) | |
tree | 8c6f68974530d0e205ea268844539a0a819953dc /src/util | |
parent | [romprefix] Report a pessimistic runtime size estimate (diff) | |
download | ipxe-8cac5c0c9299b8fd176561d8672a87f07de38f88.tar.gz ipxe-8cac5c0c9299b8fd176561d8672a87f07de38f88.tar.xz ipxe-8cac5c0c9299b8fd176561d8672a87f07de38f88.zip |
[util] Update mergerom.pl to handle iPXE ROM header
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/util')
-rwxr-xr-x | src/util/mergerom.pl | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/util/mergerom.pl b/src/util/mergerom.pl index 815ac747..f5c1632b 100755 --- a/src/util/mergerom.pl +++ b/src/util/mergerom.pl @@ -44,9 +44,6 @@ my $offset = $baserom->length; foreach my $rom ( @roms ) { - # Update base length - $baserom->{length} += $rom->{length}; - # Merge initialisation entry point merge_entry_points ( $baserom->{init}, $rom->{init}, $offset ); @@ -85,6 +82,24 @@ foreach my $rom ( @roms ) { merge_entry_points ( $baserom_pnp->{bev}, $rom_pnp->{bev}, $offset ); } + # Update iPXE header, if present + my $baserom_ipxe = $baserom->ipxe_header; + my $rom_ipxe = $rom->ipxe_header; + if ( $baserom_ipxe ) { + + # Update shrunk length + $baserom_ipxe->{shrunk_length} = ( $baserom->{length} + + ( $rom_ipxe ? + $rom_ipxe->{shrunk_length} : + $rom->{length} ) ); + + # Fix checksum + $baserom_ipxe->fix_checksum(); + } + + # Update base length + $baserom->{length} += $rom->{length}; + # Fix checksum for this ROM segment $rom->fix_checksum(); |