brintos

brintos / linux-shallow public Read only

0
0
Text · 2.0 KiB · 30d3889 Raw
91 lines · bash
1#!/bin/sh2# SPDX-License-Identifier: GPL-2.03#4# Generate C file mapping errno codes to errno names.5#6# Copyright IBM Corp. 20187# Author(s):  Hendrik Brueckner <brueckner@linux.vnet.ibm.com>8 9gcc="$1"10toolsdir="$2"11include_path="-I$toolsdir/include/uapi"12 13arch_string()14{15	echo "$1" |sed -e 'y/- /__/' |tr '[[:upper:]]' '[[:lower:]]'16}17 18asm_errno_file()19{20	arch="$1"21 22	header="$toolsdir/arch/$arch/include/uapi/asm/errno.h"23	if test -r "$header"; then24		echo "$header"25	else26		echo "$toolsdir/include/uapi/asm-generic/errno.h"27	fi28}29 30create_errno_lookup_func()31{32	arch=$(arch_string "$1")33 34	printf "static const char *errno_to_name__%s(int err)\n{\n\tswitch (err) {\n" $arch35 36	while read name nr; do37		printf '\tcase %d: return "%s";\n' $nr $name38	done39 40	printf '\tdefault: return "(unknown)";\n\t}\n}\n'41}42 43process_arch()44{45	arch="$1"46	asm_errno=$(asm_errno_file "$arch")47 48	$gcc $CFLAGS $include_path -E -dM -x c $asm_errno \49		|grep -hE '^#define[[:blank:]]+(E[^[:blank:]]+)[[:blank:]]+([[:digit:]]+).*' \50		|awk '{ print $2","$3; }' \51		|sort -t, -k2 -nu \52		|IFS=, create_errno_lookup_func "$arch"53}54 55create_arch_errno_table_func()56{57	archlist="$1"58	default="$2"59 60	printf 'arch_syscalls__strerrno_t *arch_syscalls__strerrno_function(const char *arch)\n'61	printf '{\n'62	for arch in $archlist; do63		arch_str=$(arch_string "$arch")64		printf '\tif (!strcmp(arch, "%s"))\n' "$arch_str"65		printf '\t\treturn errno_to_name__%s;\n' "$arch_str"66	done67	arch_str=$(arch_string "$default")68	printf '\treturn errno_to_name__%s;\n' "$arch_str"69	printf '}\n'70}71 72cat <<EoHEADER73/* SPDX-License-Identifier: GPL-2.0 */74 75#include <string.h>76 77EoHEADER78 79# Create list of architectures that have a specific errno.h.80archlist=""81for f in $toolsdir/arch/*/include/uapi/asm/errno.h; do82	d=${f%/include/uapi/asm/errno.h}83	arch="${d##*/}"84	test -f $toolsdir/arch/$arch/include/uapi/asm/errno.h && archlist="$archlist $arch"85done86 87for arch in generic $archlist; do88	process_arch "$arch"89done90create_arch_errno_table_func "$archlist" "generic"91