Browse Source

unix: added solaris mmap, munmap and madvise.

These are needed by boltdb.

Change-Id: Ie6afa51dbf6436bb014f53f6b56ee2de6a06827d
Reviewed-on: https://go-review.googlesource.com/13720
Reviewed-by: Aram Hăvărneanu <aram@mgk.ro>
Ken Sedgwick 10 năm trước cách đây
mục cha
commit
09d970dc3f
2 tập tin đã thay đổi với 30 bổ sung0 xóa
  1. 15 0
      unix/syscall_solaris.go
  2. 15 0
      unix/zsyscall_solaris_amd64.go

+ 15 - 0
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)
+}

+ 15 - 0
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)