diff options
author | Daniel Wyatt <daniel.wyatt@gmail.com> | 2012-08-15 12:50:01 +0100 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2012-08-15 12:51:47 +0100 |
commit | 37ac7a666fbb28f50cdd64e1df1428c266f60629 (patch) | |
tree | 33c0f94bf7ff4365de1ade89ee52f5914327f8a5 | |
parent | d0bd3834633c1bb56b7cdbd7202db2925f3b5738 (diff) | |
download | ipxe-37ac7a666fbb28f50cdd64e1df1428c266f60629.zip ipxe-37ac7a666fbb28f50cdd64e1df1428c266f60629.tar.gz ipxe-37ac7a666fbb28f50cdd64e1df1428c266f60629.tar.bz2 |
[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 <mcb30@ipxe.org>
-rw-r--r-- | src/util/Option/ROM.pm | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/util/Option/ROM.pm b/src/util/Option/ROM.pm index 82d6542..bf704ca 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 { |