Summary: | Valgrind fails to handle interlocked instructions on extended registers (r8, etc) on amd64 (vex amd64->IR: unhandled instruction bytes: 0xF0 0x41 0xF 0xC0 0x87 0xB8) | ||
---|---|---|---|
Product: | [Developer tools] valgrind | Reporter: | Ken Johnson <skywing_reg> |
Component: | general | Assignee: | Julian Seward <jseward> |
Status: | RESOLVED FIXED | ||
Severity: | crash | CC: | deadlocklegend |
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Compiled Sources | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: |
Description
Ken Johnson
2008-03-04 00:14:59 UTC
> Summary: Valgrind fails to handle interlocked instructions on
> extended registers (r8, etc) on amd64 (vex amd64->IR:
> unhandled instruction bytes: 0xF0 0x41 0xF 0xC0 0x87
> 0xB8)
It does barf, like you say, but not because it's interlocked or uses
extended registers. Merely for the more mundane reason that byte-sized
xadd was not implemented. Can you try the following patch and let me know
if it does/does not work?
Index: priv/guest-amd64/toIR.c
===================================================================
--- priv/guest-amd64/toIR.c (revision 1833)
+++ priv/guest-amd64/toIR.c (working copy)
@@ -15584,9 +15584,13 @@
/* =-=-=-=-=-=-=-=-=- XADD -=-=-=-=-=-=-=-=-=-= */
-//.. //-- case 0xC0: /* XADD Gb,Eb */
-//.. //-- eip = dis_xadd_G_E ( cb, sorb, 1, eip );
-//.. //-- break;
+ case 0xC0: { /* XADD Gb,Eb */
+ Bool decode_OK = False;
+ delta = dis_xadd_G_E ( &decode_OK, pfx, 1, delta );
+ if (!decode_OK)
+ goto decode_failure;
+ break;
+ }
case 0xC1: { /* XADD Gv,Ev */
Bool decode_OK = False;
delta = dis_xadd_G_E ( &decode_OK, pfx, sz, delta );
Yep, that seems to fix the problem. Thanks! Fixed. Fix will be in 3.3.1. *** Bug 138702 has been marked as a duplicate of this bug. *** |