mirror of
https://github.com/compute-blade-community/compute-blade-agent.git
synced 2026-04-21 17:45:43 +02:00
29 lines
578 B
Go
29 lines
578 B
Go
//go:build linux
|
|
package hal
|
|
|
|
import (
|
|
"os"
|
|
"reflect"
|
|
"syscall"
|
|
"unsafe"
|
|
)
|
|
|
|
func mmap(file *os.File, base int64, lenght int) ([]uint32, []uint8, error) {
|
|
mem8, err := syscall.Mmap(
|
|
int(file.Fd()),
|
|
base,
|
|
lenght,
|
|
syscall.PROT_READ|syscall.PROT_WRITE,
|
|
syscall.MAP_SHARED,
|
|
)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
// We'll have to work with 32 bit registers, so let's convert it.
|
|
header := *(*reflect.SliceHeader)(unsafe.Pointer(&mem8))
|
|
header.Len /= (32 / 8)
|
|
header.Cap /= (32 / 8)
|
|
mem32 := *(*[]uint32)(unsafe.Pointer(&header))
|
|
return mem32, mem8, nil
|
|
}
|