summaryrefslogtreecommitdiffstats
path: root/src/util
diff options
context:
space:
mode:
authorMichael Brown2012-07-23 19:05:01 +0200
committerMichael Brown2012-07-23 19:05:01 +0200
commit8cac5c0c9299b8fd176561d8672a87f07de38f88 (patch)
tree8c6f68974530d0e205ea268844539a0a819953dc /src/util
parent[romprefix] Report a pessimistic runtime size estimate (diff)
downloadipxe-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-xsrc/util/mergerom.pl21
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();