1 #!/bin/sh 2 # SPDX-License-Identifier: GPL-2.0 3 # 4 # Generate C file mapping errno codes to errno names. 5 # 6 # Copyright IBM Corp. 2018 7 # Author(s): Hendrik Brueckner <brueckner@linux.vnet.ibm.com> 8 9 gcc="$1" 10 toolsdir="$2" 11 include_path="-I$toolsdir/include/uapi" 12 13 arch_string() 14 { 15 echo "$1" |sed -e 'y/- /__/' |tr '[[:upper:]]' '[[:lower:]]' 16 } 17 18 asm_errno_file() 19 { 20 arch="$1" 21 22 header="$toolsdir/arch/$arch/include/uapi/asm/errno.h" 23 if test -r "$header"; then 24 echo "$header" 25 else 26 echo "$toolsdir/include/uapi/asm-generic/errno.h" 27 fi 28 } 29 30 create_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" $arch 35 36 while read name nr; do 37 printf '\tcase %d: return "%s";\n' $nr $name 38 done 39 40 printf '\tdefault: return "(unknown)";\n\t}\n}\n' 41 } 42 43 process_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 55 create_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; do 63 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 done 67 arch_str=$(arch_string "$default") 68 printf '\treturn errno_to_name__%s;\n' "$arch_str" 69 printf '}\n' 70 } 71 72 cat <<EoHEADER 73 /* SPDX-License-Identifier: GPL-2.0 */ 74 75 #include <string.h> 76 77 EoHEADER 78 79 # Create list of architectures that have a specific errno.h. 80 archlist="" 81 for f in $toolsdir/arch/*/include/uapi/asm/errno.h; do 82 d=${f%/include/uapi/asm/errno.h} 83 arch="${d##*/}" 84 test -f $toolsdir/arch/$arch/include/uapi/asm/errno.h && archlist="$archlist $arch" 85 done 86 87 for arch in generic $archlist; do 88 process_arch "$arch" 89 done 90 create_arch_errno_table_func "$archlist" "generic"
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.