Implement getpagesize and munmap. For go 1.18.
Этот коммит содержится в:
		
							родитель
							
								
									06b19cde2d
								
							
						
					
					
						коммит
						cf8f4d65f2
					
				
					 2 изменённых файлов: 43 добавлений и 0 удалений
				
			
		
							
								
								
									
										23
									
								
								src/syscall/mmap_unix_test.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										23
									
								
								src/syscall/mmap_unix_test.go
									
										
									
									
									
										Обычный файл
									
								
							|  | @ -0,0 +1,23 @@ | ||||||
|  | // Copyright 2014 The Go Authors. All rights reserved. | ||||||
|  | // Use of this source code is governed by a BSD-style | ||||||
|  | // license that can be found in the LICENSE file. | ||||||
|  | 
 | ||||||
|  | //go:build darwin || linux | ||||||
|  | // +build darwin linux | ||||||
|  | 
 | ||||||
|  | package syscall_test | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"syscall" | ||||||
|  | 	"testing" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func TestMmap(t *testing.T) { | ||||||
|  | 	b, err := syscall.Mmap(-1, 0, syscall.Getpagesize(), syscall.PROT_NONE, syscall.MAP_ANON|syscall.MAP_PRIVATE) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Fatalf("Mmap: %v", err) | ||||||
|  | 	} | ||||||
|  | 	if err := syscall.Munmap(b); err != nil { | ||||||
|  | 		t.Fatalf("Munmap: %v", err) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | @ -226,6 +226,14 @@ func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, e | ||||||
| 	return (*[1 << 30]byte)(addr)[:length:length], nil | 	return (*[1 << 30]byte)(addr)[:length:length], nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func Munmap(b []byte) (err error) { | ||||||
|  | 	errCode := libc_munmap(unsafe.Pointer(&b[0]), uintptr(len(b))) | ||||||
|  | 	if errCode != 0 { | ||||||
|  | 		err = getErrno() | ||||||
|  | 	} | ||||||
|  | 	return err | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func Mprotect(b []byte, prot int) (err error) { | func Mprotect(b []byte, prot int) (err error) { | ||||||
| 	errCode := libc_mprotect(unsafe.Pointer(&b[0]), uintptr(len(b)), int32(prot)) | 	errCode := libc_mprotect(unsafe.Pointer(&b[0]), uintptr(len(b)), int32(prot)) | ||||||
| 	if errCode != 0 { | 	if errCode != 0 { | ||||||
|  | @ -234,6 +242,10 @@ func Mprotect(b []byte, prot int) (err error) { | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func Getpagesize() int { | ||||||
|  | 	return int(libc_getpagesize()) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func Environ() []string { | func Environ() []string { | ||||||
| 
 | 
 | ||||||
| 	// This function combines all the environment into a single allocation. | 	// This function combines all the environment into a single allocation. | ||||||
|  | @ -343,10 +355,18 @@ func libc_dup(fd int32) int32 | ||||||
| //export mmap | //export mmap | ||||||
| func libc_mmap(addr unsafe.Pointer, length uintptr, prot, flags, fd int32, offset uintptr) unsafe.Pointer | func libc_mmap(addr unsafe.Pointer, length uintptr, prot, flags, fd int32, offset uintptr) unsafe.Pointer | ||||||
| 
 | 
 | ||||||
|  | // int munmap(void *addr, size_t length); | ||||||
|  | //export munmap | ||||||
|  | func libc_munmap(addr unsafe.Pointer, length uintptr) int32 | ||||||
|  | 
 | ||||||
| // int mprotect(void *addr, size_t len, int prot); | // int mprotect(void *addr, size_t len, int prot); | ||||||
| //export mprotect | //export mprotect | ||||||
| func libc_mprotect(addr unsafe.Pointer, len uintptr, prot int32) int32 | func libc_mprotect(addr unsafe.Pointer, len uintptr, prot int32) int32 | ||||||
| 
 | 
 | ||||||
|  | // int getpagesize(); | ||||||
|  | //export getpagesize | ||||||
|  | func libc_getpagesize() int32 | ||||||
|  | 
 | ||||||
| // int chdir(const char *pathname, mode_t mode); | // int chdir(const char *pathname, mode_t mode); | ||||||
| //export chdir | //export chdir | ||||||
| func libc_chdir(pathname *byte) int32 | func libc_chdir(pathname *byte) int32 | ||||||
|  |  | ||||||
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче
	
	 Dan Kegel
						Dan Kegel