From be024e2a16087adf038088091ebb304355d3d421 Mon Sep 17 00:00:00 2001 From: Nuno Cruces Date: Thu, 13 Jun 2024 14:44:51 +0100 Subject: [PATCH] x/sys: add unsafe mmap, munmap, mremap Fixes golang/go#56123 --- unix/mremap.go | 5 +++++ unix/syscall_unix.go | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/unix/mremap.go b/unix/mremap.go index fd45fe52..3a5e776f 100644 --- a/unix/mremap.go +++ b/unix/mremap.go @@ -50,3 +50,8 @@ func (m *mremapMmapper) Mremap(oldData []byte, newLength int, flags int) (data [ func Mremap(oldData []byte, newLength int, flags int) (data []byte, err error) { return mapper.Mremap(oldData, newLength, flags) } + +func MremapPtr(oldAddr unsafe.Pointer, oldSize uintptr, newAddr unsafe.Pointer, newSize uintptr, flags int) (ret unsafe.Pointer, err error) { + xaddr, err := mapper.mremap(uintptr(oldAddr), oldSize, newSize, flags, uintptr(newAddr)) + return unsafe.Pointer(xaddr), err +} diff --git a/unix/syscall_unix.go b/unix/syscall_unix.go index 77081de8..88909f13 100644 --- a/unix/syscall_unix.go +++ b/unix/syscall_unix.go @@ -154,6 +154,15 @@ func Munmap(b []byte) (err error) { return mapper.Munmap(b) } +func MmapPtr(addr unsafe.Pointer, length uintptr, prot int, flags int, fd int, offset int64) (ret unsafe.Pointer, err error) { + xaddr, err := mapper.mmap(uintptr(addr), length, prot, flags, fd, offset) + return unsafe.Pointer(xaddr), err +} + +func MunmapPtr(addr unsafe.Pointer, length uintptr) (err error) { + return mapper.munmap(uintptr(addr), length) +} + func Read(fd int, p []byte) (n int, err error) { n, err = read(fd, p) if raceenabled {