From: Daniel Wyatt Date: Wed, 15 Aug 2012 11:50:01 +0000 (+0100) Subject: [util] Allow for CALL NEAR in the option ROM initialisation entry point X-Git-Tag: v1.20.1~1676 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=37ac7a666fbb28f50cdd64e1df1428c266f60629;p=thirdparty%2Fipxe.git [util] Allow for CALL NEAR in the option ROM initialisation entry point Option::ROM currently understands only JMP NEAR and JMP SHORT instructions in the initialisation entry point. At least one Broadcom option ROM has been observed to use a CALL NEAR instruction. Signed-off-by: Michael Brown --- diff --git a/src/util/Option/ROM.pm b/src/util/Option/ROM.pm index 82d654261..bf704cad6 100644 --- a/src/util/Option/ROM.pm +++ b/src/util/Option/ROM.pm @@ -180,6 +180,7 @@ our %EXPORT_TAGS = ( all => [ @EXPORT_OK ] ); use constant JMP_SHORT => 0xeb; use constant JMP_NEAR => 0xe9; +use constant CALL_NEAR => 0xe8; sub pack_init { my $dest = shift; @@ -203,6 +204,9 @@ sub unpack_init { } elsif ( $jump == JMP_NEAR ) { my $offset = unpack ( "xS", $instr ); return ( $offset + 6 ); + } elsif ( $jump == CALL_NEAR ) { + my $offset = unpack ( "xS", $instr ); + return ( $offset + 6 ); } elsif ( $jump == 0 ) { return 0; } else {