162306a36Sopenharmony_ci#!/bin/sh 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci# 462306a36Sopenharmony_ci# Generate C file mapping errno codes to errno names. 562306a36Sopenharmony_ci# 662306a36Sopenharmony_ci# Copyright IBM Corp. 2018 762306a36Sopenharmony_ci# Author(s): Hendrik Brueckner <brueckner@linux.vnet.ibm.com> 862306a36Sopenharmony_ci 962306a36Sopenharmony_cigcc="$1" 1062306a36Sopenharmony_citoolsdir="$2" 1162306a36Sopenharmony_ciinclude_path="-I$toolsdir/include/uapi" 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ciarch_string() 1462306a36Sopenharmony_ci{ 1562306a36Sopenharmony_ci echo "$1" |sed -e 'y/- /__/' |tr '[[:upper:]]' '[[:lower:]]' 1662306a36Sopenharmony_ci} 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ciasm_errno_file() 1962306a36Sopenharmony_ci{ 2062306a36Sopenharmony_ci arch="$1" 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci header="$toolsdir/arch/$arch/include/uapi/asm/errno.h" 2362306a36Sopenharmony_ci if test -r "$header"; then 2462306a36Sopenharmony_ci echo "$header" 2562306a36Sopenharmony_ci else 2662306a36Sopenharmony_ci echo "$toolsdir/include/uapi/asm-generic/errno.h" 2762306a36Sopenharmony_ci fi 2862306a36Sopenharmony_ci} 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cicreate_errno_lookup_func() 3162306a36Sopenharmony_ci{ 3262306a36Sopenharmony_ci arch=$(arch_string "$1") 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci printf "static const char *errno_to_name__%s(int err)\n{\n\tswitch (err) {\n" $arch 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci while read name nr; do 3762306a36Sopenharmony_ci printf '\tcase %d: return "%s";\n' $nr $name 3862306a36Sopenharmony_ci done 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci printf '\tdefault: return "(unknown)";\n\t}\n}\n' 4162306a36Sopenharmony_ci} 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ciprocess_arch() 4462306a36Sopenharmony_ci{ 4562306a36Sopenharmony_ci arch="$1" 4662306a36Sopenharmony_ci asm_errno=$(asm_errno_file "$arch") 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci $gcc $CFLAGS $include_path -E -dM -x c $asm_errno \ 4962306a36Sopenharmony_ci |grep -hE '^#define[[:blank:]]+(E[^[:blank:]]+)[[:blank:]]+([[:digit:]]+).*' \ 5062306a36Sopenharmony_ci |awk '{ print $2","$3; }' \ 5162306a36Sopenharmony_ci |sort -t, -k2 -nu \ 5262306a36Sopenharmony_ci |IFS=, create_errno_lookup_func "$arch" 5362306a36Sopenharmony_ci} 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cicreate_arch_errno_table_func() 5662306a36Sopenharmony_ci{ 5762306a36Sopenharmony_ci archlist="$1" 5862306a36Sopenharmony_ci default="$2" 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci printf 'const char *arch_syscalls__strerrno(const char *arch, int err)\n' 6162306a36Sopenharmony_ci printf '{\n' 6262306a36Sopenharmony_ci for arch in $archlist; do 6362306a36Sopenharmony_ci printf '\tif (!strcmp(arch, "%s"))\n' $(arch_string "$arch") 6462306a36Sopenharmony_ci printf '\t\treturn errno_to_name__%s(err);\n' $(arch_string "$arch") 6562306a36Sopenharmony_ci done 6662306a36Sopenharmony_ci printf '\treturn errno_to_name__%s(err);\n' $(arch_string "$default") 6762306a36Sopenharmony_ci printf '}\n' 6862306a36Sopenharmony_ci} 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_cicat <<EoHEADER 7162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci#include <string.h> 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ciEoHEADER 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci# Create list of architectures that have a specific errno.h. 7862306a36Sopenharmony_ciarchlist="" 7962306a36Sopenharmony_cifor arch in $(find $toolsdir/arch -maxdepth 1 -mindepth 1 -type d -printf "%f\n" | sort -r); do 8062306a36Sopenharmony_ci test -f $toolsdir/arch/$arch/include/uapi/asm/errno.h && archlist="$archlist $arch" 8162306a36Sopenharmony_cidone 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_cifor arch in generic $archlist; do 8462306a36Sopenharmony_ci process_arch "$arch" 8562306a36Sopenharmony_cidone 8662306a36Sopenharmony_cicreate_arch_errno_table_func "$archlist" "generic" 87