Automatically generate the system call wrappers
[monolithium.git] / library / gen_wrappers.awk
1 BEGIN {
2     FS = ",[ ]*";
3
4     print "/*";
5     print " * wrappers.c (Automatically generated)";
6     print " *";
7     print " * Copyright (C) 2017 Aleksandar Andrejevic <theflash@sdf.lonestar.org>";
8     print " *";
9     print " * This program is free software: you can redistribute it and/or modify";
10     print " * it under the terms of the GNU Affero General Public License as";
11     print " * published by the Free Software Foundation, either version 3 of the";
12     print " * License, or (at your option) any later version.";
13     print " *";
14     print " * This program is distributed in the hope that it will be useful,";
15     print " * but WITHOUT ANY WARRANTY; without even the implied warranty of";
16     print " * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the";
17     print " * GNU Affero General Public License for more details.";
18     print " *";
19     print " * You should have received a copy of the GNU Affero General Public License";
20     print " * along with this program.  If not, see <http://www.gnu.org/licenses/>.";
21     print " */";
22     print "";
23     print "#include <sdk/monolithium.h>";
24     print "";
25 }
26
27 /sysret_t syscall_[a-zA-Z0-9_]+\(.*\);/ {
28     print substr($0, 1, length - 1);
29     print "{";
30
31     match($0, /\(.*\)/);
32     printf "    return syscall(" toupper(substr($0, 10, RSTART - 10));
33
34     $0 = substr($0, RSTART + 1, RLENGTH - 2);
35
36     if ($0 != "void") {
37         for (i = 1; i <= NF; i++) {
38             match($i, /[a-zA-Z0-9_]*$/);
39             printf ", " substr($i, RSTART);
40         }
41     }
42
43     print ");";
44     print "}";
45     print "";
46 }