2 ($arch, $file) = @ARGV;
4 if (!open(FILE, "< $file")) {
5 print STDERR "$file: $!\n";
9 while ( defined($line = <FILE>) ) {
11 $line =~ s/\s*\#.*$//; # Strip comments and trailing blanks
14 if ( $line =~ /^\s*(.*)\s+([_a-zA-Z][_a-zA-Z0-9]+)\s*\((.*)\)$/ ) {
19 @args = split(/\s*\,\s*/, $argv);
24 push(@cargs, "$arg a".$i++);
28 if ( $arch eq 'i386' ) {
29 open(OUT, "> socketcalls/${name}.S")
30 or die "$0: Cannot open socketcalls/${name}.S\n";
32 print OUT "#include <sys/socketcalls.h>\n";
34 print OUT "\t.text\n";
35 print OUT "\t.align 4\n";
36 print OUT "\t.globl ${name}\n";
37 print OUT "\t.type ${name},\@function\n";
38 print OUT "${name}:\n";
39 print OUT "\tmovb \$SYS_\U${name}\E,%al\n";
40 print OUT "\tjmp __socketcall_common\n";
41 print OUT "\t.size ${name},.-${name}\n";
43 open(OUT, "> socketcalls/${name}.c")
44 or die "$0: Cannot open socketcalls/${name}.c\n";
45 print OUT "#include \"socketcommon.h\"\n\n";
47 print OUT "#ifdef __NR_$name\n\n";
48 print OUT "_syscall", scalar(@args), "(", $type, ',', $name;
50 foreach $arg ( @args ) {
51 print OUT ",", $arg, ",a",$i++;
54 print OUT "\n#else\n\n";
56 print OUT "$type $name (", join(', ', @cargs), ")\n";
58 print OUT " unsigned long args[$nargs];\n";
59 for ( $i = 0 ; $i < $nargs ; $i++ ) {
60 print OUT " args[$i] = (unsigned long)a$i;\n";
62 print OUT " return ($type) socketcall(SYS_\U${name}\E, args);\n";
64 print OUT "\n#endif\n";
68 print STDERR "$file:$.: Could not parse input\n";