|
@@ -2565,6 +2565,70 @@ static struct bpf_test tests[] = {
|
|
|
{ },
|
|
|
{ { 0, 0x1 } },
|
|
|
},
|
|
|
+ {
|
|
|
+ "ALU_ADD_K: 0 + 0xffff = 0xffff",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_LD_IMM64(R2, 0x0),
|
|
|
+ BPF_LD_IMM64(R3, 0xffff),
|
|
|
+ BPF_ALU32_IMM(BPF_ADD, R2, 0xffff),
|
|
|
+ BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
|
|
|
+ BPF_MOV32_IMM(R0, 2),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_MOV32_IMM(R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 0x1 } },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "ALU_ADD_K: 0 + 0x7fffffff = 0x7fffffff",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_LD_IMM64(R2, 0x0),
|
|
|
+ BPF_LD_IMM64(R3, 0x7fffffff),
|
|
|
+ BPF_ALU32_IMM(BPF_ADD, R2, 0x7fffffff),
|
|
|
+ BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
|
|
|
+ BPF_MOV32_IMM(R0, 2),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_MOV32_IMM(R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 0x1 } },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "ALU_ADD_K: 0 + 0x80000000 = 0x80000000",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_LD_IMM64(R2, 0x0),
|
|
|
+ BPF_LD_IMM64(R3, 0x80000000),
|
|
|
+ BPF_ALU32_IMM(BPF_ADD, R2, 0x80000000),
|
|
|
+ BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
|
|
|
+ BPF_MOV32_IMM(R0, 2),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_MOV32_IMM(R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 0x1 } },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "ALU_ADD_K: 0 + 0x80008000 = 0x80008000",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_LD_IMM64(R2, 0x0),
|
|
|
+ BPF_LD_IMM64(R3, 0x80008000),
|
|
|
+ BPF_ALU32_IMM(BPF_ADD, R2, 0x80008000),
|
|
|
+ BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
|
|
|
+ BPF_MOV32_IMM(R0, 2),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_MOV32_IMM(R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 0x1 } },
|
|
|
+ },
|
|
|
{
|
|
|
"ALU64_ADD_K: 1 + 2 = 3",
|
|
|
.u.insns_int = {
|
|
@@ -2657,6 +2721,70 @@ static struct bpf_test tests[] = {
|
|
|
{ },
|
|
|
{ { 0, 0x1 } },
|
|
|
},
|
|
|
+ {
|
|
|
+ "ALU64_ADD_K: 0 + 0xffff = 0xffff",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_LD_IMM64(R2, 0x0),
|
|
|
+ BPF_LD_IMM64(R3, 0xffff),
|
|
|
+ BPF_ALU64_IMM(BPF_ADD, R2, 0xffff),
|
|
|
+ BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
|
|
|
+ BPF_MOV32_IMM(R0, 2),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_MOV32_IMM(R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 0x1 } },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "ALU64_ADD_K: 0 + 0x7fffffff = 0x7fffffff",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_LD_IMM64(R2, 0x0),
|
|
|
+ BPF_LD_IMM64(R3, 0x7fffffff),
|
|
|
+ BPF_ALU64_IMM(BPF_ADD, R2, 0x7fffffff),
|
|
|
+ BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
|
|
|
+ BPF_MOV32_IMM(R0, 2),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_MOV32_IMM(R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 0x1 } },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "ALU64_ADD_K: 0 + 0x80000000 = 0xffffffff80000000",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_LD_IMM64(R2, 0x0),
|
|
|
+ BPF_LD_IMM64(R3, 0xffffffff80000000LL),
|
|
|
+ BPF_ALU64_IMM(BPF_ADD, R2, 0x80000000),
|
|
|
+ BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
|
|
|
+ BPF_MOV32_IMM(R0, 2),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_MOV32_IMM(R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 0x1 } },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "ALU_ADD_K: 0 + 0x80008000 = 0xffffffff80008000",
|
|
|
+ .u.insns_int = {
|
|
|
+ BPF_LD_IMM64(R2, 0x0),
|
|
|
+ BPF_LD_IMM64(R3, 0xffffffff80008000LL),
|
|
|
+ BPF_ALU64_IMM(BPF_ADD, R2, 0x80008000),
|
|
|
+ BPF_JMP_REG(BPF_JEQ, R2, R3, 2),
|
|
|
+ BPF_MOV32_IMM(R0, 2),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ BPF_MOV32_IMM(R0, 1),
|
|
|
+ BPF_EXIT_INSN(),
|
|
|
+ },
|
|
|
+ INTERNAL,
|
|
|
+ { },
|
|
|
+ { { 0, 0x1 } },
|
|
|
+ },
|
|
|
/* BPF_ALU | BPF_SUB | BPF_X */
|
|
|
{
|
|
|
"ALU_SUB_X: 3 - 1 = 2",
|