summaryrefslogtreecommitdiff
path: root/vendor/github.com/cilium/ebpf/asm/register.go
blob: dd5d44f1c1913cb4f2d7e7db5780b1fab8b1c238 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package asm

import (
	"fmt"
)

// Register is the source or destination of most operations.
type Register uint8

// R0 contains return values.
const R0 Register = 0

// Registers for function arguments.
const (
	R1 Register = R0 + 1 + iota
	R2
	R3
	R4
	R5
)

// Callee saved registers preserved by function calls.
const (
	R6 Register = R5 + 1 + iota
	R7
	R8
	R9
)

// Read-only frame pointer to access stack.
const (
	R10 Register = R9 + 1
	RFP          = R10
)

// Pseudo registers used by 64bit loads and jumps
const (
	PseudoMapFD    = R1 // BPF_PSEUDO_MAP_FD
	PseudoMapValue = R2 // BPF_PSEUDO_MAP_VALUE
	PseudoCall     = R1 // BPF_PSEUDO_CALL
	PseudoFunc     = R4 // BPF_PSEUDO_FUNC
)

func (r Register) String() string {
	v := uint8(r)
	if v == 10 {
		return "rfp"
	}
	return fmt.Sprintf("r%d", v)
}