On 05/08/14 10:08, Chris Jones wrote:

> I have an application that is causing valgrind to seg. fault, but runs
> just fine natively. The seg. fault is below. This is using the SVN trunk
> build of valgrind as of an hour or so ago (revision 14231).
>
> The primary message to me seems to be
>
> vex amd64->IR: unhandled instruction bytes: 0xFF 0xFF 0xFF 0xFF 0xFF
> 0xFF 0xFF 0xFF
> 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=NONE
> vex amd64->IR:   PFX.66=0 PFX.F2=0 PFX.F3=0
>
> http://valgrind.org/docs/manual/faq.html
>
> Seems to suggest this could be one of two things; an error in the
> application (but then it runs fine outside valgrind) or an error in
> valgrind. Does anyone have any insights into which one this is here ?

Firstly that's not a seg fault. It's a valgrind error telling you it has 
been asked to execute code that it can't make sense of.

That's not really surprising given that I'm pretty sure that a string of 
0xff bytes is not a valid x86 instruction.

Fortunately valgrind has already told you exactly where the problem is:

> ==23684== Jump to the invalid address stated on the next line
> ==23684==    at 0x2F769650: ???
> ==23684==    by 0xFFEFEFFEF: ???
> ==23684==    by 0x13E72601: ???
> ==23684==    by 0x1151A3FF: ???
> ==23684==    by 0x12E89588: clang::Decl::getASTContext() const (in
> /afs/cern.ch/sw/lcg/releases/ROOT/6.00.02-1c3e2/x86_64-slc6-gcc48-opt/lib/libCling.so)

So you have jumped to an invalid address at 0x2f769650...

> ==23684==  Address 0x2f769650 is 0 bytes inside a block of size 32 alloc'd
> ==23684==    at 0x4A07FD5: operator new(unsigned long)
> (vg_replace_malloc.c:326)
> ==23684==    by 0x13E725DB: ???
> ==23684==    by 0x125E3AE5: TClingCallFunc::exec(void*, void*) const (in
> /afs/cern.ch/sw/lcg/releases/ROOT/6.00.02-1c3e2/x86_64-slc6-gcc48-opt/lib/libCling.so)

...and that address is in a block of dynamically allocated memory.

Which means that you are presumably dealing with a program that 
generates code on the fly, and you will need to use --smc-check to tell 
valgrind where it should expect the find self modifying code like this.

It defaults to only checking for it on the stack, so you will probably 
need to change it by using --smc-check=all-non-file so that it will 
check the heap as well. That will slow things down a bit but it should 
hopefully solve your problem.

Tom

-- 
Tom Hughes (t...@compton.nu)
http://compton.nu/

------------------------------------------------------------------------------
Infragistics Professional
Build stunning WinForms apps today!
Reboot your WinForms applications with our WinForms controls. 
Build a bridge from your legacy apps to the future.
http://pubads.g.doubleclick.net/gampad/clk?id=153845071&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