|
Packit |
6c4009 |
# Icky intimate knowledge of MiG output.
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
BEGIN { print "/* This file is generated by shortcut.awk. */";
|
|
Packit |
6c4009 |
print "#include <mach-shortcuts-hidden.h>";
|
|
Packit |
6c4009 |
echo=1;
|
|
Packit |
6c4009 |
inproto=0; proto=""; arglist="";
|
|
Packit |
6c4009 |
}
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
$1 == "LINTLIBRARY" { print "#include <mach.h>"; next }
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
$1 == "weak_alias" { next }
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
# Copy the first line of the definition, but
|
|
Packit |
6c4009 |
# replace the function name (RPC) with CALL.
|
|
Packit |
6c4009 |
$NF == rpc \
|
|
Packit |
6c4009 |
{
|
|
Packit |
6c4009 |
for (i = 1; i < NF; ++i) printf "%s ", $i;
|
|
Packit |
6c4009 |
print call;
|
|
Packit |
6c4009 |
next;
|
|
Packit |
6c4009 |
}
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
# Collect the lines of the prototype in PROTO, and extract the parameter
|
|
Packit |
6c4009 |
# names into ARGLIST.
|
|
Packit |
6c4009 |
NF == 1 && $1 == ")" { inproto=0 }
|
|
Packit |
6c4009 |
inproto { proto = proto $0;
|
|
Packit |
6c4009 |
arg = $NF;
|
|
Packit |
6c4009 |
gsub(/[^a-zA-Z0-9_,]/, "", arg);
|
|
Packit |
6c4009 |
arglist = arglist arg;
|
|
Packit |
6c4009 |
}
|
|
Packit |
6c4009 |
NF == 1 && $1 == "(" { inproto=1 }
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
/^{$/ { echo=0; }
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
echo == 1 { print $0; }
|
|
Packit |
6c4009 |
|
|
Packit |
6c4009 |
/^}$/ && proto != "" \
|
|
Packit |
6c4009 |
{
|
|
Packit |
6c4009 |
print "{";
|
|
Packit |
6c4009 |
print " kern_return_t err;";
|
|
Packit |
6c4009 |
print " extern kern_return_t " syscall " (" proto ");";
|
|
Packit |
6c4009 |
print " extern kern_return_t " rpc " (" proto ");";
|
|
Packit |
6c4009 |
print " err = " syscall " (" arglist ");";
|
|
Packit |
6c4009 |
print " if (err == MACH_SEND_INTERRUPTED)";
|
|
Packit |
6c4009 |
print " err = " rpc " (" arglist ");";
|
|
Packit |
6c4009 |
print " return err;"
|
|
Packit |
6c4009 |
print "}";
|
|
Packit |
6c4009 |
print "weak_alias (" call ", " alias ")";
|
|
Packit |
6c4009 |
print "libc_hidden_def (" call ")";
|
|
Packit |
6c4009 |
# Declare RPC so the weak_alias that follows will work.
|
|
Packit |
6c4009 |
print "extern __typeof (" call ") " rpc ";";
|
|
Packit |
6c4009 |
echo = 1;
|
|
Packit |
6c4009 |
}
|