Commit 6f876e75 authored by Andrii Nakryiko's avatar Andrii Nakryiko Committed by Alexei Starovoitov
Browse files

selftests/bpf: enhance align selftest's expected log matching



Allow to search for expected register state in all the verifier log
output that's related to specified instruction number.

See added comment for an example of possible situation that is happening
due to a simple enhancement done in the next patch, which fixes handling
of env->test_state_freq flag in state checkpointing logic.

Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/r/20230302235015.2044271-4-andrii@kernel.org


Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 567da5d2
Loading
Loading
Loading
Loading
+12 −6
Original line number Diff line number Diff line
@@ -660,16 +660,22 @@ static int do_test_single(struct bpf_align_test *test)
			 * func#0 @0
			 * 0: R1=ctx(off=0,imm=0) R10=fp0
			 * 0: (b7) r3 = 2                 ; R3_w=2
			 *
			 * Sometimes it's actually two lines below, e.g. when
			 * searching for "6: R3_w=scalar(umax=255,var_off=(0x0; 0xff))":
			 *   from 4 to 6: R0_w=pkt(off=8,r=8,imm=0) R1=ctx(off=0,imm=0) R2_w=pkt(off=0,r=8,imm=0) R3_w=pkt_end(off=0,imm=0) R10=fp0
			 *   6: R0_w=pkt(off=8,r=8,imm=0) R1=ctx(off=0,imm=0) R2_w=pkt(off=0,r=8,imm=0) R3_w=pkt_end(off=0,imm=0) R10=fp0
			 *   6: (71) r3 = *(u8 *)(r2 +0)           ; R2_w=pkt(off=0,r=8,imm=0) R3_w=scalar(umax=255,var_off=(0x0; 0xff))
			 */
			if (!strstr(line_ptr, m.match)) {
			while (!strstr(line_ptr, m.match)) {
				cur_line = -1;
				line_ptr = strtok(NULL, "\n");
				sscanf(line_ptr, "%u: ", &cur_line);
				sscanf(line_ptr ?: "", "%u: ", &cur_line);
				if (!line_ptr || cur_line != m.line)
					break;
			}
			if (cur_line != m.line || !line_ptr ||
			    !strstr(line_ptr, m.match)) {
				printf("Failed to find match %u: %s\n",
				       m.line, m.match);
			if (cur_line != m.line || !line_ptr || !strstr(line_ptr, m.match)) {
				printf("Failed to find match %u: %s\n", m.line, m.match);
				ret = 1;
				printf("%s", bpf_vlog);
				break;