Source file src/internal/syscall/unix/fallocate_bsd_arm.go
1 // Copyright 2023 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build (freebsd || netbsd) && arm 6 7 package unix 8 9 import "syscall" 10 11 func PosixFallocate(fd int, off int64, size int64) error { 12 // If successful, posix_fallocate() returns zero. It returns an error on failure, without 13 // setting errno. See https://man.freebsd.org/cgi/man.cgi?query=posix_fallocate&sektion=2&n=1 14 // and https://man.netbsd.org/posix_fallocate.2#RETURN%20VALUES 15 // 16 // The padding 0 argument is needed because the ARM calling convention requires that if an 17 // argument (off in this case) needs double-word alignment (8-byte), the NCRN (next core 18 // register number) is rounded up to the next even register number. 19 // See https://github.com/ARM-software/abi-aa/blob/2bcab1e3b22d55170c563c3c7940134089176746/aapcs32/aapcs32.rst#parameter-passing 20 r1, _, _ := syscall.Syscall6(posixFallocateTrap, uintptr(fd), 0, uintptr(off), uintptr(off>>32), uintptr(size), uintptr(size>>32)) 21 if r1 != 0 { 22 return syscall.Errno(r1) 23 } 24 return nil 25 } 26