On 2015-07-16 14:35, Jan Kiszka wrote:
> On 2015-07-03 14:38, Gilles Chanteperdrix wrote:
>> On Fri, Jul 03, 2015 at 02:31:25PM +0200, Gilles Chanteperdrix wrote:
>>> 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.
>>
>> Note that the simplistic approach taken precludes the use of
>> conditional compilation with syscall definitions.
> 
> I'll parametrize and integrate this, thanks.

To explain the variation from your approach that you will find in my
queue now: Letting the script generate two files in one run is very
unhandy when defining the Makefile rules. So I now went for a two-stage
generation via awk that spits out two different macros the tables can use.

Jan

-- 
Siemens AG, Corporate Technology, CT RTC ITP SES-DE
Corporate Competence Center Embedded Linux

_______________________________________________
Xenomai mailing list
[email protected]
http://xenomai.org/mailman/listinfo/xenomai

Reply via email to