Attempting to use valgrind on my system gives me an 'unrecognised instruction' 
error.  I am reasonably sure that it's a valgrind issue

Minimal working example:
----------------
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main(int argc, char* argv[]) {
        double val = atof(argv[1]);
        printf("the log of %lf is %lf\n", val, log(val));
        return 0;
}
-----------------------
Compiled and executed with:
$ gcc -o logtest logtest.c -lm
$ ./logtest 32
the log of 32.000000 is 3.465736
$ valgrind --tool=callgrind ./logtest 32
==25013== Callgrind, a call-graph generating cache profiler
==25013== Copyright (C) 2002-2012, and GNU GPL'd, by Josef Weidendorfer et al.
==25013== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==25013== Command: ./logtest 32
==25013== 
==25013== For interactive control, run 'callgrind_control -h'.
vex amd64->IR: unhandled instruction bytes: 0xC4 0xE3 0xD9 0x6B 0x3D 0x4E 0x19 
0x6
vex amd64->IR:   REX=0 REX.W=1 REX.R=0 REX.X=0 REX.B=0
vex amd64->IR:   VEX=1 VEX.L=0 VEX.nVVVV=0x4 ESC=0F3A
vex amd64->IR:   PFX.66=1 PFX.F2=0 PFX.F3=0
==25013== valgrind: Unrecognised instruction at address 0x4c37a00.
==25013==    at 0x4C37A00: __ieee754_log_sse2 (in /lib64/libm-2.15.so)
==25013==    by 0x400674: main (in /home/jkingsley/foo/logtest)
==25013== Your program just tried to execute an instruction that Valgrind
==25013== did not recognise.  There are two possible reasons for this.
==25013== 1. Your program has a bug and erroneously jumped to a non-code
==25013==    location.  If you are running Memcheck and you just saw a
==25013==    warning about a bad jump, it's probably your program's fault.
==25013== 2. The instruction is legitimate but Valgrind doesn't handle it,
==25013==    i.e. it's Valgrind's fault.  If you think this is the case or
==25013==    you are not sure, please let us know and we'll try to fix it.
==25013== Either way, Valgrind will now raise a SIGILL signal which will
==25013== probably kill your program.
==25013== 
==25013== Process terminating with default action of signal 4 (SIGILL)
==25013==  Illegal opcode at address 0x4C37A00
==25013==    at 0x4C37A00: __ieee754_log_sse2 (in /lib64/libm-2.15.so)
==25013==    by 0x400674: main (in /home/jkingsley/foo/logtest)
==25013== 
==25013== Events    : Ir
==25013== Collected : 116873
==25013== 
==25013== I   refs:      116,873
Illegal instruction
------------------------
Other tools have the same issue.

I am running this on a AMD FX(tm)-8150, and libm would have been compiled with 
gcc 4.6.3  `-O2 -pipe -march=native -mtune=native`, which gives settings flags
$ gcc -c -Q -march=native --help=target
The following options are target specific:
  -m128bit-long-double                  [disabled]
  -m32                                  [disabled]
  -m3dnow                               [disabled]
  -m3dnowa                              [disabled]
  -m64                                  [enabled]
  -m80387                               [enabled]
  -m8bit-idiv                           [disabled]
  -m96bit-long-double                   [enabled]
  -mabi=                                
  -mabm                                 [enabled]
  -maccumulate-outgoing-args            [disabled]
  -maes                                 [enabled]
  -malign-double                        [disabled]
  -malign-functions=                    
  -malign-jumps=                        
  -malign-loops=                        
  -malign-stringops                     [enabled]
  -mandroid                             [disabled]
  -march=                               bdver1
  -masm=                                
  -mavx                                 [enabled]
  -mavx256-split-unaligned-load         [disabled]
  -mavx256-split-unaligned-store        [disabled]
  -mbionic                              [disabled]
  -mbmi                                 [disabled]
  -mbranch-cost=                        
  -mcld                                 [disabled]
  -mcmodel=                             
  -mcpu=                                
  -mcrc32                               [disabled]
  -mcx16                                [enabled]
  -mdispatch-scheduler                  [disabled]
  -mf16c                                [disabled]
  -mfancy-math-387                      [enabled]
  -mfentry                              [enabled]
  -mfma                                 [disabled]
  -mfma4                                [enabled]
  -mforce-drap                          [disabled]
  -mfp-ret-in-387                       [enabled]
  -mfpmath=                             
  -mfsgsbase                            [disabled]
  -mfused-madd                          
  -mglibc                               [enabled]
  -mhard-float                          [enabled]
  -mieee-fp                             [enabled]
  -mincoming-stack-boundary=            
  -minline-all-stringops                [disabled]
  -minline-stringops-dynamically        [disabled]
  -mintel-syntax                        
  -mlarge-data-threshold=               
  -mlwp                                 [enabled]
  -mmmx                                 [disabled]
  -mmovbe                               [disabled]
  -mms-bitfields                        [disabled]
  -mno-align-stringops                  [disabled]
  -mno-fancy-math-387                   [disabled]
  -mno-push-args                        [disabled]
  -mno-red-zone                         [disabled]
  -mno-sse4                             [disabled]
  -momit-leaf-frame-pointer             [disabled]
  -mpc                                  
  -mpclmul                              [enabled]
  -mpopcnt                              [enabled]
  -mprefer-avx128                       [disabled]
  -mpreferred-stack-boundary=           
  -mpush-args                           [enabled]
  -mrdrnd                               [disabled]
  -mrecip                               [disabled]
  -mred-zone                            [enabled]
  -mregparm=                            
  -mrtd                                 [disabled]
  -msahf                                [enabled]
  -msoft-float                          [disabled]
  -msse                                 [enabled]
  -msse2                                [enabled]
  -msse2avx                             [disabled]
  -msse3                                [enabled]
  -msse4                                [enabled]
  -msse4.1                              [enabled]
  -msse4.2                              [enabled]
  -msse4a                               [enabled]
  -msse5                                
  -msseregparm                          [disabled]
  -mssse3                               [enabled]
  -mstack-arg-probe                     [disabled]
  -mstackrealign                        [enabled]
  -mstringop-strategy=                  
  -mtbm                                 [disabled]
  -mtls-dialect=                        
  -mtls-direct-seg-refs                 [enabled]
  -mtune=                               bdver1
  -muclibc                              [disabled]
  -mveclibabi=                          
  -mvect8-ret-in-mem                    [disabled]
  -mvzeroupper                          [disabled]
  -mxop                                 [enabled]
---------------------

Any suggestions on fixing this?  I'm not entirely sure how I would go about 
making a valgrind-friendly libm, and don't really want to recompile my system 
without SSE just to do a bit of debugging...

Thanks,
James Kingsley
------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead. 
Download for free and get started troubleshooting in minutes. 
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
_______________________________________________
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to