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