diff options
author | Ian Lance Taylor <iant@golang.org> | 2022-10-26 17:23:42 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2022-10-27 17:12:57 -0700 |
commit | 0a2984dd10598ba091b8e992145998fb1640a9b8 (patch) | |
tree | a2975255a183f1a29d1b864c8c82d10516ca10b6 /libgo/go | |
parent | fc01cfa96786ba94077e45c475768f38592e63cf (diff) | |
download | gcc-0a2984dd10598ba091b8e992145998fb1640a9b8.zip gcc-0a2984dd10598ba091b8e992145998fb1640a9b8.tar.gz gcc-0a2984dd10598ba091b8e992145998fb1640a9b8.tar.bz2 |
runtime: use _libgo_off_t_type when calling C mmap
The last argument to the C mmap function is type off_t, not uintptr.
On some 32-bit systems, off_t is larger than uintptr.
Based on patch by Sören Tempel.
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/445735
Diffstat (limited to 'libgo/go')
-rw-r--r-- | libgo/go/runtime/mem_gccgo.go | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/libgo/go/runtime/mem_gccgo.go b/libgo/go/runtime/mem_gccgo.go index fa3389d..1e84f4f 100644 --- a/libgo/go/runtime/mem_gccgo.go +++ b/libgo/go/runtime/mem_gccgo.go @@ -15,7 +15,7 @@ import ( //go:linkname sysFree //extern mmap -func sysMmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off uintptr) unsafe.Pointer +func sysMmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off _libgo_off_t_type) unsafe.Pointer //extern munmap func munmap(addr unsafe.Pointer, length uintptr) int32 @@ -38,7 +38,7 @@ func init() { } func mmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off uintptr) (unsafe.Pointer, int) { - p := sysMmap(addr, n, prot, flags, fd, off) + p := sysMmap(addr, n, prot, flags, fd, _libgo_off_t_type(off)) if uintptr(p) == _MAP_FAILED { return nil, errno() } @@ -47,6 +47,7 @@ func mmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off uintptr) (u // Don't split the stack as this method may be invoked without a valid G, which // prevents us from allocating more stack. +// //go:nosplit func sysAlloc(n uintptr, sysStat *sysMemStat) unsafe.Pointer { p, err := mmap(nil, n, _PROT_READ|_PROT_WRITE, _MAP_ANON|_MAP_PRIVATE, mmapFD, 0) @@ -165,6 +166,7 @@ func sysHugePage(v unsafe.Pointer, n uintptr) { // Don't split the stack as this function may be invoked without a valid G, // which prevents us from allocating more stack. +// //go:nosplit func sysFree(v unsafe.Pointer, n uintptr, sysStat *sysMemStat) { sysStat.add(-int64(n)) |