perf expr: Print a debug message for division by zero
authorIan Rogers <irogers@google.com>
Fri, 1 May 2020 17:33:31 +0000 (10:33 -0700)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 28 May 2020 13:03:25 +0000 (10:03 -0300)
If an expression yields 0 and is then divided-by/modulus-by then the
parsing aborts. Add a debug error message to better enable debugging
when this happens.

Signed-off-by: Ian Rogers <irogers@google.com>
Acked-by: Jiri Olsa <jolsa@redhat.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Haiyan Song <haiyanx.song@intel.com>
Cc: Jin Yao <yao.jin@linux.intel.com>
Cc: John Garry <john.garry@huawei.com>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Leo Yan <leo.yan@linaro.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Clarke <pc@us.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
Cc: Song Liu <songliubraving@fb.com>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lore.kernel.org/lkml/20200501173333.227162-11-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/expr.y

index 54260094b9472e3a17739b3c4837d5a32cb367b0..21e82a1e11a20da163d7a7be16cfb2ac84c993d9 100644 (file)
@@ -103,8 +103,18 @@ expr:        NUMBER
        | expr '+' expr         { $$ = $1 + $3; }
        | expr '-' expr         { $$ = $1 - $3; }
        | expr '*' expr         { $$ = $1 * $3; }
-       | expr '/' expr         { if ($3 == 0) YYABORT; $$ = $1 / $3; }
-       | expr '%' expr         { if ((long)$3 == 0) YYABORT; $$ = (long)$1 % (long)$3; }
+       | expr '/' expr         { if ($3 == 0) {
+                                       pr_debug("division by zero\n");
+                                       YYABORT;
+                                 }
+                                 $$ = $1 / $3;
+                               }
+       | expr '%' expr         { if ((long)$3 == 0) {
+                                       pr_debug("division by zero\n");
+                                       YYABORT;
+                                 }
+                                 $$ = (long)$1 % (long)$3;
+                               }
        | '-' expr %prec NEG    { $$ = -$2; }
        | '(' if_expr ')'       { $$ = $2; }
        | MIN '(' expr ',' expr ')' { $$ = $3 < $5 ? $3 : $5; }