From: Julian Seward Date: Sun, 29 Apr 2007 09:40:56 +0000 (+0000) Subject: Merge r1736 and r1741: int $3 support (x86 and amd64) X-Git-Tag: svn/VALGRIND_3_2_3^2~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c61fb77ad84fff8cdb4cb22b813d2caa8daee5d;p=thirdparty%2Fvalgrind.git Merge r1736 and r1741: int $3 support (x86 and amd64) git-svn-id: svn://svn.valgrind.org/vex/branches/VEX_3_2_BRANCH@1751 --- diff --git a/VEX/priv/guest-amd64/toIR.c b/VEX/priv/guest-amd64/toIR.c index 506db5d834..a717ab3e94 100644 --- a/VEX/priv/guest-amd64/toIR.c +++ b/VEX/priv/guest-amd64/toIR.c @@ -12380,6 +12380,12 @@ DisResult disInstr_AMD64_WRK ( /* ------------------------ INT ------------------------ */ + case 0xCC: /* INT 3 */ + jmp_lit(Ijk_Trap, guest_RIP_bbstart + delta); + dres.whatNext = Dis_StopHere; + DIP("int $0x3\n"); + break; + case 0xCD: { /* INT imm8 */ IRJumpKind jk = Ijk_Boring; if (have66orF2orF3(pfx)) goto decode_failure; diff --git a/VEX/priv/guest-x86/toIR.c b/VEX/priv/guest-x86/toIR.c index 89e395d672..6a12037108 100644 --- a/VEX/priv/guest-x86/toIR.c +++ b/VEX/priv/guest-x86/toIR.c @@ -11208,6 +11208,12 @@ DisResult disInstr_X86_WRK ( /* ------------------------ INT ------------------------ */ + case 0xCC: /* INT 3 */ + jmp_lit(Ijk_Trap,((Addr32)guest_EIP_bbstart)+delta); + dres.whatNext = Dis_StopHere; + DIP("int $0x3\n"); + break; + case 0xCD: /* INT imm8 */ d32 = getIByte(delta); delta++; if (d32 != 0x80) goto decode_failure; diff --git a/VEX/priv/host-amd64/hdefs.c b/VEX/priv/host-amd64/hdefs.c index 9d5f775545..6986077f76 100644 --- a/VEX/priv/host-amd64/hdefs.c +++ b/VEX/priv/host-amd64/hdefs.c @@ -2640,6 +2640,9 @@ Int emit_AMD64Instr ( UChar* buf, Int nbuf, AMD64Instr* i, case Ijk_NoRedir: *p++ = 0xBD; p = emit32(p, VEX_TRC_JMP_NOREDIR); break; + case Ijk_Trap: + *p++ = 0xBD; + p = emit32(p, VEX_TRC_JMP_TRAP); break; case Ijk_Ret: case Ijk_Call: case Ijk_Boring: diff --git a/VEX/priv/host-x86/hdefs.c b/VEX/priv/host-x86/hdefs.c index a88a03500c..9f6157f1a9 100644 --- a/VEX/priv/host-x86/hdefs.c +++ b/VEX/priv/host-x86/hdefs.c @@ -2184,6 +2184,9 @@ Int emit_X86Instr ( UChar* buf, Int nbuf, X86Instr* i, case Ijk_Sys_sysenter: *p++ = 0xBD; p = emit32(p, VEX_TRC_JMP_SYS_SYSENTER); break; + case Ijk_Trap: + *p++ = 0xBD; + p = emit32(p, VEX_TRC_JMP_TRAP); break; case Ijk_Ret: case Ijk_Call: case Ijk_Boring: