From: Michael Anthony Knyszek Date: Wed, 19 Dec 2018 17:32:22 +0000 (+0000) Subject: runtime: disable TestArenaCollision on Darwin in race mode X-Git-Tag: go1.12beta2~111 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=6fcab648af59faab639f3453354a7a14c888e75c;p=gostls13.git runtime: disable TestArenaCollision on Darwin in race mode This change disables the test TestArenaCollision on Darwin in race mode to deal with the fact that Darwin 10.10 must use MAP_FIXED in race mode to ensure we retain our heap in a particular portion of the address space which the race detector needs. The test specifically checks to make sure a manually mapped region's space isn't re-used, which is definitely possible with MAP_FIXED because it replaces whatever mapping already exists at a given address. This change then also makes it so that MAP_FIXED is only used in race mode and on Darwin, not all BSDs, because using MAP_FIXED breaks this test for FreeBSD in addition to Darwin. Updates #26475. Fixes #29340. Change-Id: I1c59349408ccd7eeb30c4bf2593f48316b23ab2f Reviewed-on: https://go-review.googlesource.com/c/155097 Run-TryBot: Michael Knyszek TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- diff --git a/src/runtime/malloc_test.go b/src/runtime/malloc_test.go index f25bfa48af..a2d5864d3d 100644 --- a/src/runtime/malloc_test.go +++ b/src/runtime/malloc_test.go @@ -183,6 +183,14 @@ type acLink struct { var arenaCollisionSink []*acLink func TestArenaCollision(t *testing.T) { + if GOOS == "darwin" && race.Enabled { + // Skip this test on Darwin in race mode because Darwin 10.10 has + // issues following arena hints and runs out of them in race mode, so + // MAP_FIXED is used to ensure we keep the heap in the memory region the + // race detector expects. + // TODO(mknyszek): Delete this when Darwin 10.10 is no longer supported. + t.Skip("disabled on Darwin with race mode since MAP_FIXED is used") + } testenv.MustHaveExec(t) // Test that mheap.sysAlloc handles collisions with other diff --git a/src/runtime/mem_bsd.go b/src/runtime/mem_bsd.go index bf2d99678b..84238d7279 100644 --- a/src/runtime/mem_bsd.go +++ b/src/runtime/mem_bsd.go @@ -43,7 +43,7 @@ func sysFault(v unsafe.Pointer, n uintptr) { func sysReserve(v unsafe.Pointer, n uintptr) unsafe.Pointer { flags := int32(_MAP_ANON | _MAP_PRIVATE) - if raceenabled { + if raceenabled && GOOS == "darwin" { // Currently the race detector expects memory to live within a certain // range, and on Darwin 10.10 mmap is prone to ignoring hints, moreso // than later versions and other BSDs (#26475). So, even though it's