ref: 49c9701234199720fed04d928f863cd8b82fdc0e
parent: 42f800d4d564c34db94b6b5bbda3d900b86980ea
author: kvik <kvik@a-b.xyz>
date: Wed Sep 23 13:17:52 EDT 2020
syscall: fix build problem caused by stale tab.h Recently the script which generates tab.h and the code including it got incompatibly changed. People reported problems involving syntax errors when trying to rebuild the system following a sysupdate. The problem was with the script being embedded within a mkfile rule, meaning that mk didn't notice it changing and therefore didn't rebuild the target file. For people who were rebuilding the system this meant that the old tab.h got included, causing syntax errors. This patch moves the codegen script into a file and tells mk about this new dependency, so that tab.h will get rebuilt for everyone. I also took an opportunity to rewrite the script, hopefuly making it easier to follow.
--- a/sys/src/cmd/syscall/mkfile
+++ b/sys/src/cmd/syscall/mkfile
@@ -16,25 +16,8 @@
SYSCALL=/sys/src/libc/9syscall/sys.h
-tab.h: $SYSCALL
- awk '
- BEGIN{ print "enum{" }- { printf "%s, ", $2 }- END{- print "READ, WRITE, NTAB"
- print "};"
- }' <$SYSCALL >$target
- awk '
- BEGIN{ print "struct Call tab[] = {" }- { printf "[%s] \"%s\", (int(*)(...))%s,\n",- $2, tolower($2), tolower($2)
- }
- END{- print "[READ] \"read\", (int(*)(...))read,"
- print "[WRITE] \"write\", (int(*)(...))write,"
- print "[NTAB] nil, 0"
- print "};"
- }' <$SYSCALL >>$target
+tab.h: $SYSCALL mktab.awk
+ mktab.awk $SYSCALL >$target
clean:V:
rm -f *.[$OS] [$OS].out $TARG $HFILES
--- /dev/null
+++ b/sys/src/cmd/syscall/mktab.awk
@@ -1,0 +1,14 @@
+#!/bin/awk -f
+{ e = e $2 ", "+ s = s sprintf("[%s] \"%s\", (int(*)(...))%s,\n",+ $2, tolower($2), tolower($2))
+}
+END{+ e = e "READ, WRITE, NTAB"
+ s = s "[READ] \"read\", (int(*)(...))read,\n"
+ s = s "[WRITE] \"write\", (int(*)(...))write,\n"
+ s = s "[NTAB] nil, 0\n"
+
+ print "enum{", e, "};"+ print "struct Call tab[] = {\n", s, "};"+}
--
⑨