github.com/cilium/ebpf@v0.15.1-0.20240517100537-8079b37aa138/asm/register.go (about)

     1  package asm
     2  
     3  import (
     4  	"fmt"
     5  )
     6  
     7  // Register is the source or destination of most operations.
     8  type Register uint8
     9  
    10  // R0 contains return values.
    11  const R0 Register = 0
    12  
    13  // Registers for function arguments.
    14  const (
    15  	R1 Register = R0 + 1 + iota
    16  	R2
    17  	R3
    18  	R4
    19  	R5
    20  )
    21  
    22  // Callee saved registers preserved by function calls.
    23  const (
    24  	R6 Register = R5 + 1 + iota
    25  	R7
    26  	R8
    27  	R9
    28  )
    29  
    30  // Read-only frame pointer to access stack.
    31  const (
    32  	R10 Register = R9 + 1
    33  	RFP          = R10
    34  )
    35  
    36  // Pseudo registers used by 64bit loads and jumps
    37  const (
    38  	PseudoMapFD     = R1 // BPF_PSEUDO_MAP_FD
    39  	PseudoMapValue  = R2 // BPF_PSEUDO_MAP_VALUE
    40  	PseudoCall      = R1 // BPF_PSEUDO_CALL
    41  	PseudoFunc      = R4 // BPF_PSEUDO_FUNC
    42  	PseudoKfuncCall = R2 // BPF_PSEUDO_KFUNC_CALL
    43  )
    44  
    45  func (r Register) String() string {
    46  	v := uint8(r)
    47  	if v == 10 {
    48  		return "rfp"
    49  	}
    50  	return fmt.Sprintf("r%d", v)
    51  }