From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2116) id 7CE773858D35; Tue, 20 Jun 2023 16:57:30 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7CE773858D35 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1687280250; bh=b92KJcnFHzR3anvFwgC410+bHnyaSjP76TqZbBy9hz4=; h=From:To:Subject:Date:From; b=xFVawQOJHB8UMVCMY4PlIXruVpgovCQGooykrAZjNHP0ZNGzlIodqpVkWSU2X7eNi TQ3aqGIdQk42AmyAn/Cb8/mu+xhaPRcCcqbmzMg94Je2iCx0lUJXPTDSAOsaPkqaHN zSuhnc3J5YgPxA4pv7m94waw6rultpmSOiNOnHv0= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Ian Lance Taylor To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-7459] runtime: use a C function to call mmap X-Act-Checkin: gcc X-Git-Author: Ian Lance Taylor X-Git-Refname: refs/heads/releases/gcc-13 X-Git-Oldrev: 4b4a21c93406aef276fbff00d3e9491285d7b4a9 X-Git-Newrev: 4ac89ab35884906900cde8172d2db74e1d913fec Message-Id: <20230620165730.7CE773858D35@sourceware.org> Date: Tue, 20 Jun 2023 16:57:30 +0000 (GMT) List-Id: https://gcc.gnu.org/g:4ac89ab35884906900cde8172d2db74e1d913fec commit r13-7459-g4ac89ab35884906900cde8172d2db74e1d913fec Author: Ian Lance Taylor 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 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 +#include + +/* 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)