GNU Linux-libre 4.9.309-gnu1
[releases.git] / arch / x86 / kernel / cpu / mkcapflags.sh
1 #!/bin/sh
2 #
3 # Generate the x86_cap/bug_flags[] arrays from include/asm/cpufeatures.h
4 #
5
6 set -e
7
8 IN=$1
9 OUT=$2
10
11 dump_array()
12 {
13         ARRAY=$1
14         SIZE=$2
15         PFX=$3
16         POSTFIX=$4
17
18         PFX_SZ=$(echo $PFX | wc -c)
19         TABS="$(printf '\t\t\t\t\t')"
20
21         echo "const char * const $ARRAY[$SIZE] = {"
22
23         # Iterate through any input lines starting with #define $PFX
24         sed -n -e 's/\t/ /g' -e "s/^ *# *define *$PFX//p" $IN |
25         while read i
26         do
27                 # Name is everything up to the first whitespace
28                 NAME="$(echo "$i" | sed 's/ .*//')"
29
30                 # If the /* comment */ starts with a quote string, grab that.
31                 VALUE="$(echo "$i" | sed -n 's@.*/\* *\("[^"]*"\).*\*/@\1@p')"
32                 [ -z "$VALUE" ] && VALUE="\"$NAME\""
33                 [ "$VALUE" = '""' ] && continue
34
35                 # Name is uppercase, VALUE is all lowercase
36                 VALUE="$(echo "$VALUE" | tr A-Z a-z)"
37
38         if [ -n "$POSTFIX" ]; then
39             T=$(( $PFX_SZ + $(echo $POSTFIX | wc -c) + 2 ))
40                 TABS="$(printf '\t\t\t\t\t\t')"
41                     TABCOUNT=$(( ( 6*8 - ($T + 1) - $(echo "$NAME" | wc -c) ) / 8 ))
42                     printf "\t[%s - %s]%.*s = %s,\n" "$PFX$NAME" "$POSTFIX" "$TABCOUNT" "$TABS" "$VALUE"
43         else
44                     TABCOUNT=$(( ( 5*8 - ($PFX_SZ + 1) - $(echo "$NAME" | wc -c) ) / 8 ))
45             printf "\t[%s]%.*s = %s,\n" "$PFX$NAME" "$TABCOUNT" "$TABS" "$VALUE"
46         fi
47         done
48         echo "};"
49 }
50
51 trap 'rm "$OUT"' EXIT
52
53 (
54         echo "#ifndef _ASM_X86_CPUFEATURES_H"
55         echo "#include <asm/cpufeatures.h>"
56         echo "#endif"
57         echo ""
58
59         dump_array "x86_cap_flags" "NCAPINTS*32" "X86_FEATURE_" ""
60         echo ""
61
62         dump_array "x86_bug_flags" "NBUGINTS*32" "X86_BUG_" "NCAPINTS*32"
63
64 ) > $OUT
65
66 trap - EXIT