|
38 | 38 | //go:cgo_import_dynamic libc_madvise madvise "libc.a/shr_64.o"
|
39 | 39 | //go:cgo_import_dynamic libc_malloc malloc "libc.a/shr_64.o"
|
40 | 40 | //go:cgo_import_dynamic libc_mmap mmap "libc.a/shr_64.o"
|
| 41 | +//go:cgo_import_dynamic libc_mprotect mprotect "libc.a/shr_64.o" |
41 | 42 | //go:cgo_import_dynamic libc_munmap munmap "libc.a/shr_64.o"
|
42 | 43 | //go:cgo_import_dynamic libc_open open "libc.a/shr_64.o"
|
43 | 44 | //go:cgo_import_dynamic libc_pipe pipe "libc.a/shr_64.o"
|
|
77 | 78 | //go:linkname libc_madvise libc_madvise
|
78 | 79 | //go:linkname libc_malloc libc_malloc
|
79 | 80 | //go:linkname libc_mmap libc_mmap
|
| 81 | +//go:linkname libc_mprotect libc_mprotect |
80 | 82 | //go:linkname libc_munmap libc_munmap
|
81 | 83 | //go:linkname libc_open libc_open
|
82 | 84 | //go:linkname libc_pipe libc_pipe
|
@@ -118,6 +120,7 @@ var (
|
118 | 120 | libc_madvise,
|
119 | 121 | libc_malloc,
|
120 | 122 | libc_mmap,
|
| 123 | + libc_mprotect, |
121 | 124 | libc_munmap,
|
122 | 125 | libc_open,
|
123 | 126 | libc_pipe,
|
@@ -458,6 +461,15 @@ func mmap(addr unsafe.Pointer, n uintptr, prot, flags, fd int32, off uint32) (un
|
458 | 461 | return unsafe.Pointer(r), int(err0)
|
459 | 462 | }
|
460 | 463 |
|
| 464 | +//go:nosplit |
| 465 | +func mprotect(addr unsafe.Pointer, n uintptr, prot int32) (unsafe.Pointer, int) { |
| 466 | + r, err0 := syscall3(&libc_mprotect, uintptr(addr), uintptr(n), uintptr(prot)) |
| 467 | + if r == ^uintptr(0) { |
| 468 | + return nil, int(err0) |
| 469 | + } |
| 470 | + return unsafe.Pointer(r), int(err0) |
| 471 | +} |
| 472 | + |
461 | 473 | //go:nosplit
|
462 | 474 | func munmap(addr unsafe.Pointer, n uintptr) {
|
463 | 475 | r, err := syscall2(&libc_munmap, uintptr(addr), uintptr(n))
|
|
0 commit comments