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();