summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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();