On 06/14/2015 10:22 PM, Matt Bennett wrote: > On Sun, 2015-06-14 at 22:01 -0700, John Reiser wrote: >>> mmap(0x802001000, 4194304, PROT_READ|PROT_WRITE|PROT_EXEC, >>> MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, 0, 0) = -1 EINVAL (Invalid argument) >> >> What is SHMLBA for this configuration? [grep -sr SHMLBA /usr/include] >
> /usr/include/valgrind/vki/vki-mips32-linux.h:#define VKI_SHMLBA 0x40000 > /usr/include/valgrind/vki/vki-mips64-linux.h:#define VKI_SHMLBA 0x40000 [Note that 0x40000 is 256KiB, which is rather large and likely to cause noticeable fragmentation of address space.] Notice that all those files are from /usr/include/valgrind/vki/. Your compilation environment apparently lacked the definitions that correspond to the target hardware [these for x86_64]: ----- /usr/include/bits/shm.h:#define SHM_RND 020000 /* round attach address to SHMLBA */ /usr/include/bits/shm.h:#define SHMLBA (__getpagesize ()) /usr/include/linux/shm.h:#define SHM_RND 020000 /* round attach address to SHMLBA boundary */ /usr/include/asm-generic/shmparam.h:#define SHMLBA PAGE_SIZE /* attach addr a multiple of this */ ----- > >> And on the same topic, what is the page size? [grep -sr PAGE_SIZE >> /usr/include] > > /usr/include/valgrind/pub_tool_libcbase.h:#define VG_IS_PAGE_ALIGNED(aaa_p) > (0 == (((Addr)(aaa_p)) & ((Addr)(VKI_PAGE_SIZE-1)))) > /usr/include/valgrind/pub_tool_libcbase.h:#define VG_PGROUNDDN(p) > VG_ROUNDDN(p, VKI_PAGE_SIZE) > /usr/include/valgrind/pub_tool_libcbase.h:#define VG_PGROUNDUP(p) > VG_ROUNDUP(p, VKI_PAGE_SIZE) > /usr/include/valgrind/vki/vki-mips32-linux.h:#define VKI_PAGE_SIZE > (1UL << VKI_PAGE_SHIFT) > /usr/include/valgrind/vki/vki-mips32-linux.h:#define VKI_PAGE_MASK > (~(VKI_PAGE_SIZE-1)) > /usr/include/valgrind/vki/vki-mips32-linux.h:#define VKI_MAX_PAGE_SIZE > VKI_PAGE_SIZE > /usr/include/valgrind/vki/vki-mips64-linux.h:#define VKI_PAGE_SIZE (1UL << > VKI_PAGE_SHIFT) > /usr/include/valgrind/vki/vki-mips64-linux.h:#define VKI_PAGE_MASK > (~(VKI_PAGE_SIZE-1)) > /usr/include/valgrind/vki/vki-mips64-linux.h:#define VKI_MAX_PAGE_SIZE > VKI_PAGE_SIZE Well, what is VKI_PAGE_SHIFT; and does one of {vki-mips32-linux.h, vki-mips64-linux.h} actually apply to the target machine? > >> Every successful mmap() return value happens to be a multiple of 0x2000 >> (8KiB); >> there are no odd multiples of 0x1000 (4KiB). >> [Some ARM machines have an SHMLBA of 0x4000 (16KiB) even though the page >> size is 0x1000 (4KiB).] > > This is on a MIPS chip, specifically Cavium (cnMIPS). The kernel page size is > configured to 8kB and since I didn't configure the page size when > cross compiling valgrind it looks like it took the page size of my local > machine (4kB). Looking at the upstream source code it appears that > 8kB page size isn't currently supported however there are some patches here > that may make it work. https://bugs.kde.org/show_bug.cgi?id=342356 > > Either way if this is indeed the issue here perhaps this is something that > should be fixed upstream (supporting 8k and 32k pages)? Some of the blame belongs to you and the marketing/sales/support team that sold you the chips. Sometimes inexpensive hardware is *TOO* cheap! In this case it looks like Cavium (cnMIPS) is an architectural variant that does not have all the properties previously promised by MIPS. Also, successful cross-compiling requires setting the declarations and #includes correctly. Nothing in the valgrind source can prevent operator error in this department. Therefore: arrange for the proper definitions of VKI_PAGE_SHIFT and VKI_SHMLBA, and tell us the numerical values. (Write a test program which prints them!) If valgrind attempts MAP_FIXED at an address such as 0x802001000 which is not a multiple of the hardware page size (apparently 8KiB) then that is a clue that the compilation environment is not correct. If necessary, edit the definitions by hand _after_ performing "automatic configuration" and _before_ compiling. Look carefully at ARM: /usr/include/valgrind/vki/vki-arm-linux.h:#define VKI_SHMLBA (4 * VKI_PAGE_SIZE) which does work, and contrast with your case. -- ------------------------------------------------------------------------------ _______________________________________________ Valgrind-users mailing list Valgrind-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/valgrind-users