[PATCH 1/1 FYI] perf trace beauty: Fix generation of errno id->str table on ALT Linux

From: Arnaldo Carvalho de Melo
Date: Wed Jun 22 2022 - 12:24:51 EST


Fyi, I'm carrying this on my perf tools tree to keep building on:

[perfbuilder@five sisyphus]$ podman pull alt:sisyphus
Trying to pull docker.io/library/alt:sisyphus...
Getting image source signatures
Copying blob 2b39ef1520dd skipped: already exists
Copying blob 12717fd4baa0 skipped: already exists
Copying config 6d48f46445 done
Writing manifest to image destination
Storing signatures
6d48f4644518cd96ffe1de6cd0333d2abc8312c0e4449e03b58b1d480f0f5905
[perfbuilder@five sisyphus]$ dsh .
sh-4.4# bash
[root@b8318c77142b /]# cat /etc/os-release
NAME="starter kit"
VERSION="p10 (Hypericum)"
ID=altlinux
VERSION_ID=p10
PRETTY_NAME="ALT Starterkit (Hypericum)"
ANSI_COLOR="1;33"
CPE_NAME="cpe:/o:alt:starterkit:p10"
HOME_URL="http://en.altlinux.org/starterkits";
BUG_REPORT_URL="https://bugs.altlinux.org/";
[root@b8318c77142b /]# rpm -qi bash
Name : bash
Version : 4.4.23
Release : alt1
DistTag : sisyphus+221902.500.4.1
Architecture: noarch
Install Date: Fri Jun 3 23:03:32 2022
Group : Shells
Size : 0
License : None
Signature : DSA/SHA1, Tue Feb 19 14:40:44 2019, Key ID 95c584d5ae4ae412
Source RPM : bash-defaults-4.4.23-alt1.src.rpm
Build Date : Tue Feb 19 14:40:42 2019
Build Host : ldv-sisyphus.hasher.altlinux.org
Relocations : (not relocatable)
Packager : Dmitry V. Levin <ldv@xxxxxxxxxxxx>
Vendor : ALT Linux Team
Summary : The GNU Bourne Again SHell (/bin/bash)
Description :
This package provides default setup for the GNU Bourne Again SHell (/bin/bash).
[root@b8318c77142b /]#

Perf uses that script to generate an id->str errno table for all arches,
implemented in:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0337cf74ccf2a43437bff2e23b278e4f2dc4c6e2

But it is failing on:

10 62.99 alt:p8 : Ok x86_64-alt-linux-gcc (GCC) 5.3.1 20151207 (ALT p8 5.3.1-alt3.M80P.1) , clang version 3.8.0 (tags/RELEASE_380/final)
11 91.50 alt:p9 : Ok x86_64-alt-linux-gcc (GCC) 8.4.1 20200305 (ALT p9 8.4.1-alt0.p9.1) , clang version 10.0.0
12 89.80 alt:p10 : Ok x86_64-alt-linux-gcc (GCC) 10.3.1 20210703 (ALT Sisyphus 10.3.1-alt2) , clang version 11.0.1
13 8.99 alt:sisyphus : FAIL gcc version 12.1.1 20220518 (ALT Sisyphus 12.1.1-alt1) (GCC)
| ^~~~
442 | case 47: return "EL3RST";
| ^~~~
443 | case 48: return "ELNRNG";

The generated file lacks the function start/end due to some strange
glitch:

http://vger.kernel.org/~acme/perf/generated-altlinux-sisyphus-arch_errno_name_array.c

So I'm adding this workaround, can you please check why this is
happening?

- Arnaldo

---

For some reason using:

cat <<EoFuncBegin
static const char *errno_to_name__$arch(int err)
{
switch (err) {
EoFuncBegin

In tools/perf/trace/beauty/arch_errno_names.sh isn't working on ALT
Linux sisyphus (development version), which could be some distro
specific glitch, so just get this done in an alternative way that works
everywhere while giving notice to the people working on that distro to
try and figure our what really took place.

Cc: Gleb Fotengauer-Malinovskiy <glebfm@xxxxxxxxxxxx>
Cc: Dmitry V. Levin <ldv@xxxxxxxxxxxx>
Cc: Hendrik Brueckner <brueckner@xxxxxxxxxxxxxxxxxx>,
Cc: Ian Rogers <irogers@xxxxxxxxxx>
Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
---
tools/perf/trace/beauty/arch_errno_names.sh | 14 ++------------
1 file changed, 2 insertions(+), 12 deletions(-)

diff --git a/tools/perf/trace/beauty/arch_errno_names.sh b/tools/perf/trace/beauty/arch_errno_names.sh
index 2c5f72fa81087956..37c53bac5f56ef7b 100755
--- a/tools/perf/trace/beauty/arch_errno_names.sh
+++ b/tools/perf/trace/beauty/arch_errno_names.sh
@@ -33,23 +33,13 @@ create_errno_lookup_func()
local arch=$(arch_string "$1")
local nr name

- cat <<EoFuncBegin
-static const char *errno_to_name__$arch(int err)
-{
- switch (err) {
-EoFuncBegin
+ printf "static const char *errno_to_name__%s(int err)\n{\n\tswitch (err) {\n" $arch

while read name nr; do
printf '\tcase %d: return "%s";\n' $nr $name
done

- cat <<EoFuncEnd
- default:
- return "(unknown)";
- }
-}
-
-EoFuncEnd
+ printf '\tdefault: return "(unknown)";\n\t}\n}\n'
}

process_arch()
--
2.36.1