From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hendrik Brueckner Subject: [PATCH 2/3] perf: introduce errno_to_name() function Date: Thu, 7 Dec 2017 09:28:00 +0100 Message-ID: <1512635281-20733-3-git-send-email-brueckner@linux.vnet.ibm.com> References: <1512635281-20733-1-git-send-email-brueckner@linux.vnet.ibm.com> Return-path: Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:60114 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751010AbdLGI2M (ORCPT ); Thu, 7 Dec 2017 03:28:12 -0500 Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id vB78O4dR144683 for ; Thu, 7 Dec 2017 03:28:12 -0500 Received: from e06smtp12.uk.ibm.com (e06smtp12.uk.ibm.com [195.75.94.108]) by mx0a-001b2d01.pphosted.com with ESMTP id 2epyjdnndx-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Thu, 07 Dec 2017 03:28:12 -0500 Received: from localhost by e06smtp12.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 7 Dec 2017 08:28:09 -0000 In-Reply-To: <1512635281-20733-1-git-send-email-brueckner@linux.vnet.ibm.com> Sender: linux-perf-users-owner@vger.kernel.org List-ID: To: Arnaldo Carvalho de Melo Cc: Thomas-Mich Richter , Michael Petlan , Jiri Olsa , linux-perf-users@vger.kernel.org, linux-s390@vger.kernel.org Introduce an errno_to_name() function to return the name of a give errno number as string. With this change, the dependency to libaudit can be removed for architectures that support syscall tables. Hence, remove the audit_errno_to_name() call in builtin-trace.c and just link util/syscalltbl.c against libaudit. A follow-up commit could then clean-up this dependency with respect to the syscall table. The errno name strings are generated by util/generate-errno-names.sh script and saved as util/errno-names.h. Signed-off-by: Hendrik Brueckner --- tools/perf/.gitignore | 1 + tools/perf/Makefile.config | 2 +- tools/perf/Makefile.perf | 12 ++++++++++-- tools/perf/builtin-trace.c | 17 ++++++++++++++--- tools/perf/util/generate-errno-names.sh | 32 ++++++++++++++++++++++++++++++++ 5 files changed, 58 insertions(+), 6 deletions(-) create mode 100755 tools/perf/util/generate-errno-names.sh diff --git a/tools/perf/.gitignore b/tools/perf/.gitignore index 643cc4ba..4e022f9 100644 --- a/tools/perf/.gitignore +++ b/tools/perf/.gitignore @@ -14,6 +14,7 @@ perf*.1 perf*.xml perf*.html common-cmds.h +errno-names.h perf.data perf.data.old output.svg diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config index ab16aab..d8447b1 100644 --- a/tools/perf/Makefile.config +++ b/tools/perf/Makefile.config @@ -251,7 +251,7 @@ INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/uapi INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/include/ INC_FLAGS += -I$(srctree)/tools/arch/$(SRCARCH)/ -# $(obj-perf) for generated common-cmds.h +# $(obj-perf) for generated common-cmds.h and errno-names.h # $(obj-perf)/util for generated bison/flex headers ifneq ($(OUTPUT),) INC_FLAGS += -I$(obj-perf)/util diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf index 68cf136..82aed33d 100644 --- a/tools/perf/Makefile.perf +++ b/tools/perf/Makefile.perf @@ -518,6 +518,12 @@ $(OUTPUT)common-cmds.h: util/generate-cmdlist.sh command-list.txt $(OUTPUT)common-cmds.h: $(wildcard Documentation/perf-*.txt) $(QUIET_GEN). util/generate-cmdlist.sh > $@+ && mv $@+ $@ +$(OUTPUT)util/errno-names.h: util/generate-errno-names.sh + $(QUIET_GEN). util/generate-errno-names.sh \ + $(srctree)/include/uapi/asm-generic/errno-base.h \ + $(srctree)/include/uapi/asm-generic/errno.h \ + > $@+ && mv $@+ $@ + $(SCRIPTS) : % : %.sh $(QUIET_GEN)$(INSTALL) '$@.sh' '$(OUTPUT)$@' @@ -565,7 +571,8 @@ prepare: $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h archheaders $(drm_ioc $(vhost_virtio_ioctl_array) \ $(madvise_behavior_array) \ $(perf_ioctl_array) \ - $(prctl_option_array) + $(prctl_option_array) \ + $(OUTPUT)util/errno-names.h $(OUTPUT)%.o: %.c prepare FORCE $(Q)$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=$(build-dir) $@ @@ -847,7 +854,8 @@ clean:: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-clea $(OUTPUT)$(kcmp_type_array) \ $(OUTPUT)$(vhost_virtio_ioctl_array) \ $(OUTPUT)$(perf_ioctl_array) \ - $(OUTPUT)$(prctl_option_array) + $(OUTPUT)$(prctl_option_array) \ + $(OUTPUT)util/errno-names.h $(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) clean # diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 84debdb..b7aef0f 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -42,17 +42,16 @@ #include "string2.h" #include "syscalltbl.h" #include "rb_resort.h" +#include "util/errno-names.h" #include #include -#include /* FIXME: Still needed for audit_errno_to_name */ #include #include #include #include #include #include -#include #include #include #include @@ -1659,6 +1658,18 @@ static int trace__fprintf_callchain(struct trace *trace, struct perf_sample *sam return sample__fprintf_callchain(sample, 38, print_opts, &callchain_cursor, trace->output); } +static const char *errno_to_name(int err) +{ + switch (err) { +#define ERRNO_NAME_MAP(_err, _num) case _num: return #_err; + ALL_ERRNO_NAME_MAPPINGS +#undef ONE_ERRNO_NAME + default: + return "(unknown)"; + break; + }; +} + static int trace__sys_exit(struct trace *trace, struct perf_evsel *evsel, union perf_event *event __maybe_unused, struct perf_sample *sample) @@ -1729,7 +1740,7 @@ static int trace__sys_exit(struct trace *trace, struct perf_evsel *evsel, errno_print: { char bf[STRERR_BUFSIZE]; const char *emsg = str_error_r(-ret, bf, sizeof(bf)), - *e = audit_errno_to_name(-ret); + *e = errno_to_name(-ret); fprintf(trace->output, ") = -1 %s %s", e, emsg); } diff --git a/tools/perf/util/generate-errno-names.sh b/tools/perf/util/generate-errno-names.sh new file mode 100755 index 0000000..6c114a8 --- /dev/null +++ b/tools/perf/util/generate-errno-names.sh @@ -0,0 +1,32 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# +# Generate errno names header file +# +# Copyright IBM Corp. 2017 +# Author(s): Hendrik Brueckner + +infiles="$@" +tmpfile=$(mktemp -t generate-errno-names.XXXXXXXXX) + +trap 'rm -f $tmpfile' 0 + +grep -hE '^#define[[:blank:]]+([^[:blank:]]+)[[:blank:]]+([[:digit:]]+).*' $infiles \ + |awk '{ print $2", "$3; }' \ + |sort -t, -k2 -nu \ + |sed -e 's/^/\tERRNO_NAME_MAP(/' -e 's/$/)/' \ + > $tmpfile + +cat <