Commit | Line | Data |
---|---|---|
067c3fe9 MT |
1 | awk < syscalls '\ |
2 | BEGIN { \ | |
3 | sysent = "sysent"; | |
4 | sysnames = "syscall.c"; | |
5 | syshdr = "syscall.h"; | |
6 | printf "/*\n * System call names.\n */\n" > sysnames; \ | |
7 | printf "char *syscallnames[] = {\n" > sysnames; \ | |
8 | printf "/*\n * System call numbers.\n */\n" > syshdr; \ | |
9 | } \ | |
10 | $1 ~ /^#[ ]*if/ { \ | |
11 | print > sysent; \ | |
12 | savesyscall = syscall; \ | |
13 | next; | |
14 | } \ | |
15 | $1 ~ /^#[ ]*el/ { \ | |
16 | print > sysent; \ | |
17 | syscall = savesyscall; \ | |
18 | next; \ | |
19 | } \ | |
20 | $1 ~ /^#/ { \ | |
21 | print > sysent; \ | |
22 | next; \ | |
23 | } \ | |
24 | syscall != $1 { \ | |
25 | printf "syscall number out of sync at %d; line is:\n", syscall; \ | |
26 | print; \ | |
27 | exit 1; \ | |
28 | } \ | |
29 | { comment = $4; \ | |
30 | for (i = 5; i <= NF; i++) \ | |
31 | comment = comment " " $i; \ | |
32 | if (NF < 5) \ | |
33 | $5 = $4; \ | |
34 | } \ | |
35 | $2 == "STD" { \ | |
36 | printf("\t%d, %s,\t\t\t/* %d = %s */\n", \ | |
37 | $3, $4, syscall, $5) > sysent; \ | |
38 | printf("\t\"%s\",\t\t\t/* %d = %s */\n", \ | |
39 | $5, syscall, $5) > sysnames; \ | |
40 | printf("#define\tSYS_%s\t%d\n", \ | |
41 | $5, syscall) > syshdr; \ | |
42 | } \ | |
43 | $2 == "COMPAT" { \ | |
44 | printf("\tcompat(%d, %s),\t\t/* %d = old %s */\n", \ | |
45 | $3, $4, syscall, $5) > sysent; \ | |
46 | printf("\t\"old %s\",\t\t/* %d = old %s */\n", \ | |
47 | $5, syscall, $5) > sysnames; \ | |
48 | printf("\t\t\t\t/* %d is old %s */\n", \ | |
49 | syscall, comment) > syshdr; \ | |
50 | } \ | |
51 | $2 == "OBSOL" { \ | |
52 | printf("\t0, nosys,\t\t\t/* %d = old %s */\n", \ | |
53 | syscall, comment) > sysent; \ | |
54 | printf("\t\"#%d\",\t\t\t/* %d = old %s */\n", \ | |
55 | syscall, syscall, comment) > sysnames; \ | |
56 | printf("\t\t\t\t/* %d is old %s */\n", \ | |
57 | syscall, comment) > syshdr; \ | |
58 | } \ | |
59 | $2 == "UNIMPL" { \ | |
60 | printf("\t0, nosys,\t\t\t/* %d = %s */\n", \ | |
61 | syscall, comment) > sysent; \ | |
62 | printf("\t\"#%d\",\t\t\t/* %d = %s */\n", \ | |
63 | syscall, syscall, comment) > sysnames; \ | |
64 | } \ | |
65 | { syscall++ }\ | |
66 | END { \ | |
67 | printf("};\n") > sysnames; \ | |
68 | } | |
69 | ' |