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/runtime/go-mmap.c | |
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/runtime/go-mmap.c')
-rw-r--r-- | libgo/runtime/go-mmap.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/libgo/runtime/go-mmap.c b/libgo/runtime/go-mmap.c new file mode 100644 index 0000000..b2327ba --- /dev/null +++ b/libgo/runtime/go-mmap.c @@ -0,0 +1,21 @@ +/* go-mmap.c -- functions for calling C mmap functions. + + Copyright 2023 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. */ + +#include "config.h" + +#include <stdint.h> +#include <sys/mman.h> + +/* The exact C function to call varies between mmap and mmap64, and + the size of the off_t argument also varies. Here we provide a + function that Go code can call with consistent types. */ + +void * +__go_mmap(void *addr, uintptr_t length, int32_t prot, int32_t flags, + int32_t fd, uintptr_t offset) +{ + return mmap(addr, length, prot, flags, fd, offset); +} |