diff options
author | Ian Lance Taylor <iant@golang.org> | 2023-06-19 14:57:54 -0700 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2023-06-20 09:55:58 -0700 |
commit | efecb298d880cda20f8d7bea2d7b500a9752ce56 (patch) | |
tree | cb5ff167247485a62c29a27164ea4787bf94d001 /libgo/go/runtime | |
parent | 0be3a051c03965c5c0385b783837154902bc08fa (diff) | |
download | gcc-efecb298d880cda20f8d7bea2d7b500a9752ce56.zip gcc-efecb298d880cda20f8d7bea2d7b500a9752ce56.tar.gz gcc-efecb298d880cda20f8d7bea2d7b500a9752ce56.tar.bz2 |
runtime: use a C function to call mmap
The final argument to mmap, of type off_t, varies.
In CL 445375 we changed it to always use the C off_t type,
but that broke 32-bit big-endian Linux systems. On those systems,
using the C off_t type requires calling the mmap64 function.
In C this is automatically handled by the <sys/mman.h> file.
In Go, we would have to change the magic //extern comment to
call mmap64 when appropriate. Rather than try to get that right,
we instead go through a C function that uses C implicit type
conversions to pick the right type.
Fixes PR go/110297
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/504415
Diffstat (limited to 'libgo/go/runtime')
-rw-r--r-- | libgo/go/runtime/mem_gccgo.go | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/libgo/go/runtime/mem_gccgo.go b/libgo/go/runtime/mem_gccgo.go index 1e84f4f..e7b51ff 100644 --- a/libgo/go/runtime/mem_gccgo.go +++ b/libgo/go/runtime/mem_gccgo.go @@ -14,8 +14,8 @@ import ( //go:linkname sysAlloc //go:linkname sysFree -//extern mmap -func sysMmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off _libgo_off_t_type) unsafe.Pointer +//extern __go_mmap +func sysMmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off uintptr) 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, _libgo_off_t_type(off)) + p := sysMmap(addr, n, prot, flags, fd, off) if uintptr(p) == _MAP_FAILED { return nil, errno() } |