Bug 292300 - unhandled instruction, vmovd in 32bit
Summary: unhandled instruction, vmovd in 32bit
Status: RESOLVED DUPLICATE of bug 273475
Alias: None
Product: valgrind
Classification: Developer tools
Component: general (show other bugs)
Version: 3.7 SVN
Platform: Compiled Sources Linux
: NOR normal
Target Milestone: ---
Assignee: Julian Seward
Depends on:
Reported: 2012-01-23 22:49 UTC by Daniel Mierswa
Modified: 2012-01-24 00:40 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:

disassembly of _dl_sysdep_start (14.02 KB, text/plain)
2012-01-23 22:49 UTC, Daniel Mierswa

Note You need to log in before you can comment on or make changes to this bug.
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.

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:

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 ***