3 $v = $ENV{'KBUILD_VERBOSE'};
4 $quiet = defined($v) ? !$v : 0;
12 die "$0: Unknown option: $arg\n";
18 ($file, $arch, $outputdir) = @args;
20 if (!open(FILE, "< $file")) {
24 print "socketcall-objs := ";
25 while ( defined($line = <FILE>) ) {
27 $line =~ s/\s*[\#\;].*$//; # Strip comments and trailing blanks
30 if ( $line =~ /^\s*\<\?\>\s*(.*)\s+([_a-zA-Z][_a-zA-Z0-9]+)\s*\((.*)\)$/ ) {
35 @args = split(/\s*\,\s*/, $argv);
40 push(@cargs, "$arg a".$i++);
43 print " \\\n\t${name}.o";
45 if ( $arch eq 'i386' ) {
46 open(OUT, '>', "${outputdir}/${name}.S")
47 or die "$0: Cannot open ${outputdir}/${name}.S\n";
49 print OUT "#include <sys/socketcalls.h>\n";
51 print OUT "\t.text\n";
52 print OUT "\t.align 4\n";
53 print OUT "\t.globl ${name}\n";
54 print OUT "\t.type ${name},\@function\n";
55 print OUT "${name}:\n";
56 print OUT "\tmovb \$SYS_\U${name}\E,%al\n";
57 print OUT "\tjmp __socketcall_common\n";
58 print OUT "\t.size ${name},.-${name}\n";
61 open(OUT, '>', "${outputdir}/${name}.c")
62 or die "$0: Cannot open ${outputdir}/${name}.c\n";
64 print OUT "#include \"../socketcommon.h\"\n";
66 print OUT "#ifndef __NR_${name}\n\n";
68 print OUT "extern long __socketcall(int, const unsigned long *);\n\n";
70 print OUT "$type $name (", join(', ', @cargs), ")\n";
72 print OUT " unsigned long args[$nargs];\n";
73 for ( $i = 0 ; $i < $nargs ; $i++ ) {
74 print OUT " args[$i] = (unsigned long)a$i;\n";
76 print OUT " return ($type) __socketcall(SYS_\U${name}\E, args);\n";
84 die "$file:$.: Could not parse input\n";