Skip to content

Commit 06a130e

Browse files
notValordacmel
authored andcommitted
perf test: Handle perftool-testsuite_probe failure due to broken DWARF
Test case test_adding_blacklisted ends in failure if the blacklisted probe is of an assembler function with no DWARF available. At the same time, probing the blacklisted function with ASM DWARF doesn't test the blacklist itself as the failure is a result of the broken DWARF. When the broken DWARF output is encountered, check if the probed function was compiled by the assembler. If so, the broken DWARF message is expected and does not report a perf issue, else report a failure. If the ASM DWARF affected the probe, try the next probe on the blacklist. If the first 5 probes are defective due to broken DWARF, skip the test case. Fixes: def5480 ("perf testsuite probe: Add test for blacklisted kprobes handling") Signed-off-by: Veronika Molnarova <[email protected]> Tested-by: Arnaldo Carvalho de Melo <[email protected]> Cc: Adrian Hunter <[email protected]> Cc: Alexander Shishkin <[email protected]> Cc: Ian Rogers <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Jiri Olsa <[email protected]> Cc: Kan Liang <[email protected]> Cc: Mark Rutland <[email protected]> Cc: Michael Petlan <[email protected]> Cc: Namhyung Kim <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Veronika Molnarova <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
1 parent d822ca2 commit 06a130e

File tree

1 file changed

+54
-15
lines changed

1 file changed

+54
-15
lines changed

tools/perf/tests/shell/base_probe/test_adding_blacklisted.sh

Lines changed: 54 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,35 +19,74 @@
1919
TEST_RESULT=0
2020

2121
# skip if not supported
22-
BLACKFUNC=`head -n 1 /sys/kernel/debug/kprobes/blacklist 2> /dev/null | cut -f2`
23-
if [ -z "$BLACKFUNC" ]; then
22+
BLACKFUNC_LIST=`head -n 5 /sys/kernel/debug/kprobes/blacklist 2> /dev/null | cut -f2`
23+
if [ -z "$BLACKFUNC_LIST" ]; then
2424
print_overall_skipped
2525
exit 0
2626
fi
2727

28+
# try to find vmlinux with DWARF debug info
29+
VMLINUX_FILE=$(perf probe -v random_probe |& grep "Using.*for symbols" | sed -r 's/^Using (.*) for symbols$/\1/')
30+
2831
# remove all previously added probes
2932
clear_all_probes
3033

3134

3235
### adding blacklisted function
33-
34-
# functions from blacklist should be skipped by perf probe
35-
! $CMD_PERF probe $BLACKFUNC > $LOGS_DIR/adding_blacklisted.log 2> $LOGS_DIR/adding_blacklisted.err
36-
PERF_EXIT_CODE=$?
37-
3836
REGEX_SCOPE_FAIL="Failed to find scope of probe point"
3937
REGEX_SKIP_MESSAGE=" is blacklisted function, skip it\."
40-
REGEX_NOT_FOUND_MESSAGE="Probe point \'$BLACKFUNC\' not found."
38+
REGEX_NOT_FOUND_MESSAGE="Probe point \'$RE_EVENT\' not found."
4139
REGEX_ERROR_MESSAGE="Error: Failed to add events."
4240
REGEX_INVALID_ARGUMENT="Failed to write event: Invalid argument"
4341
REGEX_SYMBOL_FAIL="Failed to find symbol at $RE_ADDRESS"
44-
REGEX_OUT_SECTION="$BLACKFUNC is out of \.\w+, skip it"
45-
../common/check_all_lines_matched.pl "$REGEX_SKIP_MESSAGE" "$REGEX_NOT_FOUND_MESSAGE" "$REGEX_ERROR_MESSAGE" "$REGEX_SCOPE_FAIL" "$REGEX_INVALID_ARGUMENT" "$REGEX_SYMBOL_FAIL" "$REGEX_OUT_SECTION" < $LOGS_DIR/adding_blacklisted.err
46-
CHECK_EXIT_CODE=$?
47-
48-
print_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "adding blacklisted function $BLACKFUNC"
49-
(( TEST_RESULT += $? ))
50-
42+
REGEX_OUT_SECTION="$RE_EVENT is out of \.\w+, skip it"
43+
REGEX_MISSING_DECL_LINE="A function DIE doesn't have decl_line. Maybe broken DWARF?"
44+
45+
BLACKFUNC=""
46+
SKIP_DWARF=0
47+
48+
for BLACKFUNC in $BLACKFUNC_LIST; do
49+
echo "Probing $BLACKFUNC"
50+
51+
# functions from blacklist should be skipped by perf probe
52+
! $CMD_PERF probe $BLACKFUNC > $LOGS_DIR/adding_blacklisted.log 2> $LOGS_DIR/adding_blacklisted.err
53+
PERF_EXIT_CODE=$?
54+
55+
# check for bad DWARF polluting the result
56+
../common/check_all_patterns_found.pl "$REGEX_MISSING_DECL_LINE" >/dev/null < $LOGS_DIR/adding_blacklisted.err
57+
58+
if [ $? -eq 0 ]; then
59+
SKIP_DWARF=1
60+
echo "Result polluted by broken DWARF, trying another probe"
61+
62+
# confirm that the broken DWARF comes from assembler
63+
if [ -n "$VMLINUX_FILE" ]; then
64+
readelf -wi "$VMLINUX_FILE" |
65+
awk -v probe="$BLACKFUNC" '/DW_AT_language/ { comp_lang = $0 }
66+
$0 ~ probe { if (comp_lang) { print comp_lang }; exit }' |
67+
grep -q "MIPS assembler"
68+
69+
CHECK_EXIT_CODE=$?
70+
if [ $CHECK_EXIT_CODE -ne 0 ]; then
71+
SKIP_DWARF=0 # broken DWARF while available
72+
break
73+
fi
74+
fi
75+
else
76+
../common/check_all_lines_matched.pl "$REGEX_SKIP_MESSAGE" "$REGEX_NOT_FOUND_MESSAGE" "$REGEX_ERROR_MESSAGE" "$REGEX_SCOPE_FAIL" "$REGEX_INVALID_ARGUMENT" "$REGEX_SYMBOL_FAIL" "$REGEX_OUT_SECTION" < $LOGS_DIR/adding_blacklisted.err
77+
CHECK_EXIT_CODE=$?
78+
79+
SKIP_DWARF=0
80+
break
81+
fi
82+
done
83+
84+
if [ $SKIP_DWARF -eq 1 ]; then
85+
print_testcase_skipped "adding blacklisted function $BLACKFUNC"
86+
else
87+
print_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "adding blacklisted function $BLACKFUNC"
88+
(( TEST_RESULT += $? ))
89+
fi
5190

5291
### listing not-added probe
5392

0 commit comments

Comments
 (0)