]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[util] Update mergerom.pl to handle iPXE ROM header
authorMichael Brown <mcb30@ipxe.org>
Mon, 23 Jul 2012 17:05:01 +0000 (18:05 +0100)
committerMichael Brown <mcb30@ipxe.org>
Mon, 23 Jul 2012 17:05:01 +0000 (18:05 +0100)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/util/mergerom.pl

index 815ac747804ab4e92072f8a254f5b26c6272b290..f5c1632b0ce22f0a6284a03fa1183f2dcdd00b38 100755 (executable)
@@ -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();