Lines Matching full:pattern
29 * The disassembly of each program is then compared with the pattern
45 /* Pattern for BPF_LDX_MEM(field_sz, dst, ctx, field_offset) */
47 /* Pattern for BPF_STX_MEM(field_sz, ctx, src, field_offset) and
51 /* Pattern for BPF_ST_MEM(field_sz, ctx, src, field_offset),
55 /* Pattern for BPF_STX_MEM (field_sz, ctx, src, field_offset),
68 /* Sign extension on s390 changes the pattern */
291 static int find_field_offset(struct btf *btf, char *pattern, regmatch_t *matches) in find_field_offset() argument
295 char *type = pattern + matches[1].rm_so; in find_field_offset()
296 char *field = pattern + matches[2].rm_so; in find_field_offset()
302 PRINT_FAIL("Malformed pattern: type ident is too long: %d\n", type_sz); in find_field_offset()
307 PRINT_FAIL("Malformed pattern: field ident is too long: %d\n", field_sz); in find_field_offset()
384 * Can't match disassembly(left) with pattern(right):
394 char *pattern = pattern_origin; in print_match_error() local
398 fprintf(out, "Can't match disassembly(left) with pattern(right):\n"); in print_match_error()
399 while (*pattern || *text) { in print_match_error()
423 /* Print one line from pattern, pattern lines are terminated by ';' */ in print_match_error()
424 while (*pattern && *pattern != ';') { in print_match_error()
425 if (pattern == pattern_pos) in print_match_error()
427 fputc(*pattern, out); in print_match_error()
428 ++pattern; in print_match_error()
431 if (pattern == pattern_pos) in print_match_error()
435 if (*pattern) in print_match_error()
436 ++pattern; in print_match_error()
440 /* If pattern and text diverge at this line, print an in print_match_error()
456 /* Test if `text` matches `pattern`. Pattern consists of the following elements:
475 * If a substring of pattern is equal to `reg_map[i][0]` the `text` is
478 * - Whitespace is ignored, ';' counts as whitespace for `pattern`.
480 * - Any other characters, `pattern` and `text` should match one-to-one.
482 * Example of a pattern:
490 static bool match_pattern(struct btf *btf, char *pattern, char *text, char *reg_map[][2]) in match_pattern() argument
492 char *pattern_origin = pattern; in match_pattern()
497 while (*pattern) { in match_pattern()
502 if (isspace(*pattern) || *pattern == ';') { in match_pattern()
505 pattern = skip_space_and_semi(pattern); in match_pattern()
514 pattern_next = match_str(pattern, reg_map[i][0]); in match_pattern()
522 pattern = pattern_next; in match_pattern()
530 if (strncmp(pattern, "$(", 2) == 0) { in match_pattern()
531 char *group_start = pattern, *text_next; in match_pattern()
534 pattern += 2; in match_pattern()
539 pattern = skip_space(pattern); in match_pattern()
540 if (!*pattern) { in match_pattern()
541 PRINT_FAIL("Unexpected end of pattern\n"); in match_pattern()
545 if (*pattern == ')') { in match_pattern()
546 ++pattern; in match_pattern()
550 if (*pattern == '+') { in match_pattern()
551 ++pattern; in match_pattern()
555 printf("pattern: %s\n", pattern); in match_pattern()
556 if (regexec(field_regex, pattern, 3, matches, 0) != 0) { in match_pattern()
561 field_offset = find_field_offset(btf, pattern, matches); in match_pattern()
565 pattern += matches[0].rm_eo; in match_pattern()
572 (int)(pattern - group_start), in match_pattern()
583 if (regexec(field_regex, pattern, 3, matches, 0) == 0) { in match_pattern()
587 field_offset = find_field_offset(btf, pattern, matches); in match_pattern()
594 (int)matches[0].rm_eo, pattern, field_offset); in match_pattern()
598 pattern += matches[0].rm_eo; in match_pattern()
603 /* If pattern points to identifier not followed by '::' in match_pattern()
607 if (regexec(ident_regex, pattern, 1, matches, 0) == 0) { in match_pattern()
608 if (strncmp(pattern, text, matches[0].rm_eo) != 0) in match_pattern()
611 pattern += matches[0].rm_eo; in match_pattern()
617 if (*pattern != *text) in match_pattern()
620 ++pattern; in match_pattern()
628 print_match_error(stdout, pattern_origin, text_origin, pattern, text); in match_pattern()
642 char *pattern, in match_program() argument
695 ASSERT_TRUE(match_pattern(btf, pattern, text, reg_map), in match_program()
777 char *pattern = test->write_stx ? test->write_stx : test->write; in run_one_testcase() local
782 match_program(btf, &pinfo, pattern, stx_reg_map, true); in run_one_testcase()
786 char *pattern = test->write_st ? test->write_st : test->write; in run_one_testcase() local
791 match_program(btf, &pinfo, pattern, st_reg_map, false); in run_one_testcase()