svn commit: r280327 - in head/sys: kern vm

Konstantin Belousov kostikbel at gmail.com
Mon Mar 30 09:12:27 UTC 2015


On Sun, Mar 29, 2015 at 11:25:14PM -0700, Don Lewis wrote:
> On amd64, with an amd64 jail, and kernel rev r280326, I observe the
> following:
> 	One gcc process calls mmap() with addr=0 and len=0x657a000, and
>         the value 0x811400000 is returned.  Subsequent gcc processes
>         call mmap() with addr=0x811400000 and len=0x657a000, getting
>         0x811400000 in return.
> 
> With kernel rev r280327 I see:
> 	One gcc process calls mmap() with addr=0 and len=0x657a000, and
> 	the value 0x811400000 is returned.  Subsequent gcc processes
> 	call mmap() with addr=0x811400000 and len=0x657a000, getting
> 	0x8115f4000 in return.  What I later noticed is that the subsequent
> 	calls are passing offset=0x1f4000.  Not so coincidentally,
> 	0x811400000 + 0x1f4000 = 0x8115F4000.
> 
> My first attempt at a fix subtracted offset from address, but the mmap()
> return value changed to 0x8113f4000 instead of the 0x811400000 I was
> expecting.  It looked to me like the code must be doing superpage
> alignment on the start of the file and then adding the offset to get the
> start of the mapped region.
So the real fix is to make gcc pass MAP_FIXED.

> 
> This somewhat hacking patch disables this alignment if a non-zero
> address is passed as a hint, and allows the code to make the start of
> the mapped region match the hint.  With this patch, I've been able to
> build openjdk7 in a FreeBSD 9.3 amd64 jail.
> 
This is for precompiled headers, right ?  Could port disable pch ?


More information about the svn-src-head mailing list