gcc/libgo/runtime/go-mmap.c
Ian Lance Taylor efecb298d8 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
2023-06-20 09:55:58 -07:00

22 lines
648 B
C

/* 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);
}