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-amd64-linux.h:#define VKI_SHMLBA  VKI_PAGE_SIZE
/usr/include/valgrind/vki/vki-arm-linux.h:#define VKI_SHMLBA  (4 * 
VKI_PAGE_SIZE)
/usr/include/valgrind/vki/vki-arm64-linux.h:#define VKI_SHMLBA  (4 * 
VKI_PAGE_SIZE)
/usr/include/valgrind/vki/vki-darwin.h:#define VKI_SHMLBA       SHMLBA
/usr/include/valgrind/vki/vki-linux.h:#define VKI_SHM_RND     020000  /* round 
attach address to SHMLBA boundary */
/usr/include/valgrind/vki/vki-mips32-linux.h:#define VKI_SHMLBA  0x40000
/usr/include/valgrind/vki/vki-mips64-linux.h:#define VKI_SHMLBA  0x40000
/usr/include/valgrind/vki/vki-ppc32-linux.h:#define VKI_SHMLBA  VKI_PAGE_SIZE
/usr/include/valgrind/vki/vki-ppc64-linux.h:#define VKI_SHMLBA  VKI_PAGE_SIZE
/usr/include/valgrind/vki/vki-s390x-linux.h:#define VKI_SHMLBA  VKI_PAGE_SIZE
/usr/include/valgrind/vki/vki-x86-linux.h:#define VKI_SHMLBA  VKI_PAGE_SIZE

> 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-amd64-linux.h:#define VKI_PAGE_SIZE       (1UL << 
VKI_PAGE_SHIFT)
/usr/include/valgrind/vki/vki-amd64-linux.h:#define VKI_MAX_PAGE_SIZE   
VKI_PAGE_SIZE
/usr/include/valgrind/vki/vki-amd64-linux.h:#define VKI_SHMLBA  VKI_PAGE_SIZE
/usr/include/valgrind/vki/vki-arm-linux.h:#define VKI_PAGE_SIZE (1UL << 
VKI_PAGE_SHIFT)
/usr/include/valgrind/vki/vki-arm-linux.h:#define VKI_MAX_PAGE_SIZE     
VKI_PAGE_SIZE
/usr/include/valgrind/vki/vki-arm-linux.h:#define VKI_SHMLBA  (4 * 
VKI_PAGE_SIZE)
/usr/include/valgrind/vki/vki-arm64-linux.h:extern UWord VKI_PAGE_SIZE;
/usr/include/valgrind/vki/vki-arm64-linux.h:#define VKI_MAX_PAGE_SIZE   (1UL << 
VKI_MAX_PAGE_SHIFT)
/usr/include/valgrind/vki/vki-arm64-linux.h:// shared memory with 64 bit 
processes, VKI_PAGE_SIZE is good
/usr/include/valgrind/vki/vki-arm64-linux.h:// the old-style 16k value (4 * 
VKI_PAGE_SIZE) to be safe.
/usr/include/valgrind/vki/vki-arm64-linux.h:#define VKI_SHMLBA  (4 * 
VKI_PAGE_SIZE)
/usr/include/valgrind/vki/vki-darwin.h:#define VKI_MAX_PAGE_SIZE VKI_PAGE_SIZE
/usr/include/valgrind/vki/vki-darwin.h:#define VKI_PAGE_SIZE 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
/usr/include/valgrind/vki/vki-ppc32-linux.h:extern UWord VKI_PAGE_SIZE;
/usr/include/valgrind/vki/vki-ppc32-linux.h:#define VKI_MAX_PAGE_SIZE   (1UL << 
VKI_MAX_PAGE_SHIFT)
/usr/include/valgrind/vki/vki-ppc32-linux.h:#define VKI_SHMLBA  VKI_PAGE_SIZE
/usr/include/valgrind/vki/vki-ppc64-linux.h:extern UWord VKI_PAGE_SIZE;
/usr/include/valgrind/vki/vki-ppc64-linux.h:#define VKI_MAX_PAGE_SIZE   (1UL << 
VKI_MAX_PAGE_SHIFT)
/usr/include/valgrind/vki/vki-ppc64-linux.h:#define VKI_SHMLBA  VKI_PAGE_SIZE
/usr/include/valgrind/vki/vki-s390x-linux.h:#define VKI_PAGE_SIZE   (1UL << 
VKI_PAGE_SHIFT)
/usr/include/valgrind/vki/vki-s390x-linux.h:#define VKI_MAX_PAGE_SIZE   
VKI_PAGE_SIZE
/usr/include/valgrind/vki/vki-s390x-linux.h:#define VKI_SHMLBA  VKI_PAGE_SIZE
/usr/include/valgrind/vki/vki-x86-linux.h:#define VKI_PAGE_SIZE (1UL << 
VKI_PAGE_SHIFT)
/usr/include/valgrind/vki/vki-x86-linux.h:#define VKI_MAX_PAGE_SIZE     
VKI_PAGE_SIZE
/usr/include/valgrind/vki/vki-x86-linux.h:#define VKI_SHMLBA  VKI_PAGE_SIZE

> 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)? 

> 
> Construct a standalone test program whose sole action is that call to mmap().
> Does the mmap() succeed there?
> 

------------------------------------------------------------------------------
_______________________________________________
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to