#!/bin/sh global in := $1 global arch := $2 proc syscall_macro { global nr := $1 global name := $2 echo " [$nr] = \"$name\"," } proc emit { global nr := $1 global entry := $2 syscall_macro $nr $entry } echo "static const char *syscalltbl_$(arch)[] = {" global sorted_table := $[mktemp /tmp/syscalltbl.XXXXXX] grep '^[0-9]' $in | sort -n > $sorted_table global max_nr := '0' while read nr abi name entry compat { if test $nr -ge 512 { # discard compat sycalls break } emit $nr $name global max_nr := $nr } < $sorted_table rm -f $sorted_table echo "};" echo "#define SYSCALLTBL_$(arch)_MAX_ID $(max_nr)" (CommandList children: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:in) op:Equal rhs:{(DQ ($ VSub_Number "$1"))} spids:[4])] spids: [4] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:arch) op: Equal rhs: {(DQ ($ VSub_Number "$2"))} spids: [9] ) ] spids: [9] ) (FuncDef name: syscall_macro body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:nr) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [22] ) ] spids: [22] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:name) op: Equal rhs: {(DQ ($ VSub_Number "$2"))} spids: [28] ) ] spids: [28] ) (C {(echo)} { (DQ ("\t[") ($ VSub_Name "$nr") ("] = ") (EscapedLiteralPart token:) ($ VSub_Name "$name") (EscapedLiteralPart token:) (",") ) } ) ] spids: [19] ) spids: [15 18] ) (FuncDef name: emit body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:nr) op: Equal rhs: {(DQ ($ VSub_Number "$1"))} spids: [57] ) ] spids: [57] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:entry) op: Equal rhs: {(DQ ($ VSub_Number "$2"))} spids: [63] ) ] spids: [63] ) (C {(syscall_macro)} {(DQ ($ VSub_Name "$nr"))} {(DQ ($ VSub_Name "$entry"))}) ] spids: [54] ) spids: [50 53] ) (C {(echo)} {(DQ ("static const char *syscalltbl_") (${ VSub_Name arch) ("[] = {"))}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:sorted_table) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(mktemp)} {(/tmp/syscalltbl.XXXXXX)})]) left_token: spids: [95 99] ) } spids: [94] ) ] spids: [94] ) (Pipeline children: [ (C {(grep)} {(SQ <"^[0-9]">)} {(DQ ($ VSub_Name "$in"))}) (SimpleCommand words: [{(sort)} {(-n)}] redirects: [ (Redir op_id: Redir_Great fd: -1 arg_word: {($ VSub_Name "$sorted_table")} spids: [117] ) ] ) ] negated: False ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:max_nr) op:Equal rhs:{(0)} spids:[122])] spids: [122] ) (While cond: [ (Sentence child: (C {(read)} {(nr)} {(abi)} {(name)} {(entry)} {(compat)}) terminator: ) ] body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other "[")} {($ VSub_Name "$nr")} {(-ge)} {(512)} {(Lit_Other "]")}) terminator: ) ] action: [(ControlFlow token:)] spids: [-1 157] ) ] spids: [-1 166] ) (C {(emit)} {(DQ ($ VSub_Name "$nr"))} {(DQ ($ VSub_Name "$name"))}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:max_nr) op: Equal rhs: {($ VSub_Name "$nr")} spids: [181] ) ] spids: [181] ) ] spids: [140 184] ) redirects: [(Redir op_id:Redir_Less fd:-1 arg_word:{($ VSub_Name "$sorted_table")} spids:[186])] ) (C {(rm)} {(-f)} {($ VSub_Name "$sorted_table")}) (C {(echo)} {(DQ ("};"))}) (C {(echo)} {(DQ ("#define SYSCALLTBL_") (${ VSub_Name arch) ("_MAX_ID ") (${ VSub_Name max_nr))}) ] )