From 8cac5c0c9299b8fd176561d8672a87f07de38f88 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 23 Jul 2012 18:05:01 +0100 Subject: [PATCH] [util] Update mergerom.pl to handle iPXE ROM header Signed-off-by: Michael Brown --- src/util/mergerom.pl | 21 ++++++++++++++++++--- 1 file 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();