Hi,

On Mon, 29 Oct 2018, Bill Seurer wrote:

> >> Just for the record: am I right that any system using 44 bit of VMA will
> >> fail because
> >> anything + (1 << 44) will be out of process address space?
> > 
> > Yes.
> > 
> >> And I noticed that documentation in sanitizer_linux.cc is misleading:
> >>
> >> ...
> >> uptr GetMaxVirtualAddress() {
> >> #if (SANITIZER_NETBSD || SANITIZER_OPENBSD) && defined(__x86_64__)
> >>    return 0x7f7ffffff000ULL;  // (0x00007f8000000000 - PAGE_SIZE)
> >> #elif SANITIZER_WORDSIZE == 64
> >> # if defined(__powerpc64__) || defined(__aarch64__)
> >>    // On PowerPC64 we have two different address space layouts: 44- and
> >>    46-bit.
> >>    // We somehow need to figure out which one we are using now and choose
> >>    // one of 0x00000fffffffffffUL and 0x00003fffffffffffUL.
> >> ...
> >>
> >> That should be adjusted.
> > 
> > Apparently for ppc64 there are many different layouts now, 44, 46, 47, 49,
> > 52
> > at least depending on which kernel and page size you choose.
> > So, ideally we want some choice that works with all of them.  Shadow offset
> > 1ULL<<44 is not that choice.
> 
> We (llvm team) tried to get it to work on all the different kernels but didn't
> find anything that worked.  Finally we just went with a value that worked on
> the newer kernels as the 44 bit one was not a target of concern.

I'm still wondering what didn't work with 41 bits?  AFAICS, due to 
highshadow=highmem-offset and lowshadow=low+offset, and the existence of a 
non-empty shadow-gap, offset must be minimum(vbits)-3 (vbits being one of 
the above numbers).  Why would 41 not work for the other vbit setting?  
It would lead to a large shadow gap, but so?  If a shadow-gap isn't 
necessary then minimum(vbits)-2 would also work.


Ciao,
Michael.

Reply via email to