From: Alex B. <ker...@be...> - 2005-11-02 12:20:16
|
On Wed, 2005-11-02 at 11:20 +0000, Tom Hughes wrote: > In message <113...@ok...> > Alex Bennee <ker...@be...> wrote: > > > I'm trying to run Valgrind across an x86 app that uses the modify_ldt > > syscall which seems to get in the way of Valgrind. > > <snip> > > It's not that it is used by valgrind, it is virtualised by valgrind > because it needs to alter the LDT for the virtual CPU that your code > is running on. > > <snip> > > Changing VEX_GUEST_X86_LDT_NENT in VEX/pub/libvex_guest_x86.h to > a larger number (8192 to get the full LDT) should allow your code > to work I think. Thanks. That worked and it moved forward. Unfortunately we set up the fs segment selector to point at the entry. This doesn't seem to be correctly setup under valgrind: setFS(0x3ef) checkFs(0x427ae40) ==14078== ==14078== Process terminating with default action of signal 11 (SIGSEGV): dumping core ==14078== General Protection Fault ==14078== at 0x3808BA9D: peekFs(int) (SegmentSelector.cc:88) <snip> ==14078== starting debugger with cmd: /usr/bin/gdb <snip> 0x3808ba9d in peekFs (offset=0) at SegmentSelector.cc:88 88 __asm__ volatile( (gdb) p $fs $1 = -1342177280 (gdb) p/x $2 = 0xb0000000 Vs running direct under gdb: <snip> Breakpoint 1, peekFs (offset=0) at SegmentSelector.cc:88 88 __asm__ volatile( (gdb) p $fs $1 = 1007 > > Tom -- Alex, homepage: http://www.bennee.com/~alex/ BE ALERT!!!! (The world needs more lerts ...) |