On Fri, Jul 03, 2015 at 12:51:49PM +0200, Gilles Chanteperdrix wrote:
> > index 0000000..36b1e69
> > --- /dev/null
> > +++ b/kernel/cobalt/posix/gen-syscall-entries.sh
> > @@ -0,0 +1,24 @@
> > +#! /bin/sh
> > +
> > +set -e
> > +
> > +shift
> > +
> > +echo "#ifdef COBALT_LIST_CALL_ENTRIES"
> > +awk '
> > +match($0, /COBALT_SYSCALL\([^,]*, [^,]*/) {
> > + str=substr($0, RSTART + 15, RLENGTH - 15)
> > + match(str, /[^,]*/)
> > + print "__COBALT_CALL_ENTRY(" substr(str, RSTART, RLENGTH) ")"
> > +}
> > +' $*
> > +echo "#endif"
> > +
> > +echo "#ifdef COBALT_LIST_MODES"
> > +awk '
> > +match($0, /COBALT_SYSCALL\([^,]*, [^,]*/) {
> > + str=substr($0, RSTART + 15, RLENGTH - 15)
> > + print "__COBALT_MODE(" str ")"
> > +}
> > +' $*
> > +echo "#endif"
>
> This is particularly inelegant:
> - you do not need awk to do that, sed is sufficient
> - with using awk, you can generate the two files in one pass, and
> remove the #ifdefs trick;
> - I think the awk script should at least generate an error in case
> of parser error
>
> I will submit an awk script which does that.
Ok, another awk script which does that:
BEGIN {
system("rm -f syscalls_modes.h syscalls_entries.h")
}
match($0, /COBALT_SYSCALL\([^,]*,[ \t]*[^,]*/) {
str=substr($0, RSTART + 15, RLENGTH - 15)
match(str, /[^, \t]*/)
syscall=substr(str, RSTART, RLENGTH)
if (syscall == "") {
print "Failed to find syscall name in line " $0
exit 1
}
print "__COBALT_MODE(" str ")," >> "syscalls_modes.h"
print "__COBALT_CALL_ENTRY(" syscall ")," >> "syscalls_entries.h"
next
}
/COBALT_SYSCALL\(/ {
print "Failed to parse line " $0
exit 1
}
It supposes it is running from the output directory, but we can pass
the output directory as a parameter if you prefer.
--
Gilles.
https://click-hack.org
_______________________________________________
Xenomai mailing list
[email protected]
http://xenomai.org/mailman/listinfo/xenomai