Received: by 2002:ac0:98c7:0:0:0:0:0 with SMTP id g7-v6csp6309541imd; Wed, 31 Oct 2018 09:46:31 -0700 (PDT) X-Google-Smtp-Source: AJdET5eJud5//hGFj+mQs+jhDc44Dd8zpwafVAarE0nwX7KL8P8oRCP7Ea6ujsjL5f26uPLCEbCX X-Received: by 2002:a62:6203:: with SMTP id w3-v6mr4155237pfb.175.1541004391648; Wed, 31 Oct 2018 09:46:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1541004391; cv=none; d=google.com; s=arc-20160816; b=dXWwDodSMQlE9RP0bnJHVkd/NNUJJOwd5GC6qhYymmKcBctGTPZZdCe008T12tNmh2 NCb09/G7fxiPYNw+pUcilX0BA+6Wb4kvvvYtRv5HmPkjnGAd+Ly0kyWPvu6oJwVPcaad OjUvjPsD3oqg/Z+ubc0FopgqshDbRo+tkSdZmZln9rmvUx0WGB50HyTr+UijN+br/Iu/ EtNH3FT5r7rdxNiCifjuKEyU+Z1FYmHaq8NgCFw6MbWWbo/QEpYdpHygg22uVxV61XjX rhzwcpXGFxOfJZhgOfddUCm6uPPC2c4+T43F8O1wGoREh0hC0upsXRfUBX8tN4OcU1Y0 WYQA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=2o41dv3FXxVq5T9Pz3jK4FzMvudump5XdAtEX0pgRNY=; b=o8g1yDOhPiq3p/8cBupN1wTmj4UNXQjEJCovgZXvgu01o19/Btl+kTjvpAOB3U0p5N QnFRaxCIBxcIrh0CaDD/h+4ISnR/HMewuJ4c5y9g2HbW9xc04iUs1zM6O97tqgN8pzZ8 ndAc2RRETNMrLAxHsvHWnFvo7YFZeTKddJhTP+zx16HsS7jij2FoKyL22fkHdtXy6U55 ePkRxM1didbVhYggCdxyJjqlO8Jm58o5EqsMHHLaGL4leVu0INgiP+O8cvOVybzN7bZX URsfCJqpvqBYJcjcKWgfAzTeKd4mvipXuON6r7A2PuFIyBVTbSBdAXUY2blB4/ofnN31 4BAg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=t2TU9y6x; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e133-v6si27277874pfh.289.2018.10.31.09.46.16; Wed, 31 Oct 2018 09:46:31 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=t2TU9y6x; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729968AbeKABo2 (ORCPT + 99 others); Wed, 31 Oct 2018 21:44:28 -0400 Received: from mail.kernel.org ([198.145.29.99]:58960 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729341AbeKABo2 (ORCPT ); Wed, 31 Oct 2018 21:44:28 -0400 Received: from jouet.infradead.org (unknown [179.97.41.186]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A08B920840; Wed, 31 Oct 2018 16:45:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1541004340; bh=0I6sutqWFP5reAAk7u81DZPf/7CcaCSn0rS2DrXpYkA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=t2TU9y6xhEc0L5smYz9uBaLCpiZE7s2Vd++AJ5ob5aJ1iGieTsG/gNLC6+tHylBEt q8Q3Ke2yQxUZKDIEAPhm1Ad0gxIY5qAg2g5LWtSEnupo2RfeeElzPw/CFUyObseGha iTZH40p/rXpU4ONwmwgP+6GnHmW/fYOFEwEvextc= From: Arnaldo Carvalho de Melo To: Ingo Molnar Cc: Clark Williams , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Arnaldo Carvalho de Melo , Adrian Hunter , Benjamin Peterson , David Ahern , Jiri Olsa , Namhyung Kim , Wang Nan Subject: [PATCH 05/28] perf trace beauty: Allow syscalls to mask an argument before considering it Date: Wed, 31 Oct 2018 13:44:45 -0300 Message-Id: <20181031164508.4784-6-acme@kernel.org> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20181031164508.4784-1-acme@kernel.org> References: <20181031164508.4784-1-acme@kernel.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Arnaldo Carvalho de Melo Take mount's 'flags' arg, to cope with this semantic, as defined in do_mount in fs/namespace.c: /* * Pre-0.97 versions of mount() didn't have a flags word. When the * flags word was introduced its top half was required to have the * magic value 0xC0ED, and this remained so until 2.4.0-test9. * Therefore, if this magic number is present, it carries no * information and must be discarded. */ We need to mask this arg, and then see if it is zero, when we simply don't print the arg name and value. The next patch will use this for mount's 'flag' arg. Cc: Adrian Hunter Cc: Benjamin Peterson Cc: David Ahern Cc: Jiri Olsa Cc: Namhyung Kim Cc: Wang Nan Link: https://lkml.kernel.org/n/tip-btue14k5jemayuykfrwsnh85@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/builtin-trace.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 7081d7ea12e5..14fb63e17de5 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -614,6 +614,7 @@ static size_t syscall_arg__scnprintf_getrandom_flags(char *bf, size_t size, struct syscall_arg_fmt { size_t (*scnprintf)(char *bf, size_t size, struct syscall_arg *arg); + unsigned long (*mask_val)(struct syscall_arg *arg, unsigned long val); void *parm; const char *name; bool show_zero; @@ -1487,6 +1488,19 @@ static size_t syscall__scnprintf_name(struct syscall *sc, char *bf, size_t size, return scnprintf(bf, size, "arg%d: ", arg->idx); } +/* + * Check if the value is in fact zero, i.e. mask whatever needs masking, such + * as mount 'flags' argument that needs ignoring some magic flag, see comment + * in tools/perf/trace/beauty/mount_flags.c + */ +static unsigned long syscall__mask_val(struct syscall *sc, struct syscall_arg *arg, unsigned long val) +{ + if (sc->arg_fmt && sc->arg_fmt[arg->idx].mask_val) + return sc->arg_fmt[arg->idx].mask_val(arg, val); + + return val; +} + static size_t syscall__scnprintf_val(struct syscall *sc, char *bf, size_t size, struct syscall_arg *arg, unsigned long val) { @@ -1535,6 +1549,11 @@ static size_t syscall__scnprintf_args(struct syscall *sc, char *bf, size_t size, continue; val = syscall_arg__val(&arg, arg.idx); + /* + * Some syscall args need some mask, most don't and + * return val untouched. + */ + val = syscall__mask_val(sc, &arg, val); /* * Suppress this argument if its value is zero and -- 2.14.4