@@ -5690,6 +5690,172 @@ static struct bpf_test tests[] = {
56905690#undef BPF_ATOMIC_OP_TEST2
56915691#undef BPF_ATOMIC_OP_TEST3
56925692#undef BPF_ATOMIC_OP_TEST4
5693+ /* BPF_ATOMIC | BPF_W, BPF_CMPXCHG */
5694+ {
5695+ "BPF_ATOMIC | BPF_W, BPF_CMPXCHG: Test successful return" ,
5696+ .u .insns_int = {
5697+ BPF_ST_MEM (BPF_W , R10 , -40 , 0x01234567 ),
5698+ BPF_ALU32_IMM (BPF_MOV , R0 , 0x01234567 ),
5699+ BPF_ALU32_IMM (BPF_MOV , R3 , 0x89abcdef ),
5700+ BPF_ATOMIC_OP (BPF_W , BPF_CMPXCHG , R10 , R3 , -40 ),
5701+ BPF_EXIT_INSN (),
5702+ },
5703+ INTERNAL ,
5704+ { },
5705+ { { 0 , 0x01234567 } },
5706+ .stack_depth = 40 ,
5707+ },
5708+ {
5709+ "BPF_ATOMIC | BPF_W, BPF_CMPXCHG: Test successful store" ,
5710+ .u .insns_int = {
5711+ BPF_ST_MEM (BPF_W , R10 , -40 , 0x01234567 ),
5712+ BPF_ALU32_IMM (BPF_MOV , R0 , 0x01234567 ),
5713+ BPF_ALU32_IMM (BPF_MOV , R3 , 0x89abcdef ),
5714+ BPF_ATOMIC_OP (BPF_W , BPF_CMPXCHG , R10 , R3 , -40 ),
5715+ BPF_LDX_MEM (BPF_W , R0 , R10 , -40 ),
5716+ BPF_EXIT_INSN (),
5717+ },
5718+ INTERNAL ,
5719+ { },
5720+ { { 0 , 0x89abcdef } },
5721+ .stack_depth = 40 ,
5722+ },
5723+ {
5724+ "BPF_ATOMIC | BPF_W, BPF_CMPXCHG: Test failure return" ,
5725+ .u .insns_int = {
5726+ BPF_ST_MEM (BPF_W , R10 , -40 , 0x01234567 ),
5727+ BPF_ALU32_IMM (BPF_MOV , R0 , 0x76543210 ),
5728+ BPF_ALU32_IMM (BPF_MOV , R3 , 0x89abcdef ),
5729+ BPF_ATOMIC_OP (BPF_W , BPF_CMPXCHG , R10 , R3 , -40 ),
5730+ BPF_EXIT_INSN (),
5731+ },
5732+ INTERNAL ,
5733+ { },
5734+ { { 0 , 0x01234567 } },
5735+ .stack_depth = 40 ,
5736+ },
5737+ {
5738+ "BPF_ATOMIC | BPF_W, BPF_CMPXCHG: Test failure store" ,
5739+ .u .insns_int = {
5740+ BPF_ST_MEM (BPF_W , R10 , -40 , 0x01234567 ),
5741+ BPF_ALU32_IMM (BPF_MOV , R0 , 0x76543210 ),
5742+ BPF_ALU32_IMM (BPF_MOV , R3 , 0x89abcdef ),
5743+ BPF_ATOMIC_OP (BPF_W , BPF_CMPXCHG , R10 , R3 , -40 ),
5744+ BPF_LDX_MEM (BPF_W , R0 , R10 , -40 ),
5745+ BPF_EXIT_INSN (),
5746+ },
5747+ INTERNAL ,
5748+ { },
5749+ { { 0 , 0x01234567 } },
5750+ .stack_depth = 40 ,
5751+ },
5752+ {
5753+ "BPF_ATOMIC | BPF_W, BPF_CMPXCHG: Test side effects" ,
5754+ .u .insns_int = {
5755+ BPF_ST_MEM (BPF_W , R10 , -40 , 0x01234567 ),
5756+ BPF_ALU32_IMM (BPF_MOV , R0 , 0x01234567 ),
5757+ BPF_ALU32_IMM (BPF_MOV , R3 , 0x89abcdef ),
5758+ BPF_ATOMIC_OP (BPF_W , BPF_CMPXCHG , R10 , R3 , -40 ),
5759+ BPF_ATOMIC_OP (BPF_W , BPF_CMPXCHG , R10 , R3 , -40 ),
5760+ BPF_ALU32_REG (BPF_MOV , R0 , R3 ),
5761+ BPF_EXIT_INSN (),
5762+ },
5763+ INTERNAL ,
5764+ { },
5765+ { { 0 , 0x89abcdef } },
5766+ .stack_depth = 40 ,
5767+ },
5768+ /* BPF_ATOMIC | BPF_DW, BPF_CMPXCHG */
5769+ {
5770+ "BPF_ATOMIC | BPF_DW, BPF_CMPXCHG: Test successful return" ,
5771+ .u .insns_int = {
5772+ BPF_LD_IMM64 (R1 , 0x0123456789abcdefULL ),
5773+ BPF_LD_IMM64 (R2 , 0xfecdba9876543210ULL ),
5774+ BPF_ALU64_REG (BPF_MOV , R0 , R1 ),
5775+ BPF_STX_MEM (BPF_DW , R10 , R1 , -40 ),
5776+ BPF_ATOMIC_OP (BPF_DW , BPF_CMPXCHG , R10 , R2 , -40 ),
5777+ BPF_JMP_REG (BPF_JNE , R0 , R1 , 1 ),
5778+ BPF_ALU64_REG (BPF_SUB , R0 , R1 ),
5779+ BPF_EXIT_INSN (),
5780+ },
5781+ INTERNAL ,
5782+ { },
5783+ { { 0 , 0 } },
5784+ .stack_depth = 40 ,
5785+ },
5786+ {
5787+ "BPF_ATOMIC | BPF_DW, BPF_CMPXCHG: Test successful store" ,
5788+ .u .insns_int = {
5789+ BPF_LD_IMM64 (R1 , 0x0123456789abcdefULL ),
5790+ BPF_LD_IMM64 (R2 , 0xfecdba9876543210ULL ),
5791+ BPF_ALU64_REG (BPF_MOV , R0 , R1 ),
5792+ BPF_STX_MEM (BPF_DW , R10 , R0 , -40 ),
5793+ BPF_ATOMIC_OP (BPF_DW , BPF_CMPXCHG , R10 , R2 , -40 ),
5794+ BPF_LDX_MEM (BPF_DW , R0 , R10 , -40 ),
5795+ BPF_JMP_REG (BPF_JNE , R0 , R2 , 1 ),
5796+ BPF_ALU64_REG (BPF_SUB , R0 , R2 ),
5797+ BPF_EXIT_INSN (),
5798+ },
5799+ INTERNAL ,
5800+ { },
5801+ { { 0 , 0 } },
5802+ .stack_depth = 40 ,
5803+ },
5804+ {
5805+ "BPF_ATOMIC | BPF_DW, BPF_CMPXCHG: Test failure return" ,
5806+ .u .insns_int = {
5807+ BPF_LD_IMM64 (R1 , 0x0123456789abcdefULL ),
5808+ BPF_LD_IMM64 (R2 , 0xfecdba9876543210ULL ),
5809+ BPF_ALU64_REG (BPF_MOV , R0 , R1 ),
5810+ BPF_ALU64_IMM (BPF_ADD , R0 , 1 ),
5811+ BPF_STX_MEM (BPF_DW , R10 , R1 , -40 ),
5812+ BPF_ATOMIC_OP (BPF_DW , BPF_CMPXCHG , R10 , R2 , -40 ),
5813+ BPF_JMP_REG (BPF_JNE , R0 , R1 , 1 ),
5814+ BPF_ALU64_REG (BPF_SUB , R0 , R1 ),
5815+ BPF_EXIT_INSN (),
5816+ },
5817+ INTERNAL ,
5818+ { },
5819+ { { 0 , 0 } },
5820+ .stack_depth = 40 ,
5821+ },
5822+ {
5823+ "BPF_ATOMIC | BPF_DW, BPF_CMPXCHG: Test failure store" ,
5824+ .u .insns_int = {
5825+ BPF_LD_IMM64 (R1 , 0x0123456789abcdefULL ),
5826+ BPF_LD_IMM64 (R2 , 0xfecdba9876543210ULL ),
5827+ BPF_ALU64_REG (BPF_MOV , R0 , R1 ),
5828+ BPF_ALU64_IMM (BPF_ADD , R0 , 1 ),
5829+ BPF_STX_MEM (BPF_DW , R10 , R1 , -40 ),
5830+ BPF_ATOMIC_OP (BPF_DW , BPF_CMPXCHG , R10 , R2 , -40 ),
5831+ BPF_LDX_MEM (BPF_DW , R0 , R10 , -40 ),
5832+ BPF_JMP_REG (BPF_JNE , R0 , R1 , 1 ),
5833+ BPF_ALU64_REG (BPF_SUB , R0 , R1 ),
5834+ BPF_EXIT_INSN (),
5835+ },
5836+ INTERNAL ,
5837+ { },
5838+ { { 0 , 0 } },
5839+ .stack_depth = 40 ,
5840+ },
5841+ {
5842+ "BPF_ATOMIC | BPF_DW, BPF_CMPXCHG: Test side effects" ,
5843+ .u .insns_int = {
5844+ BPF_LD_IMM64 (R1 , 0x0123456789abcdefULL ),
5845+ BPF_LD_IMM64 (R2 , 0xfecdba9876543210ULL ),
5846+ BPF_ALU64_REG (BPF_MOV , R0 , R1 ),
5847+ BPF_STX_MEM (BPF_DW , R10 , R1 , -40 ),
5848+ BPF_ATOMIC_OP (BPF_DW , BPF_CMPXCHG , R10 , R2 , -40 ),
5849+ BPF_LD_IMM64 (R0 , 0xfecdba9876543210ULL ),
5850+ BPF_JMP_REG (BPF_JNE , R0 , R2 , 1 ),
5851+ BPF_ALU64_REG (BPF_SUB , R0 , R2 ),
5852+ BPF_EXIT_INSN (),
5853+ },
5854+ INTERNAL ,
5855+ { },
5856+ { { 0 , 0 } },
5857+ .stack_depth = 40 ,
5858+ },
56935859 /* BPF_JMP32 | BPF_JEQ | BPF_K */
56945860 {
56955861 "JMP32_JEQ_K: Small immediate" ,
0 commit comments