Dmitry V. Levin
e83e157021
Suppress repeated empty lines left after automated code removal. This change was made by filtering every source code file through "cat -s".
74 lines
1.5 KiB
Perl
74 lines
1.5 KiB
Perl
#!/usr/bin/perl -w
|
|
#generate syscall table from a template file (usually the master i386 syscall
|
|
#ent.h) and the x86_64 unistd.h
|
|
%conv = (
|
|
"exit" => "_exit",
|
|
);
|
|
|
|
%known = (
|
|
"mmap" => "sys_mmap",
|
|
"sched_yield" => "printargs",
|
|
);
|
|
|
|
# only used when the template file has no entry
|
|
%args = (
|
|
"arch_prctl" => 2,
|
|
"tkill" => 2,
|
|
"gettid" => 0,
|
|
"readahead" => 3,
|
|
# should decode all these:
|
|
"setxattr" => 5,
|
|
"lsetxattr" => 5,
|
|
"fsetxattr" => 5,
|
|
"getxattr" => 4,
|
|
"lgetxattr" => 4,
|
|
"fgetxattr" => 4,
|
|
"listxattr" => 3,
|
|
"llistxattr" => 3,
|
|
"flistxattr" => 3,
|
|
"removexattr" => 2,
|
|
"lremovexattr" => 2,
|
|
"fremovexattr" => 2,
|
|
"mmap" => 6,
|
|
"sched_yield" => 0,
|
|
);
|
|
|
|
open(F,$ARGV[0]) || die "cannot open template file $ARGV[0]\n";
|
|
|
|
while (<F>) {
|
|
next unless /{/;
|
|
s/\/\*.*\*\///;
|
|
($name) = /"([^"]+)"/;
|
|
chomp;
|
|
$call{$name} = $_;
|
|
}
|
|
|
|
open(SL, ">syscallnum.h") || die "cannot create syscallnum.h\n";
|
|
|
|
open(S,$ARGV[1]) || die "cannot open syscall file $ARGV[1]\n";
|
|
while (<S>) {
|
|
$name = "";
|
|
next unless (($name, $num) = /define\s+__NR_(\S+)\s+(\d+)/);
|
|
next if $name eq "";
|
|
|
|
$name = $conv{$name} if defined($conv{$name});
|
|
|
|
if (!defined($call{$name})) {
|
|
unless (defined($args{$name})) {
|
|
print STDERR "unknown call $name $num\n";
|
|
$na = 3;
|
|
} else {
|
|
$na = $args{$name};
|
|
}
|
|
if (defined($known{$name})) {
|
|
$func = $known{$name};
|
|
} else {
|
|
$func = "printargs";
|
|
}
|
|
print "\t{ $na,\t0,\t$func,\t\"$name\" }, /* $num */\n";
|
|
} else {
|
|
print "$call{$name} /* $num */\n";
|
|
}
|
|
print SL "#define SYS_$name $num\n"
|
|
}
|