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  

View as plain text