mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-05 03:26:58 +08:00
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
22 lines
648 B
C
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);
|
|
}
|