[util] Fix interpretation of short jumps in Option::ROM
authorMichael Brown <mcb30@etherboot.org>
Wed, 27 Aug 2008 19:36:30 +0000 (20:36 +0100)
committerMichael Brown <mcb30@etherboot.org>
Wed, 27 Aug 2008 19:36:30 +0000 (20:36 +0100)
Option::ROM was assuming that ROM images using a short jump
instruction for the init entry point would have a zero byte at offset
5; this is not necessarily true.

src/util/Option/ROM.pm

index 7a1bb88..a86d326 100644 (file)
@@ -192,10 +192,12 @@ sub unpack_init {
   my $instr = shift;
 
   # Accept both short and near jumps
-  ( my $jump, my $offset ) = unpack ( "CS", $instr );
+  my $jump = unpack ( "C", $instr );
   if ( $jump == JMP_SHORT ) {
+    my $offset = unpack ( "xC", $instr );
     return ( $offset + 5 );
   } elsif ( $jump == JMP_NEAR ) {
+    my $offset = unpack ( "xS", $instr );
     return ( $offset + 6 );
   } elsif ( $jump == 0 ) {
     return 0;