Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp710068pxb; Mon, 25 Oct 2021 17:10:18 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyXQ51lleBJPFAhx3SfcjkIljyqOjfDDKPV/mpXax92JkwV1TSnGVa7JhqnZM1sv5KeEaO5 X-Received: by 2002:a17:907:6ea3:: with SMTP id sh35mr3269545ejc.264.1635207017852; Mon, 25 Oct 2021 17:10:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1635207017; cv=none; d=google.com; s=arc-20160816; b=qaozorfphAC2z2Zq9PRJHf1kKGPHnomFt6h3QhYkuNIaMHMEvlgXTwh6V44ZdVtnPD iubvRHjDf4tTlqrL9cfZvKIqi2wRj9+HwDxLyiwmAxmmkGTyXjAnyG2E7HKhbR4qdJpA J65quR+DFq01iDtFKY3e5WeisLicLJ3fmVakQCQTzcSqDIUl3uCdrKS+WE/81frjTV7f OkpibwaIxbYXcNlA0co+8Utya++BehVWhO4Q17ZL6a47NYbEwxQ/xmrehVqm2yjiUTEE isdVwwsnkTwMZiYoLj9gG4cq6WHLgiVW8qdk4Am5eHgxfOg/B0yjKlmaEaI8EVxJoMSN p4+Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:to:cc:from:subject:references:mime-version :message-id:in-reply-to:date:dkim-signature; bh=40aYx6z+Qhs6iidkMxzLHXZ7pLr5WPfaLZnNc4JCIAA=; b=AjvrEBWChRRpDP3uZkbCx4gh/Og7DjNg8Jwax0kM65sglbcljtUUig4neZjhGWyJWU JeT/LyYJwcCSYoBR6SeO8zoR2pYwgcDOjF6Jx4N6AQOvp9u5Gbna09bJn9VvKr1q8xk3 4P4onlKZNPBkUMU4xmSK4YTOMInPdaWv3y97O0wgwp4OSWSBg4mAfomJds8JIFhLdfG/ UcskAFHDIyygURv6v9vGTh6kKcIxWgnKpO4n2TyJrlRznd/J4HLu9Con2/fC51rf33bq evfwyh7zkFal63mkROR7/O2KHy2Ce7GiM201lLLIuQf/NYtTAQcDSiuVPCA7tC50kcMy 3u4w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=D2oramfk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w8si30979828ede.307.2021.10.25.17.09.54; Mon, 25 Oct 2021 17:10:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=D2oramfk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237899AbhJYUCk (ORCPT + 99 others); Mon, 25 Oct 2021 16:02:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58556 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237534AbhJYT71 (ORCPT ); Mon, 25 Oct 2021 15:59:27 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 35EADC110F3C for ; Mon, 25 Oct 2021 12:24:51 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id t92-20020a25aae5000000b005c1494b029aso13603199ybi.6 for ; Mon, 25 Oct 2021 12:24:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:cc; bh=40aYx6z+Qhs6iidkMxzLHXZ7pLr5WPfaLZnNc4JCIAA=; b=D2oramfk/k05LngaIBN5DtDp30x+nHc792NEbG/KPYSaJfYrEB3RS29H6763RfdtTK 2jp4uSN9NAFPr+eMPR0/iZQm5rBySPRST2gawSQXstX2HToQiUfQc5TATmc0HtAnQ9a+ dLsFlTcwznpcNJcYkVkIBJD3fYWPjss5VWDkFmDub98BnoKZybHc6aC+6UnvNCcuCir9 bWKP5smBY0skebQ7IA7jmo5ydquhbrwVxShExGE8ghUmjN7jen8IH9cpdA6Sv6eVPPO1 UbKSs+54w4dA9FiYN87UNisxX/HHekOTs1lw+aRQlnR3D4gdzckLlAAMW1EU0ABOQSIP FqsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:cc; bh=40aYx6z+Qhs6iidkMxzLHXZ7pLr5WPfaLZnNc4JCIAA=; b=4VcHlL3jooo5ipT9w6P/VHE4hGKPwy1sDXblbKHOQVnjO3Xf8MYM8mgQifHjBUzL3T Fb79Rps3kK4KY2H2MMJOkC5v4iosh15sG5bq8HeE8gLZgCHYa4FXEmPdv5ccJ1tefsuP W3Wb4ki5/HhRqzKzEC5hyeiWt+ZLnLYA5TbLd6O2T2OhPcQ3XQPMcZ6ItbnV7KkTgPuC nrma3uh2yj2LM/owMa+k0uHDODBmQW5VgzlyMoG0geHGucsuxlhMfu2UQs0eAxR3ui4Z mferUQBT7jVMFJYPr9RdQtgEoUT5ixJw/yVF7jWzK71/rcosV+o5697n2I6bhw3bq5U9 iSIg== X-Gm-Message-State: AOAM531xa5nHnjifn3efYB0B0xL0BnXjZM8lSyh8+eHDZfXqu6C740Bg 1WHjXuit8mAS+H5auum2wVlCugs/sqE7ZtgfRg== X-Received: from kaleshsingh.mtv.corp.google.com ([2620:15c:211:200:b783:5702:523e:d435]) (user=kaleshsingh job=sendgmr) by 2002:a25:9847:: with SMTP id k7mr19933212ybo.170.1635189885470; Mon, 25 Oct 2021 12:24:45 -0700 (PDT) Date: Mon, 25 Oct 2021 12:23:15 -0700 In-Reply-To: <20211025192330.2992076-1-kaleshsingh@google.com> Message-Id: <20211025192330.2992076-5-kaleshsingh@google.com> Mime-Version: 1.0 References: <20211025192330.2992076-1-kaleshsingh@google.com> X-Mailer: git-send-email 2.33.0.1079.g6e70778dc9-goog Subject: [PATCH v3 4/8] tracing/histogram: Simplify handling of .sym-offset in expressions From: Kalesh Singh Cc: surenb@google.com, hridya@google.com, namhyung@kernel.org, kernel-team@android.com, Kalesh Singh , Steven Rostedt , Jonathan Corbet , Ingo Molnar , Shuah Khan , Masami Hiramatsu , Tom Zanussi , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org Content-Type: text/plain; charset="UTF-8" To: unlisted-recipients:; (no To-header on input) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The '-' in .sym-offset can confuse the hist trigger arithmetic expression parsing. Simplify the handling of this by replacing the 'sym-offset' with 'symXoffset'. This allows us to correctly evaluate expressions where the user may have inadvertently added a .sym-offset modifier to one of the operands in an expression, instead of bailing out. In this case the .sym-offset has no effect on the evaluation of the expression. The only valid use of the .sym-offset is as a hist key modifier. Change-Id: Icef416c67138576718e25394d85f8e991d8850d6 Signed-off-by: Kalesh Singh Suggested-by: Steven Rostedt --- kernel/trace/trace_events_hist.c | 43 +++++++++++++------------------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c index e10c7d9611e5..34aba07d23f8 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -68,8 +68,7 @@ C(INVALID_SORT_FIELD, "Sort field must be a key or a val"), \ C(INVALID_STR_OPERAND, "String type can not be an operand in expression"), \ C(EXPECT_NUMBER, "Expecting numeric literal"), \ - C(UNARY_MINUS_SUBEXPR, "Unary minus not supported in sub-expressions"), \ - C(SYM_OFFSET_SUBEXPR, ".sym-offset not supported in sub-expressions"), + C(UNARY_MINUS_SUBEXPR, "Unary minus not supported in sub-expressions"), #undef C #define C(a, b) HIST_ERR_##a @@ -1672,10 +1671,6 @@ static int contains_operator(char *str, char **sep) */ minus_op = strrchr(str, '-'); if (minus_op) { - /* Unfortunately, the modifier ".sym-offset" can confuse things. */ - if (minus_op - str >= 4 && !strncmp(minus_op - 4, ".sym-offset", 11)) - goto out; - /* * Unary minus is not supported in sub-expressions. If * present, it is always the next root operator. @@ -2138,7 +2133,11 @@ parse_field(struct hist_trigger_data *hist_data, struct trace_event_file *file, *flags |= HIST_FIELD_FL_HEX; else if (strcmp(modifier, "sym") == 0) *flags |= HIST_FIELD_FL_SYM; - else if (strcmp(modifier, "sym-offset") == 0) + /* + * 'sym-offset' occurrences in the trigger string are modified + * to 'symXoffset' to simplify arithmetic expression parsing. + */ + else if (strcmp(modifier, "symXoffset") == 0) *flags |= HIST_FIELD_FL_SYM_OFFSET; else if ((strcmp(modifier, "execname") == 0) && (strcmp(field_name, "common_pid") == 0)) @@ -2463,24 +2462,6 @@ static struct hist_field *parse_expr(struct hist_trigger_data *hist_data, return ERR_PTR(-EINVAL); } - /* - * ".sym-offset" in expressions has no effect on their evaluation, - * but can confuse operator parsing. - */ - if (*n_subexprs == 0) { - sep = strstr(str, ".sym-offset"); - if (sep) { - *sep = '\0'; - if (strpbrk(str, "+-/*") || strpbrk(sep + 11, "+-/*")) { - *sep = '.'; - hist_err(file->tr, HIST_ERR_SYM_OFFSET_SUBEXPR, - errpos(sep)); - return ERR_PTR(-EINVAL); - } - *sep = '.'; - } - } - field_op = contains_operator(str, &sep); if (field_op == FIELD_OP_NONE) @@ -6004,7 +5985,7 @@ static int event_hist_trigger_func(struct event_command *cmd_ops, struct synth_event *se; const char *se_name; bool remove = false; - char *trigger, *p; + char *trigger, *p, *start; int ret = 0; lockdep_assert_held(&event_mutex); @@ -6052,6 +6033,16 @@ static int event_hist_trigger_func(struct event_command *cmd_ops, trigger = strstrip(trigger); } + /* + * To simplify arithmetic expression parsing, replace occurrences of + * '.sym-offset' modifier with '.symXoffset' + */ + start = strstr(trigger, ".sym-offset"); + while (start) { + *(start + 4) = 'X'; + start = strstr(start + 11, ".sym-offset"); + }; + attrs = parse_hist_trigger_attrs(file->tr, trigger); if (IS_ERR(attrs)) return PTR_ERR(attrs); -- 2.33.0.1079.g6e70778dc9-goog