-
Notifications
You must be signed in to change notification settings - Fork 263
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Encoding failure while instrumenting data16 div %di #1127
Comments
From [email protected] on February 12, 2013 08:17:29 Callstack where we create the bad mov_ld: (gdb) set print pretty off The important bit is: #10 0x738534cc in add_dst_shadow_write() at ../drmemory/fastpath.c:3162 This is the first of the two register dsts of the div instr. |
From [email protected] on February 12, 2013 10:05:01 Derek, can you take a look at this? In the test case in the attached diff, we have a divw %di %ax %dx -> %ax %dx instruction. The execution is something like:
I'm not familiar with this code and it seems like the wrong time to start learning it. I spent a few hours on it but I can't figure out what's supposed to happen on this 3src 2dst 2-byte ALU op. Owner: [email protected] Attachment: divw-test.diff |
From [email protected] on February 14, 2013 11:21:20 This issue was closed by revision r1177 . Status: Fixed |
From [email protected] on February 11, 2013 16:04:42
Splitting from issue #626 .
We seem to generate bad instrumentation on div %di. DR's disas of this instr:
0xf6937cfd 66 f7 f7 data16 div %di %dx %ax -> %dx %ax
I can add a minimal repro to registers.c and get the same encoding failure:
<Application /usr/local/google/home/rnk/drmemory/build/tests/registers (887) DynamoRIO usage error : instr_encode error: no encoding found>
We're trying to generate something like this:
+255 m4 @0x4eb0d100 64 8a 15 53 00 00 00 mov %fs:0x00000053 -> %dl
+262 m4 @0x4eb0cb40 64 0a 15 4c 00 00 00 or %fs:0x0000004c %dl -> %dl
+269 m4 @0x4eb0d180 8a ca mov %dl -> %cl
+271 m4 @0x4eb0cf9c 80 e1 0f and $0x0f %cl -> %cl
+274 m4 @0x4eb0cfe8 64 8a 2d 4e 00 00 00 mov %fs:0x0000004e -> %ch
+281 m4 @0x4eb0d034 0a cd or %ch %cl -> %cl
+283 m4 @0x4eb0cf5c 64 08 0d 4e 00 00 00 or %cl %fs:0x0000004e -> %fs:0x0000004e
+290 m4 @0x4eb0ca40 80 e1 0f and $0x0f %cl -> %cl
+293 m4 @0x4eb0d074 64 88 0d 54 00 00 00 mov %cl -> %fs:0x00000054
The instr is OP_mov_ld %cl -> (null opnd).
So we're trying to save shadow bits to a null shadow operand or something.
I need to run the minimal repro at a high log level to get more info.
Original issue: http://code.google.com/p/drmemory/issues/detail?id=1127
The text was updated successfully, but these errors were encountered: