mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-03 02:03:01 +00:00
bios_emulator: Always print errors when opcode decode fails
This is a rare event and should not happen. When it does it is confusing to work out why. At least we should print a message. Adjust the emulator to always print decode errors to the console. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
b3521f2e49
commit
8c6ec412b4
3 changed files with 22 additions and 18 deletions
|
@ -99,7 +99,11 @@
|
||||||
# define DEBUG_DECODE_NOPRINT() 0
|
# define DEBUG_DECODE_NOPRINT() 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_X86EMU_DEBUG
|
# define ERR_PRINTF(x) printf(x)
|
||||||
|
# define ERR_PRINTF2(x, y) printf(x, y)
|
||||||
|
|
||||||
|
#ifdef CONFIG_X86EMU_DEBUG103
|
||||||
|
|
||||||
|
|
||||||
# define DECODE_PRINTF(x) if (DEBUG_DECODE()) \
|
# define DECODE_PRINTF(x) if (DEBUG_DECODE()) \
|
||||||
x86emu_decode_printf(x)
|
x86emu_decode_printf(x)
|
||||||
|
|
|
@ -179,7 +179,7 @@ void x86emuOp_illegal_op(
|
||||||
{
|
{
|
||||||
START_OF_INSTR();
|
START_OF_INSTR();
|
||||||
if (M.x86.R_SP != 0) {
|
if (M.x86.R_SP != 0) {
|
||||||
DECODE_PRINTF("ILLEGAL X86 OPCODE\n");
|
ERR_PRINTF("ILLEGAL X86 OPCODE\n");
|
||||||
TRACE_REGS();
|
TRACE_REGS();
|
||||||
DB( printk("%04x:%04x: %02X ILLEGAL X86 OPCODE!\n",
|
DB( printk("%04x:%04x: %02X ILLEGAL X86 OPCODE!\n",
|
||||||
M.x86.R_CS, M.x86.R_IP-1,op1));
|
M.x86.R_CS, M.x86.R_IP-1,op1));
|
||||||
|
@ -2148,7 +2148,7 @@ void x86emuOp_pop_RM(u8 X86EMU_UNUSED(op1))
|
||||||
DECODE_PRINTF("POP\t");
|
DECODE_PRINTF("POP\t");
|
||||||
FETCH_DECODE_MODRM(mod, rh, rl);
|
FETCH_DECODE_MODRM(mod, rh, rl);
|
||||||
if (rh != 0) {
|
if (rh != 0) {
|
||||||
DECODE_PRINTF("ILLEGAL DECODE OF OPCODE 8F\n");
|
ERR_PRINTF("ILLEGAL DECODE OF OPCODE 8F\n");
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
}
|
}
|
||||||
if (mod < 3) {
|
if (mod < 3) {
|
||||||
|
@ -3347,7 +3347,7 @@ void x86emuOp_mov_byte_RM_IMM(u8 X86EMU_UNUSED(op1))
|
||||||
DECODE_PRINTF("MOV\t");
|
DECODE_PRINTF("MOV\t");
|
||||||
FETCH_DECODE_MODRM(mod, rh, rl);
|
FETCH_DECODE_MODRM(mod, rh, rl);
|
||||||
if (rh != 0) {
|
if (rh != 0) {
|
||||||
DECODE_PRINTF("ILLEGAL DECODE OF OPCODE c6\n");
|
ERR_PRINTF("ILLEGAL DECODE OF OPCODE c6\n");
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
}
|
}
|
||||||
if (mod < 3) {
|
if (mod < 3) {
|
||||||
|
@ -3381,7 +3381,7 @@ void x86emuOp_mov_word_RM_IMM(u8 X86EMU_UNUSED(op1))
|
||||||
DECODE_PRINTF("MOV\t");
|
DECODE_PRINTF("MOV\t");
|
||||||
FETCH_DECODE_MODRM(mod, rh, rl);
|
FETCH_DECODE_MODRM(mod, rh, rl);
|
||||||
if (rh != 0) {
|
if (rh != 0) {
|
||||||
DECODE_PRINTF("ILLEGAL DECODE OF OPCODE 8F\n");
|
ERR_PRINTF("ILLEGAL DECODE OF OPCODE 8F\n");
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
}
|
}
|
||||||
if (mod < 3) {
|
if (mod < 3) {
|
||||||
|
@ -3968,7 +3968,7 @@ void x86emuOp_aam(u8 X86EMU_UNUSED(op1))
|
||||||
DECODE_PRINTF("AAM\n");
|
DECODE_PRINTF("AAM\n");
|
||||||
a = fetch_byte_imm(); /* this is a stupid encoding. */
|
a = fetch_byte_imm(); /* this is a stupid encoding. */
|
||||||
if (a != 10) {
|
if (a != 10) {
|
||||||
DECODE_PRINTF("ERROR DECODING AAM\n");
|
ERR_PRINTF("ERROR DECODING AAM\n");
|
||||||
TRACE_REGS();
|
TRACE_REGS();
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
}
|
}
|
||||||
|
@ -4443,7 +4443,7 @@ void x86emuOp_opcF6_byte_RM(u8 X86EMU_UNUSED(op1))
|
||||||
test_byte(destval, srcval);
|
test_byte(destval, srcval);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
DECODE_PRINTF("ILLEGAL OP MOD=00 RH=01 OP=F6\n");
|
ERR_PRINTF("ILLEGAL OP MOD=00 RH=01 OP=F6\n");
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -4490,7 +4490,7 @@ void x86emuOp_opcF6_byte_RM(u8 X86EMU_UNUSED(op1))
|
||||||
test_byte(*destreg, srcval);
|
test_byte(*destreg, srcval);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
DECODE_PRINTF("ILLEGAL OP MOD=00 RH=01 OP=F6\n");
|
ERR_PRINTF("ILLEGAL OP MOD=00 RH=01 OP=F6\n");
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -4559,7 +4559,7 @@ void x86emuOp_opcF7_word_RM(u8 X86EMU_UNUSED(op1))
|
||||||
test_long(destval, srcval);
|
test_long(destval, srcval);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
DECODE_PRINTF("ILLEGAL OP MOD=00 RH=01 OP=F7\n");
|
ERR_PRINTF("ILLEGAL OP MOD=00 RH=01 OP=F7\n");
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -4611,7 +4611,7 @@ void x86emuOp_opcF7_word_RM(u8 X86EMU_UNUSED(op1))
|
||||||
test_word(destval, srcval);
|
test_word(destval, srcval);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
DECODE_PRINTF("ILLEGAL OP MOD=00 RH=01 OP=F7\n");
|
ERR_PRINTF("ILLEGAL OP MOD=00 RH=01 OP=F7\n");
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -4666,7 +4666,7 @@ void x86emuOp_opcF7_word_RM(u8 X86EMU_UNUSED(op1))
|
||||||
test_long(*destreg, srcval);
|
test_long(*destreg, srcval);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
DECODE_PRINTF("ILLEGAL OP MOD=00 RH=01 OP=F6\n");
|
ERR_PRINTF("ILLEGAL OP MOD=00 RH=01 OP=F6\n");
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -4715,7 +4715,7 @@ void x86emuOp_opcF7_word_RM(u8 X86EMU_UNUSED(op1))
|
||||||
test_word(*destreg, srcval);
|
test_word(*destreg, srcval);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
DECODE_PRINTF("ILLEGAL OP MOD=00 RH=01 OP=F6\n");
|
ERR_PRINTF("ILLEGAL OP MOD=00 RH=01 OP=F6\n");
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -4879,7 +4879,7 @@ void x86emuOp_opcFE_byte_RM(u8 X86EMU_UNUSED(op1))
|
||||||
case 5:
|
case 5:
|
||||||
case 6:
|
case 6:
|
||||||
case 7:
|
case 7:
|
||||||
DECODE_PRINTF2("ILLEGAL OP MAJOR OP 0xFE MINOR OP %x \n", mod);
|
ERR_PRINTF2("ILLEGAL OP MAJOR OP 0xFE MINOR OP %x\n", mod);
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -4961,7 +4961,7 @@ void x86emuOp_opcFF_word_RM(u8 X86EMU_UNUSED(op1))
|
||||||
DECODE_PRINTF("PUSH\t");
|
DECODE_PRINTF("PUSH\t");
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
DECODE_PRINTF("ILLEGAL DECODING OF OPCODE FF\t");
|
ERR_PRINTF("ILLEGAL DECODING OF OPCODE FF\t");
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -5092,7 +5092,7 @@ void x86emuOp_opcFF_word_RM(u8 X86EMU_UNUSED(op1))
|
||||||
M.x86.R_IP = *destreg;
|
M.x86.R_IP = *destreg;
|
||||||
break;
|
break;
|
||||||
case 3: /* jmp far ptr ... */
|
case 3: /* jmp far ptr ... */
|
||||||
DECODE_PRINTF("OPERATION UNDEFINED 0XFF \n");
|
ERR_PRINTF("OPERATION UNDEFINED 0XFF\n");
|
||||||
TRACE_AND_STEP();
|
TRACE_AND_STEP();
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
break;
|
break;
|
||||||
|
@ -5104,7 +5104,7 @@ void x86emuOp_opcFF_word_RM(u8 X86EMU_UNUSED(op1))
|
||||||
M.x86.R_IP = (u16) (*destreg);
|
M.x86.R_IP = (u16) (*destreg);
|
||||||
break;
|
break;
|
||||||
case 5: /* jmp far ptr ... */
|
case 5: /* jmp far ptr ... */
|
||||||
DECODE_PRINTF("OPERATION UNDEFINED 0XFF \n");
|
ERR_PRINTF("OPERATION UNDEFINED 0XFF\n");
|
||||||
TRACE_AND_STEP();
|
TRACE_AND_STEP();
|
||||||
HALT_SYS();
|
HALT_SYS();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -58,7 +58,7 @@ void x86emuOp2_illegal_op(
|
||||||
u8 op2)
|
u8 op2)
|
||||||
{
|
{
|
||||||
START_OF_INSTR();
|
START_OF_INSTR();
|
||||||
DECODE_PRINTF("ILLEGAL EXTENDED X86 OPCODE\n");
|
ERR_PRINTF("ILLEGAL EXTENDED X86 OPCODE\n");
|
||||||
TRACE_REGS();
|
TRACE_REGS();
|
||||||
printk("%04x:%04x: %02X ILLEGAL EXTENDED X86 OPCODE!\n",
|
printk("%04x:%04x: %02X ILLEGAL EXTENDED X86 OPCODE!\n",
|
||||||
M.x86.R_CS, M.x86.R_IP-2,op2);
|
M.x86.R_CS, M.x86.R_IP-2,op2);
|
||||||
|
@ -1089,7 +1089,7 @@ void x86emuOp2_btX_I(u8 X86EMU_UNUSED(op2))
|
||||||
DECODE_PRINTF("BTC\t");
|
DECODE_PRINTF("BTC\t");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DECODE_PRINTF("ILLEGAL EXTENDED X86 OPCODE\n");
|
ERR_PRINTF("ILLEGAL EXTENDED X86 OPCODE\n");
|
||||||
TRACE_REGS();
|
TRACE_REGS();
|
||||||
printk("%04x:%04x: %02X%02X ILLEGAL EXTENDED X86 OPCODE EXTENSION!\n",
|
printk("%04x:%04x: %02X%02X ILLEGAL EXTENDED X86 OPCODE EXTENSION!\n",
|
||||||
M.x86.R_CS, M.x86.R_IP-3,op2, (mod<<6)|(rh<<3)|rl);
|
M.x86.R_CS, M.x86.R_IP-3,op2, (mod<<6)|(rh<<3)|rl);
|
||||||
|
|
Loading…
Add table
Reference in a new issue