mirror of
https://github.com/golang/go
synced 2024-11-24 20:30:14 -07:00
041526c6ef
This commit allows the runtime to handle 64bits addresses returned by mmap syscall on AIX. Mmap syscall returns addresses on 59bits on AIX. But the Arena implementation only allows addresses with less than 48 bits. This commit increases the arena size up to 1<<60 for aix/ppc64. Update: #25893 Change-Id: Iea72e8a944d10d4f00be915785e33ae82dd6329e Reviewed-on: https://go-review.googlesource.com/c/138736 Reviewed-by: Austin Clements <austin@google.com>
80 lines
1.3 KiB
Go
80 lines
1.3 KiB
Go
// run
|
|
|
|
// Copyright 2010 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// https://golang.org/issue/589
|
|
|
|
package main
|
|
|
|
import "unsafe"
|
|
|
|
var bug = false
|
|
|
|
var minus1 = -1
|
|
var five = 5
|
|
var big int64 = 10 | 1<<46
|
|
|
|
type block [1 << 19]byte
|
|
|
|
var g1 []block
|
|
|
|
func shouldfail(f func(), desc string) {
|
|
defer func() { recover() }()
|
|
f()
|
|
if !bug {
|
|
println("BUG")
|
|
bug = true
|
|
}
|
|
println("didn't crash: ", desc)
|
|
}
|
|
|
|
func badlen() {
|
|
g1 = make([]block, minus1)
|
|
}
|
|
|
|
func biglen() {
|
|
g1 = make([]block, big)
|
|
}
|
|
|
|
func badcap() {
|
|
g1 = make([]block, 10, minus1)
|
|
}
|
|
|
|
func badcap1() {
|
|
g1 = make([]block, 10, five)
|
|
}
|
|
|
|
func bigcap() {
|
|
g1 = make([]block, 10, big)
|
|
}
|
|
|
|
type cblock [1<<16 - 1]byte
|
|
|
|
var g4 chan cblock
|
|
|
|
func badchancap() {
|
|
g4 = make(chan cblock, minus1)
|
|
}
|
|
|
|
func bigchancap() {
|
|
g4 = make(chan cblock, big)
|
|
}
|
|
|
|
func overflowchan() {
|
|
const ptrSize = unsafe.Sizeof(uintptr(0))
|
|
g4 = make(chan cblock, 1<<(30*(ptrSize/4)))
|
|
}
|
|
|
|
func main() {
|
|
shouldfail(badlen, "badlen")
|
|
shouldfail(biglen, "biglen")
|
|
shouldfail(badcap, "badcap")
|
|
shouldfail(badcap1, "badcap1")
|
|
shouldfail(bigcap, "bigcap")
|
|
shouldfail(badchancap, "badchancap")
|
|
shouldfail(bigchancap, "bigchancap")
|
|
shouldfail(overflowchan, "overflowchan")
|
|
}
|