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