diff mbox series

arm: simplify syscallnr.sh a bit

Message ID 20180812225742.594c7705@canb.auug.org.au (mailing list archive)
State New, archived
Headers show
Series arm: simplify syscallnr.sh a bit | expand

Commit Message

Stephen Rothwell Aug. 12, 2018, 12:57 p.m. UTC
tested by comparing the output of

/bin/sh ./arch/arm/tools/syscallnr.sh arch/arm/tools/syscall.tbl /tmp/xx.h common,oabi,eabi,compat

Before and after this patch.

Suggested-by: Al Viro <viro@ZenIV.linux.org.uk>
Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
---
 arch/arm/tools/syscallnr.sh | 32 +++++++++++++++++---------------
 1 file changed, 17 insertions(+), 15 deletions(-)

Comments

Al Viro Aug. 12, 2018, 2:25 p.m. UTC | #1
On Sun, Aug 12, 2018 at 10:57:42PM +1000, Stephen Rothwell wrote:

> +nr=$(sed -n -E \
> +    's/^([[:xdigit:]Xx]+)[[:space:]]+'"${my_abis}"'[[:space:]].*$/\1/p' "$in" |
> +    sort -n | tail -n1)
> +nr=$(($nr + 1))

Alternatively,

nr=$(awk -e "/^[[:xdigit:]Xx]+[[:space:]]+${my_abis}/ {if (\$1 > max) max = \$1} \
             END {print max + 1}" "$in")

Matter of taste, of course - if that is ever get fed something so large that
use of sort + tail to find the maximum would be noticable, we are in a very
deep trouble for other reasons ;-)
diff mbox series

Patch

diff --git a/arch/arm/tools/syscallnr.sh b/arch/arm/tools/syscallnr.sh
index df3ccd0ca831..9c604697745e 100644
--- a/arch/arm/tools/syscallnr.sh
+++ b/arch/arm/tools/syscallnr.sh
@@ -9,26 +9,28 @@  fileguard=_ASM_ARM_`basename "$out" | sed \
     -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
     -e 's/[^A-Z0-9_]/_/g' -e 's/__/_/g'`
 
-grep -E "^[0-9A-Fa-fXx]+[[:space:]]+${my_abis}" "$in" | sort -n | tail -n1 | (
-    echo "#ifndef ${fileguard}
+nr=$(sed -n -E \
+    's/^([[:xdigit:]Xx]+)[[:space:]]+'"${my_abis}"'[[:space:]].*$/\1/p' "$in" |
+    sort -n | tail -n1)
+nr=$(($nr + 1))
+while [ "$(($nr / (256 * $align) ))" -gt 0 ]; do
+    align=$(( $align * 4 ))
+done
+nr=$(( ($nr + $align - 1) & ~($align - 1) ))
+
+cat <<EOF >"$out"
+#ifndef ${fileguard}
 #define ${fileguard} 1
 
 /*
  * This needs to be greater than __NR_last_syscall+1 in order to account
  * for the padding in the syscall table.
  */
-"
 
-    while read nr abi name entry; do
-        nr=$(($nr + 1))
-        while [ "$(($nr / (256 * $align) ))" -gt 0 ]; do
-            align=$(( $align * 4 ))
-        done
-        nr=$(( ($nr + $align - 1) & ~($align - 1) ))
-        echo "/* aligned to $align */"
-        echo "#define __NR_syscalls $nr"
-    done
+/* aligned to $align */
+#define __NR_syscalls $nr
+
+#endif /* ${fileguard} */
+EOF
 
-    echo ""
-    echo "#endif /* ${fileguard} */"
-) > "$out"
+exit 0