| Summary: | vex amd64->IR: unhandled instruction bytes: 0xC5 0x79 0xD6 0xC0 0x4C 0x8D 0x9C 0x24 0xA0 0x2 | ||
|---|---|---|---|
| Product: | [Developer tools] valgrind | Reporter: | Julien Jorge <julien.jorge> |
| Component: | memcheck | Assignee: | Julian Seward <jseward> |
| Status: | RESOLVED FIXED | ||
| Severity: | normal | CC: | pjfloyd, raoulgough, sam |
| Priority: | NOR | ||
| Version First Reported In: | 3.22 GIT | ||
| Target Milestone: | --- | ||
| Platform: | Other | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
|
Description
Julien Jorge
2023-10-09 15:10:26 UTC
I also encounted this bug and created a simple repro. However, after building from the git head I see that the problem is now fixed. I'm guessing the fix arrived in commit 10a22445d747817932692b1c1ee3faa726121cb4 "Implement VMOVQ xmm1, xmm2/m64". The repro was actually pretty similar to one of the test cases in that commit. For the sake of completeness I've included the repro below, which gives a SIGILL up to and including valgrind 3.23.0. From my testing, it only fails when moving from a register in the xmm8-xmm15 range to the xmm0-xmm7 range. Other combinations (8-15 to 8-15 and 0-7 to 0-15) worked fine. The bytes in the original report (0xC5 0x79 0xD6 0xC0) correspond to "vmovq xmm0,xmm8" according to https://defuse.ca/online-x86-assembler.htm which seems to be using Intel argument ordering (DST, SRC) so a move from xmm8 to xmm0. void foo() { asm volatile( "vmovq %%xmm8, %%xmm7" :::); } int main() { foo(); return 1; } I just did a quick test and agree that this is now fixed. |