PING.

soe...@soeren-tempel.net wrote:
> From: Sören Tempel <soe...@soeren-tempel.net>
> 
> On glibc-based systems, off_t is a 32-bit type on 32-bit systems and a
> 64-bit type on 64-bit systems by default. However, on systems using musl
> libc off_t is unconditionally a 64-bit type. As such, it is insufficient
> to use a uintptr type for the mmap offset parameter.
> 
> Presently, the (incorrect) mmap declaration causes a libgo run-time
> failure on 32-bit musl systems (fatal error: runtime: cannot allocate
> memory). This commit fixes this run-time error.
> 
> Signed-off-by: Sören Tempel <soe...@soeren-tempel.net>
> ---
> This implements what has been proposed by Ian in a GitHub comment
> https://github.com/golang/go/issues/51280#issuecomment-1046322011
> 
> I don't have access to a 32-bit glibc system to test this on but
> this does seem to work fine on 32-bit and 64-bit musl systems.
> 
>  libgo/go/runtime/mem_gccgo.go | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/libgo/go/runtime/mem_gccgo.go b/libgo/go/runtime/mem_gccgo.go
> index fa3389d8..07bf325a 100644
> --- a/libgo/go/runtime/mem_gccgo.go
> +++ b/libgo/go/runtime/mem_gccgo.go
> @@ -15,7 +15,7 @@ import (
>  //go:linkname sysFree
>  
>  //extern mmap
> -func sysMmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off 
> uintptr) unsafe.Pointer
> +func sysMmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off 
> _off_t) 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, off)
> +     p := sysMmap(addr, n, prot, flags, fd, _off_t(off))
>       if uintptr(p) == _MAP_FAILED {
>               return nil, errno()
>       }

Reply via email to