paulfloyd / freebsd_valgrind

Git repo used to Upstream the FreeBSD Port of Valgrind
GNU General Public License v2.0
15 stars 4 forks source link

Fix self hosting [i386] #84

Open paulfloyd opened 4 years ago

paulfloyd commented 4 years ago

Self hosting on i386 just produces 1000 errors then terminates.

paulfloyd commented 4 years ago

Linux setup_client_stack has, at the end of the function

/* Record stack extent -- needed for stack-change code. */
     VG_(clstk_start_base) = anon_start -inner_HACK;
     VG_(clstk_end)  = VG_(clstk_start_base) + anon_size +inner_HACK -1;

But on FreeBSD this is just

   /* Record stack extent -- needed for stack-change code. */
   VG_(clstk_start_base) = clstack_start;
   VG_(clstk_end)  = clstack_end;
paulfloyd commented 4 years ago

The above change doesn't seem to help much.

I also see that the vg-in-place script used dirname, which uses capability mode.

paulfloyd commented 3 years ago

Haven't tried this for a while. With a GCC built outer and clang built inner I get

Warning: client switching stacks? SP change: 0xfbbfeb00 --> 0x282ceb90 to suppress, use: --max-stackframe=745341072 or greater

Linux also generates the message above

valgrind: mmap(0x4caf000, 20480) failed in UME with error 22 (Invalid argument). valgrind: this can be caused by executables with very large text, data or bss segments.

With -d -d on the inner I see

--3270:2: aspacem 9: ANON 0004c7f000-0004caefff 196608 rwx-- --3270:2: aspacem 10: 0004caf000-0004d5bfff 708608 --3270:2: aspacem 11: ANON 0004d5c000-0004e5bfff 1048576 rwx--

so this request should work according to the inner.

However according to the outer

--3293:1: aspacem 13: ANON 0004c20000-00051c2fff 5910528 rwx--