public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r13-7459] runtime: use a C function to call mmap
@ 2023-06-20 16:57 Ian Lance Taylor
  0 siblings, 0 replies; only message in thread
From: Ian Lance Taylor @ 2023-06-20 16:57 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:4ac89ab35884906900cde8172d2db74e1d913fec

commit r13-7459-g4ac89ab35884906900cde8172d2db74e1d913fec
Author: Ian Lance Taylor <iant@golang.org>
Date:   Tue Jun 20 09:56:34 2023 -0700

    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

Diff:
---
 libgo/Makefile.am             |  1 +
 libgo/Makefile.in             | 22 +++++++++++++---------
 libgo/go/runtime/mem_gccgo.go |  6 +++---
 libgo/runtime/go-mmap.c       | 21 +++++++++++++++++++++
 libgo/runtime/runtime.h       |  3 ---
 5 files changed, 38 insertions(+), 15 deletions(-)

diff --git a/libgo/Makefile.am b/libgo/Makefile.am
index 207d5a98127..920f8cc7071 100644
--- a/libgo/Makefile.am
+++ b/libgo/Makefile.am
@@ -462,6 +462,7 @@ runtime_files = \
 	runtime/go-memclr.c \
 	runtime/go-memmove.c \
 	runtime/go-memequal.c \
+	runtime/go-mmap.c \
 	runtime/go-nanotime.c \
 	runtime/go-now.c \
 	runtime/go-nosys.c \
diff --git a/libgo/Makefile.in b/libgo/Makefile.in
index 0ff6ff4a5c5..6176eb58272 100644
--- a/libgo/Makefile.in
+++ b/libgo/Makefile.in
@@ -246,15 +246,15 @@ am__objects_4 = runtime/aeshash.lo runtime/go-assert.lo \
 	runtime/go-construct-map.lo runtime/go-ffi.lo \
 	runtime/go-fieldtrack.lo runtime/go-matherr.lo \
 	runtime/go-memclr.lo runtime/go-memmove.lo \
-	runtime/go-memequal.lo runtime/go-nanotime.lo \
-	runtime/go-now.lo runtime/go-nosys.lo runtime/go-strerror.lo \
-	runtime/go-reflect-call.lo runtime/go-setenv.lo \
-	runtime/go-signal.lo runtime/go-unsafe-pointer.lo \
-	runtime/go-unsetenv.lo runtime/go-unwind.lo \
-	runtime/go-varargs.lo runtime/env_posix.lo runtime/panic.lo \
-	runtime/print.lo runtime/proc.lo runtime/runtime_c.lo \
-	runtime/stack.lo runtime/yield.lo $(am__objects_2) \
-	$(am__objects_3)
+	runtime/go-memequal.lo runtime/go-mmap.lo \
+	runtime/go-nanotime.lo runtime/go-now.lo runtime/go-nosys.lo \
+	runtime/go-strerror.lo runtime/go-reflect-call.lo \
+	runtime/go-setenv.lo runtime/go-signal.lo \
+	runtime/go-unsafe-pointer.lo runtime/go-unsetenv.lo \
+	runtime/go-unwind.lo runtime/go-varargs.lo \
+	runtime/env_posix.lo runtime/panic.lo runtime/print.lo \
+	runtime/proc.lo runtime/runtime_c.lo runtime/stack.lo \
+	runtime/yield.lo $(am__objects_2) $(am__objects_3)
 am_libgo_llgo_la_OBJECTS = $(am__objects_4)
 libgo_llgo_la_OBJECTS = $(am_libgo_llgo_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
@@ -914,6 +914,7 @@ runtime_files = \
 	runtime/go-memclr.c \
 	runtime/go-memmove.c \
 	runtime/go-memequal.c \
+	runtime/go-mmap.c \
 	runtime/go-nanotime.c \
 	runtime/go-now.c \
 	runtime/go-nosys.c \
@@ -1385,6 +1386,8 @@ runtime/go-memmove.lo: runtime/$(am__dirstamp) \
 	runtime/$(DEPDIR)/$(am__dirstamp)
 runtime/go-memequal.lo: runtime/$(am__dirstamp) \
 	runtime/$(DEPDIR)/$(am__dirstamp)
+runtime/go-mmap.lo: runtime/$(am__dirstamp) \
+	runtime/$(DEPDIR)/$(am__dirstamp)
 runtime/go-nanotime.lo: runtime/$(am__dirstamp) \
 	runtime/$(DEPDIR)/$(am__dirstamp)
 runtime/go-now.lo: runtime/$(am__dirstamp) \
@@ -1454,6 +1457,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-memclr.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-memequal.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-memmove.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-mmap.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-nanotime.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-nosys.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@runtime/$(DEPDIR)/go-now.Plo@am__quote@
diff --git a/libgo/go/runtime/mem_gccgo.go b/libgo/go/runtime/mem_gccgo.go
index 1e84f4f5c56..e7b51ff37cc 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()
 	}
diff --git a/libgo/runtime/go-mmap.c b/libgo/runtime/go-mmap.c
new file mode 100644
index 00000000000..b2327ba68f5
--- /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);
+}
diff --git a/libgo/runtime/runtime.h b/libgo/runtime/runtime.h
index b3dc4fd2414..699770d53ad 100644
--- a/libgo/runtime/runtime.h
+++ b/libgo/runtime/runtime.h
@@ -355,9 +355,6 @@ bool	runtime_notetsleepg(Note*, int64)  // false - timeout
 /*
  * low level C-called
  */
-#define runtime_mmap mmap
-#define runtime_munmap munmap
-#define runtime_madvise madvise
 #define runtime_memclr(buf, size) __builtin_memset((buf), 0, (size))
 #define runtime_getcallerpc() __builtin_return_address(0)

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-06-20 16:57 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-06-20 16:57 [gcc r13-7459] runtime: use a C function to call mmap Ian Lance Taylor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).