162306a36Sopenharmony_ci.. contents::
262306a36Sopenharmony_ci.. sectnum::
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci===================================================
562306a36Sopenharmony_ciBPF ABI Recommended Conventions and Guidelines v1.0
662306a36Sopenharmony_ci===================================================
762306a36Sopenharmony_ci
862306a36Sopenharmony_ciThis is version 1.0 of an informational document containing recommended
962306a36Sopenharmony_ciconventions and guidelines for producing portable BPF program binaries.
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ciRegisters and calling convention
1262306a36Sopenharmony_ci================================
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ciBPF has 10 general purpose registers and a read-only frame pointer register,
1562306a36Sopenharmony_ciall of which are 64-bits wide.
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ciThe BPF calling convention is defined as:
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci* R0: return value from function calls, and exit value for BPF programs
2062306a36Sopenharmony_ci* R1 - R5: arguments for function calls
2162306a36Sopenharmony_ci* R6 - R9: callee saved registers that function calls will preserve
2262306a36Sopenharmony_ci* R10: read-only frame pointer to access stack
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ciR0 - R5 are scratch registers and BPF programs needs to spill/fill them if
2562306a36Sopenharmony_cinecessary across calls.
26