xref: /OK3568_Linux_fs/kernel/tools/perf/trace/beauty/arch_errno_names.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/sh
2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
3*4882a593Smuzhiyun#
4*4882a593Smuzhiyun# Generate C file mapping errno codes to errno names.
5*4882a593Smuzhiyun#
6*4882a593Smuzhiyun# Copyright IBM Corp. 2018
7*4882a593Smuzhiyun# Author(s):  Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
8*4882a593Smuzhiyun
9*4882a593Smuzhiyungcc="$1"
10*4882a593Smuzhiyuntoolsdir="$2"
11*4882a593Smuzhiyuninclude_path="-I$toolsdir/include/uapi"
12*4882a593Smuzhiyun
13*4882a593Smuzhiyunarch_string()
14*4882a593Smuzhiyun{
15*4882a593Smuzhiyun	echo "$1" |sed -e 'y/- /__/' |tr '[[:upper:]]' '[[:lower:]]'
16*4882a593Smuzhiyun}
17*4882a593Smuzhiyun
18*4882a593Smuzhiyunasm_errno_file()
19*4882a593Smuzhiyun{
20*4882a593Smuzhiyun	local arch="$1"
21*4882a593Smuzhiyun	local header
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun	header="$toolsdir/arch/$arch/include/uapi/asm/errno.h"
24*4882a593Smuzhiyun	if test -r "$header"; then
25*4882a593Smuzhiyun		echo "$header"
26*4882a593Smuzhiyun	else
27*4882a593Smuzhiyun		echo "$toolsdir/include/uapi/asm-generic/errno.h"
28*4882a593Smuzhiyun	fi
29*4882a593Smuzhiyun}
30*4882a593Smuzhiyun
31*4882a593Smuzhiyuncreate_errno_lookup_func()
32*4882a593Smuzhiyun{
33*4882a593Smuzhiyun	local arch=$(arch_string "$1")
34*4882a593Smuzhiyun	local nr name
35*4882a593Smuzhiyun
36*4882a593Smuzhiyun	cat <<EoFuncBegin
37*4882a593Smuzhiyunstatic const char *errno_to_name__$arch(int err)
38*4882a593Smuzhiyun{
39*4882a593Smuzhiyun	switch (err) {
40*4882a593SmuzhiyunEoFuncBegin
41*4882a593Smuzhiyun
42*4882a593Smuzhiyun	while read name nr; do
43*4882a593Smuzhiyun		printf '\tcase %d: return "%s";\n' $nr $name
44*4882a593Smuzhiyun	done
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun	cat <<EoFuncEnd
47*4882a593Smuzhiyun	default:
48*4882a593Smuzhiyun		return "(unknown)";
49*4882a593Smuzhiyun	}
50*4882a593Smuzhiyun}
51*4882a593Smuzhiyun
52*4882a593SmuzhiyunEoFuncEnd
53*4882a593Smuzhiyun}
54*4882a593Smuzhiyun
55*4882a593Smuzhiyunprocess_arch()
56*4882a593Smuzhiyun{
57*4882a593Smuzhiyun	local arch="$1"
58*4882a593Smuzhiyun	local asm_errno=$(asm_errno_file "$arch")
59*4882a593Smuzhiyun
60*4882a593Smuzhiyun	$gcc $CFLAGS $include_path -E -dM -x c $asm_errno \
61*4882a593Smuzhiyun		|grep -hE '^#define[[:blank:]]+(E[^[:blank:]]+)[[:blank:]]+([[:digit:]]+).*' \
62*4882a593Smuzhiyun		|awk '{ print $2","$3; }' \
63*4882a593Smuzhiyun		|sort -t, -k2 -nu \
64*4882a593Smuzhiyun		|IFS=, create_errno_lookup_func "$arch"
65*4882a593Smuzhiyun}
66*4882a593Smuzhiyun
67*4882a593Smuzhiyuncreate_arch_errno_table_func()
68*4882a593Smuzhiyun{
69*4882a593Smuzhiyun	local archlist="$1"
70*4882a593Smuzhiyun	local default="$2"
71*4882a593Smuzhiyun	local arch
72*4882a593Smuzhiyun
73*4882a593Smuzhiyun	printf 'const char *arch_syscalls__strerrno(const char *arch, int err)\n'
74*4882a593Smuzhiyun	printf '{\n'
75*4882a593Smuzhiyun	for arch in $archlist; do
76*4882a593Smuzhiyun		printf '\tif (!strcmp(arch, "%s"))\n' $(arch_string "$arch")
77*4882a593Smuzhiyun		printf '\t\treturn errno_to_name__%s(err);\n' $(arch_string "$arch")
78*4882a593Smuzhiyun	done
79*4882a593Smuzhiyun	printf '\treturn errno_to_name__%s(err);\n' $(arch_string "$default")
80*4882a593Smuzhiyun	printf '}\n'
81*4882a593Smuzhiyun}
82*4882a593Smuzhiyun
83*4882a593Smuzhiyuncat <<EoHEADER
84*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0 */
85*4882a593Smuzhiyun
86*4882a593Smuzhiyun#include <string.h>
87*4882a593Smuzhiyun
88*4882a593SmuzhiyunEoHEADER
89*4882a593Smuzhiyun
90*4882a593Smuzhiyun# Create list of architectures and ignore those that do not appear
91*4882a593Smuzhiyun# in tools/perf/arch
92*4882a593Smuzhiyunarchlist=""
93*4882a593Smuzhiyunfor arch in $(find $toolsdir/arch -maxdepth 1 -mindepth 1 -type d -printf "%f\n" | grep -v x86 | sort); do
94*4882a593Smuzhiyun	test -d $toolsdir/perf/arch/$arch && archlist="$archlist $arch"
95*4882a593Smuzhiyundone
96*4882a593Smuzhiyun
97*4882a593Smuzhiyunfor arch in x86 $archlist generic; do
98*4882a593Smuzhiyun	process_arch "$arch"
99*4882a593Smuzhiyundone
100*4882a593Smuzhiyuncreate_arch_errno_table_func "x86 $archlist" "generic"
101