Bug 292300

Summary: unhandled instruction, vmovd in 32bit
Product: [Developer tools] valgrind Reporter: Daniel Mierswa <impulze>
Component: generalAssignee: Julian Seward <jseward>
Status: RESOLVED DUPLICATE    
Severity: normal CC: tom
Priority: NOR    
Version: 3.7 SVN   
Target Milestone: ---   
Platform: Compiled Sources   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:
Attachments: disassembly of _dl_sysdep_start

Description Daniel Mierswa 2012-01-23 22:49:50 UTC
Created attachment 68122 [details]
disassembly of _dl_sysdep_start

Version:           3.7 SVN
OS:                Linux

As per request I'm opening a bug report regarding an unhandled instruction in my 32bit dynamic linker on my 64bit operating system.
The bug appeared with valgrind 3.8.0 svn.

 $ /lib32/libc.so.6 
GNU C Library stable release version 2.13, by Roland McGrath et al.
[...]
Compiled by GNU CC version 4.6.2.
Compiled on a Linux 3.1.0 system on 2012-01-23.
Available extensions:
	crypt add-on version 2.1 by Michael Glad and others
	GNU Libidn by Simon Josefsson
	Native POSIX Threads Library by Ulrich Drepper et al
	Support for some architectures added on, not maintained in glibc core.
	BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC

The problem occurs when trying to memcheck anything that uses the 32bit dynamic linker, example given:
vex x86->IR: unhandled instruction bytes: 0xC5 0xF9 0x6E 0x40
==29048== valgrind: Unrecognised instruction at address 0x44143d0.
==29048==    at 0x44143D0: _dl_sysdep_start (dl-sysdep.c:160)
==29048==    by 0x4404C47: _dl_start (rtld.c:336)
==29048==    by 0x4401096: ??? (in /lib32/ld-2.13.so)

Compiling glibc with -mno-avx (or rather -march=icore7 instead of -march=icore7-avx) results in another standard library with the same symptoms:
vex x86->IR: unhandled instruction bytes: 0xC5 0xF9 0x6E 0x44
==3382== valgrind: Unrecognised instruction at address 0x5358a90.
==3382==    at 0x5358A90: std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::_M_sync(char*, unsigned int, unsigned int) (in /usr/lib32/libstdc++.so.6.0.16)

Attached you will find the disassembly of the _dl_sysdep_start function from glibc.

The mailing list discussion can be found here:
http://thread.gmane.org/gmane.comp.debugging.valgrind/11879

Reproducible: Didn't try

Steps to Reproduce:
Simply memcheck any 32bit program on a multibuild system where library used was build with avx instructions.


Expected Results:  
Well, valgrind handling the instruction.
Comment 1 Tom Hughes 2012-01-24 00:40:17 UTC
This is an AVX instruction, which isn't supported yet.

*** This bug has been marked as a duplicate of bug 273475 ***