From 09d970dc3f831160f89dcb0c0cd04eab70dcd7e8 Mon Sep 17 00:00:00 2001 From: Ken Sedgwick Date: Wed, 19 Aug 2015 15:02:49 -0700 Subject: [PATCH] unix: added solaris mmap, munmap and madvise. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These are needed by boltdb. Change-Id: Ie6afa51dbf6436bb014f53f6b56ee2de6a06827d Reviewed-on: https://go-review.googlesource.com/13720 Reviewed-by: Aram Hăvărneanu --- unix/syscall_solaris.go | 15 +++++++++++++++ unix/zsyscall_solaris_amd64.go | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/unix/syscall_solaris.go b/unix/syscall_solaris.go index 17da995f..ab54718f 100644 --- a/unix/syscall_solaris.go +++ b/unix/syscall_solaris.go @@ -469,6 +469,7 @@ func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) //sys Link(path string, link string) (err error) //sys Listen(s int, backlog int) (err error) = libsocket.listen //sys Lstat(path string, stat *Stat_t) (err error) +//sys Madvise(b []byte, advice int) (err error) //sys Mkdir(path string, mode uint32) (err error) //sys Mknod(path string, mode uint32, dev int) (err error) //sys Nanosleep(time *Timespec, leftover *Timespec) (err error) @@ -533,3 +534,17 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err error) { } return } + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} diff --git a/unix/zsyscall_solaris_amd64.go b/unix/zsyscall_solaris_amd64.go index 0d76034c..95cb1f65 100644 --- a/unix/zsyscall_solaris_amd64.go +++ b/unix/zsyscall_solaris_amd64.go @@ -44,6 +44,7 @@ import ( //go:cgo_import_dynamic libc_link link "libc.so" //go:cgo_import_dynamic libsocket_listen listen "libsocket.so" //go:cgo_import_dynamic libc_lstat lstat "libc.so" +//go:cgo_import_dynamic libc_madvise madvise "libc.so" //go:cgo_import_dynamic libc_mkdir mkdir "libc.so" //go:cgo_import_dynamic libc_mknod mknod "libc.so" //go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so" @@ -125,6 +126,7 @@ import ( //go:linkname procLink libc_link //go:linkname proclisten libsocket_listen //go:linkname procLstat libc_lstat +//go:linkname procMadvise libc_madvise //go:linkname procMkdir libc_mkdir //go:linkname procMknod libc_mknod //go:linkname procNanosleep libc_nanosleep @@ -207,6 +209,7 @@ var ( procLink, proclisten, procLstat, + procMadvise, procMkdir, procMknod, procNanosleep, @@ -578,6 +581,18 @@ func Lstat(path string, stat *Stat_t) (err error) { return } +func Madvise(b []byte, advice int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMadvise)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(advice), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + func Mkdir(path string, mode uint32) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path)