Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp1408275imm; Tue, 3 Jul 2018 10:34:20 -0700 (PDT) X-Google-Smtp-Source: AAOMgpf/Y8iSwFG7BOHrdjkfwbt0VGF8JqhFKfFHj4vSaLHlc/Sq0acxzYfpcSK5hOBz+D6r5pyp X-Received: by 2002:aa7:80cf:: with SMTP id a15-v6mr30542035pfn.19.1530639260535; Tue, 03 Jul 2018 10:34:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530639260; cv=none; d=google.com; s=arc-20160816; b=MiFqBFGFe1roo2jCr+EdMpK/GVwnM7ZJbhQ7E8zyUv1a8cAXaj07TWLJZ2mqGymKW1 ZMhsNHYke+SEGW3OJx0TNQd8SnSnmPFzgqNEIkq3b+sXezSJo1/dGf4cOZMOex/iolJ6 +Kp9fOVxnEiVmbNNRtp4SHbX2sZYWM56YTUHLQWvWZSZLWxsoWpbH97lNyB5JnE7v7lI gI6x8ldV4381VKtuADQMWMKjGTgbOk11/8u2HKgT6C7l6J+GS/aWiJ55nDnwmMmUaUT4 JnLOfEHBHV+hXxNYjiGToDXrvNRN0D2GL67ap8pJzuoOSMczYQnQ8e7XrKpS+hwClF5z CjgQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :organization:message-id:subject:cc:to:from:date :arc-authentication-results; bh=A6kl58r+76LbKot9Hf0+w6RXzveu71z1WVl42Nku9wM=; b=YBglZlyRLjr9SgTe0miHTZt85eMgeNiqNjjUl2qJRucHQ/LffArx7a2JgdSSZ4EW0n +45EWAESICjn5KBFChcrOZD/yDefqMicnhBcGenZKCSvdaJRqA/rjnPyNxIFNdNeYU1G 0LFJ1p9FAfOHx39wUNxnDDaeDSKHcWtfU7TzonCOIlmU9yh4WohlLLIZxJ87/sLLk9vy ZDBuTX5m5Lt9ymcku8KjWA6v3JDq6/APMDMtn2wXU9nBeeYWSUZziyZ4/o6LJTlPcoVM yJmj8fuihyNmJXZtgKPSwFT1MMfUcR4JIazphl/hp2dt9db/67wVN8ft4SiIsTn/4O/I aVsQ== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id bh7-v6si1505416plb.367.2018.07.03.10.34.06; Tue, 03 Jul 2018 10:34:20 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934350AbeGCRcg (ORCPT + 99 others); Tue, 3 Jul 2018 13:32:36 -0400 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:53346 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933063AbeGCRcf (ORCPT ); Tue, 3 Jul 2018 13:32:35 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D389DED1; Tue, 3 Jul 2018 10:32:34 -0700 (PDT) Received: from dupont (usa-sjc-mx-foss1.foss.arm.com [217.140.101.70]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E46293F5BA; Tue, 3 Jul 2018 10:32:33 -0700 (PDT) Date: Tue, 3 Jul 2018 12:32:28 -0500 From: Kim Phillips To: Arnaldo Carvalho de Melo Cc: Ravi Bangoria , Alexander Shishkin , Hendrik Brueckner , Jiri Olsa , Michael Ellerman , Namhyung Kim , Thomas Richter , Peter Zijlstra , Ingo Molnar , linux-kernel@vger.kernel.org Subject: [PATCH 2/3] perf arm64: Generate system call table from asm/unistd.h Message-Id: <20180703123228.eca1b003e51d5ced01317575@arm.com> Organization: Arm X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.32; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This should speed up accessing new system calls introduced with the kernel rather than waiting for libaudit updates to include them. Using the existing other arch scripts resulted in this error: tools/perf/arch/arm64/entry/syscalls//mksyscalltbl: 25: printf: __NR3264_ftruncate: expected numeric value because, unlike other arches, asm-generic's unistd.h does things like: #define __NR_ftruncate __NR3264_ftruncate Turning the scripts printf's %d into a %s resulted in this in the generated syscalls.c file: static const char *syscalltbl_arm64[] = { [__NR3264_ftruncate] = "ftruncate", So we use the host C compiler to fold the macros, and print them out from within a temporary C program, in order to get the correct output: static const char *syscalltbl_arm64[] = { [46] = "ftruncate", Cc: Ravi Bangoria Cc: Alexander Shishkin Cc: Hendrik Brueckner Cc: Jiri Olsa Cc: Michael Ellerman Cc: Namhyung Kim Cc: Thomas Richter Cc: Peter Zijlstra Cc: Ingo Molnar Cc: Arnaldo Carvalho de Melo Signed-off-by: Kim Phillips --- tools/perf/arch/arm64/Makefile | 21 ++++++++ .../arch/arm64/entry/syscalls/mksyscalltbl | 54 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100755 tools/perf/arch/arm64/entry/syscalls/mksyscalltbl diff --git a/tools/perf/arch/arm64/Makefile b/tools/perf/arch/arm64/Makefile index 91de4860faad..85fdf4949db3 100644 --- a/tools/perf/arch/arm64/Makefile +++ b/tools/perf/arch/arm64/Makefile @@ -4,3 +4,24 @@ PERF_HAVE_DWARF_REGS := 1 endif PERF_HAVE_JITDUMP := 1 PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET := 1 + +# +# Syscall table generation for perf +# + +out := $(OUTPUT)arch/arm64/include/generated/asm +header := $(out)/syscalls.c +sysdef := $(srctree)/tools/arch/arm64/include/uapi/asm/unistd.h +sysprf := $(srctree)/tools/perf/arch/arm64/entry/syscalls/ +systbl := $(sysprf)/mksyscalltbl + +# Create output directory if not already present +_dummy := $(shell [ -d '$(out)' ] || mkdir -p '$(out)') + +$(header): $(sysdef) $(systbl) + $(Q)$(SHELL) '$(systbl)' '$(CC)' '$(HOSTCC)' $(sysdef) > $@ + +clean:: + $(call QUIET_CLEAN, arm64) $(RM) $(header) + +archheaders: $(header) diff --git a/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl b/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl new file mode 100755 index 000000000000..1148302b7194 --- /dev/null +++ b/tools/perf/arch/arm64/entry/syscalls/mksyscalltbl @@ -0,0 +1,54 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# +# Generate system call table for perf. Derived from +# powerpc script. +# +# Copyright IBM Corp. 2017 +# Author(s): Hendrik Brueckner +# Changed by: Ravi Bangoria +# Changed by: Kim Phillips + +gcc=$1 +hostcc=$2 +input=$3 + +if ! test -r $input; then + echo "Could not read input file" >&2 + exit 1 +fi + +create_table_from_c() +{ + local last_sc + + create_table_base=`mktemp -u /tmp/create-table-XXX` + echo "#include " > ${create_table_base}.c + echo "#include \"$input\"" >> ${create_table_base}.c + + echo "int main(int argc, char *argv[])" >> ${create_table_base}.c + echo "{" >> ${create_table_base}.c + while read sc nr; do + echo " printf(\"\\\t[%d] = \\\"$sc\\\",\\\n\", __NR_$sc);" >> ${create_table_base}.c + last_sc=$sc + done + echo " printf(\"#define SYSCALLTBL_ARM64_MAX_ID %d\\\n\", __NR_$last_sc);" >> ${create_table_base}.c + echo "}" >> ${create_table_base}.c + + $hostcc -o ${create_table_base}.x ${create_table_base}.c + ${create_table_base}.x +} + +create_table() +{ + echo "static const char *syscalltbl_arm64[] = {" + create_table_from_c + echo '};' + + $RM -f ${create_table_base}.[cx] +} + +$gcc -E -dM -x c $input \ + |sed -ne 's/^#define __NR_//p' \ + |sort -t' ' -k2 -nu \ + |create_table -- 2.17.1