[PATCH] bios_emulator: fix incorrect printing of address in "call near immediate"

Yuri Zaporozhets yuriz at qrv-systems.net
Sat Nov 30 21:56:25 CET 2024


In the x86emuOp_call_near_IMM() function the address of CALL is
printed incorrectly when jumping backwards. For example, the correct
disassemble of the bytes below would be:

0000E8DE  E8DBFF            call 0xe8bc

(verified by ndisasm). But instead the address is printed as "ffffe8bc".
That's because of the following macro:

    DECODE_PRINTF2("%04x\n", ip);

while it should be

    DECODE_PRINTF2("%04x\n", (u16)ip);

Signed-off-by: Yuri Zaporozhets <yuriz at qrv-systems.net>
---
 drivers/bios_emulator/x86emu/ops.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/bios_emulator/x86emu/ops.c b/drivers/bios_emulator/x86emu/ops.c
index 57422ec3d4..31b52df9bf 100644
--- a/drivers/bios_emulator/x86emu/ops.c
+++ b/drivers/bios_emulator/x86emu/ops.c
@@ -4200,7 +4200,7 @@ void x86emuOp_call_near_IMM(u8 X86EMU_UNUSED(op1))
 	DECODE_PRINTF("CALL\t");
 	ip = (s16) fetch_word_imm();
 	ip += (s16) M.x86.R_IP;	   /* CHECK SIGN */
-	DECODE_PRINTF2("%04x\n", ip);
+	DECODE_PRINTF2("%04x\n", (u16)ip);
 	CALL_TRACE(M.x86.saved_cs, M.x86.saved_ip, M.x86.R_CS, ip, "");
     TRACE_AND_STEP();
     push_word(M.x86.R_IP);
-- 
2.39.5



More information about the U-Boot mailing list