aboutsummaryrefslogtreecommitdiff
path: root/libgo/runtime/go-mmap.c
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2023-06-19 14:57:54 -0700
committerIan Lance Taylor <iant@golang.org>2023-06-20 09:55:58 -0700
commitefecb298d880cda20f8d7bea2d7b500a9752ce56 (patch)
treecb5ff167247485a62c29a27164ea4787bf94d001 /libgo/runtime/go-mmap.c
parent0be3a051c03965c5c0385b783837154902bc08fa (diff)
downloadgcc-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.c21
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);
+}