Bug 348574

Summary: vex amd64->IR pcmpistri SSE4.2 instruction is unsupported
Product: [Developer tools] valgrind Reporter: Lastique <andysem>
Component: vexAssignee: Julian Seward <jseward>
Status: RESOLVED FIXED    
Severity: normal    
Priority: NOR    
Version First Reported In: unspecified   
Target Milestone: ---   
Platform: Ubuntu   
OS: Linux   
Latest Commit: Version Fixed/Implemented In:
Sentry Crash Report:

Description Lastique 2015-06-02 09:14:24 UTC
==12502== Memcheck, a memory error detector
==12502== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==12502== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
==12502== Command: ./audioencoder -c ../../conf/xcoder_debug.cfg -s 8Server_i-d9fd3dd2-2f0e-4d66-b0c2-356b329c7f09\ -t\ -e\ 1.1:tcp\ -h\ 10.0.1.108\ -p\ 10200 --lock-memory 0 --Ice.ThreadPool.Server.SizeMax=50 --crash-log-dir=/home/lastique/src/xcoder/trunk/build/bin
==12502== Parent PID: 12448
==12502== 
==12502== Conditional jump or move depends on uninitialised value(s)
==12502==    at 0x4E3DF2A: ??? (in /home/lastique/xcoder-usr/lib/x86_64-linux-gnu/libasmlib.so)
==12502==    by 0xF57E04232E45F5FF: ???
==12502==    by 0xFFEFFF027: ???
==12502==    by 0x30: ???
==12502==    by 0x8: ???
==12502==    by 0xFFEFFEFD7: ???
==12502==    by 0xFFEFFF027: ???
==12502==    by 0x40A678F: ???
==12502== 
==12502== Conditional jump or move depends on uninitialised value(s)
==12502==    at 0x4E3DF2C: ??? (in /home/lastique/xcoder-usr/lib/x86_64-linux-gnu/libasmlib.so)
==12502==    by 0xF57E04232E45F5FF: ???
==12502==    by 0xFFEFFF027: ???
==12502==    by 0x30: ???
==12502==    by 0x8: ???
==12502==    by 0xFFEFFEFD7: ???
==12502==    by 0xFFEFFF027: ???
==12502==    by 0x40A678F: ???
==12502== 
vex amd64->IR: unhandled instruction bytes: 0x66 0xF 0x3A 0x63 0xC 0x6 0x18 0x77
vex amd64->IR:   REX=0 REX.W=0 REX.R=0 REX.X=0 REX.B=0
vex amd64->IR:   VEX=0 VEX.L=0 VEX.nVVVV=0x0 ESC=0F3A
vex amd64->IR:   PFX.66=1 PFX.F2=0 PFX.F3=0
==12502== valgrind: Unrecognised instruction at address 0x4e3e020.
==12502==    at 0x4E3E020: ??? (in /home/lastique/xcoder-usr/lib/x86_64-linux-gnu/libasmlib.so)
==12502==    by 0x91A6A82: __cxxabiv1::__vmi_class_type_info::__do_dyncast(long, __cxxabiv1::__class_type_info::__sub_kind, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info::__dyncast_result&) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20)
==12502==    by 0x91A3884: __dynamic_cast (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20)
==12502==    by 0x91D061F: bool std::has_facet<std::ctype<char> >(std::locale const&) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20)
==12502==    by 0x91C3FA3: std::basic_ios<char, std::char_traits<char> >::_M_cache_locale(std::locale const&) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20)
==12502==    by 0x91C414F: std::basic_ios<char, std::char_traits<char> >::init(std::basic_streambuf<char, std::char_traits<char> >*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20)
==12502==    by 0x91B5330: std::ios_base::Init::Init() (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20)
==12502==    by 0x8AF560F: _GLOBAL__sub_I_ArgVector.cpp (in /usr/lib/x86_64-linux-gnu/libIceUtil.so.3.5.1)
==12502==    by 0x40105B9: call_init.part.0 (dl-init.c:72)
==12502==    by 0x40106CA: call_init (dl-init.c:30)
==12502==    by 0x40106CA: _dl_init (dl-init.c:120)
==12502==    by 0x4000D09: ??? (in /lib/x86_64-linux-gnu/ld-2.21.so)
==12502==    by 0x8: ???
==12502== Your program just tried to execute an instruction that Valgrind
==12502== did not recognise.  There are two possible reasons for this.
==12502== 1. Your program has a bug and erroneously jumped to a non-code
==12502==    location.  If you are running Memcheck and you just saw a
==12502==    warning about a bad jump, it's probably your program's fault.
==12502== 2. The instruction is legitimate but Valgrind doesn't handle it,
==12502==    i.e. it's Valgrind's fault.  If you think this is the case or
==12502==    you are not sure, please let us know and we'll try to fix it.
==12502== Either way, Valgrind will now raise a SIGILL signal which will
==12502== probably kill your program.
==12502== 
==12502== Process terminating with default action of signal 4 (SIGILL)
==12502==  Illegal opcode at address 0x4E3E020
==12502==    at 0x4E3E020: ??? (in /home/lastique/xcoder-usr/lib/x86_64-linux-gnu/libasmlib.so)
==12502==    by 0x91A6A82: __cxxabiv1::__vmi_class_type_info::__do_dyncast(long, __cxxabiv1::__class_type_info::__sub_kind, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info::__dyncast_result&) const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20)
==12502==    by 0x91A3884: __dynamic_cast (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20)
==12502==    by 0x91D061F: bool std::has_facet<std::ctype<char> >(std::locale const&) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20)
==12502==    by 0x91C3FA3: std::basic_ios<char, std::char_traits<char> >::_M_cache_locale(std::locale const&) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20)
==12502==    by 0x91C414F: std::basic_ios<char, std::char_traits<char> >::init(std::basic_streambuf<char, std::char_traits<char> >*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20)
==12502==    by 0x91B5330: std::ios_base::Init::Init() (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20)
==12502==    by 0x8AF560F: _GLOBAL__sub_I_ArgVector.cpp (in /usr/lib/x86_64-linux-gnu/libIceUtil.so.3.5.1)
==12502==    by 0x40105B9: call_init.part.0 (dl-init.c:72)
==12502==    by 0x40106CA: call_init (dl-init.c:30)
==12502==    by 0x40106CA: _dl_init (dl-init.c:120)
==12502==    by 0x4000D09: ??? (in /lib/x86_64-linux-gnu/ld-2.21.so)
==12502==    by 0x8: ???
==12502== 
==12502== HEAP SUMMARY:
==12502==     in use at exit: 248 bytes in 15 blocks
==12502==   total heap usage: 28 allocs, 13 frees, 137,592 bytes allocated
==12502== 
==12502== LEAK SUMMARY:
==12502==    definitely lost: 0 bytes in 0 blocks
==12502==    indirectly lost: 0 bytes in 0 blocks
==12502==      possibly lost: 0 bytes in 0 blocks
==12502==    still reachable: 248 bytes in 15 blocks
==12502==         suppressed: 0 bytes in 0 blocks
==12502== Rerun with --leak-check=full to see details of leaked memory
==12502== 
==12502== For counts of detected and suppressed errors, rerun with: -v
==12502== Use --track-origins=yes to see where uninitialised values come from
==12502== ERROR SUMMARY: 100 errors from 2 contexts (suppressed: 0 from 0)

The problematic instruction is this:

66 0f 3a 63 0c 06 18  pcmpistri $0x18,(%rsi,%rax,1),%xmm1
Comment 1 Julian Seward 2015-08-13 14:20:41 UTC
Fixed, vex r3172, valgrind r15535.