mirror of
https://github.com/golang/sys.git
synced 2026-02-08 19:56:04 +03:00
The syscall numbers for Linux were out of date, so with the release of the 4.10 kernel, now seemed like a reasonable time to update them. Note that this change is mostly additive except that it removes some invalid syscalls for arm, and it removes all constants that refer to either the syscall base or total number of syscalls. Previous versions had only removed some of them. The updated syscall numbers were pulled directly from a header build of the 4.10 kernel. This required some minor adjustements to the sysnum generating perl script and is why the comments at the tops of the generated files look slightly different. I could include the script I used to do this, but right now it cannot generate the zerrors and ztypes files. Change-Id: Id94b967eb917f8f87500f818f2e494df9bccf2e0 Reviewed-on: https://go-review.googlesource.com/37570 Reviewed-by: Ian Lance Taylor <iant@golang.org>
79 lines
1.7 KiB
Perl
Executable File
79 lines
1.7 KiB
Perl
Executable File
#!/usr/bin/env perl
|
|
# Copyright 2009 The Go Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style
|
|
# license that can be found in the LICENSE file.
|
|
|
|
use strict;
|
|
|
|
if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") {
|
|
print STDERR "GOARCH or GOOS not defined in environment\n";
|
|
exit 1;
|
|
}
|
|
|
|
my $command = "mksysnum_linux.pl ". join(' ', @ARGV);
|
|
|
|
print <<EOF;
|
|
// $command
|
|
// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT
|
|
|
|
// +build $ENV{'GOARCH'},$ENV{'GOOS'}
|
|
|
|
package unix
|
|
|
|
const(
|
|
EOF
|
|
|
|
my $offset = 0;
|
|
|
|
sub fmt {
|
|
my ($name, $num) = @_;
|
|
if($num > 999){
|
|
# ignore deprecated syscalls that are no longer implemented
|
|
# https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/asm-generic/unistd.h?id=refs/heads/master#n716
|
|
return;
|
|
}
|
|
$name =~ y/a-z/A-Z/;
|
|
$num = $num + $offset;
|
|
print " SYS_$name = $num;\n";
|
|
}
|
|
|
|
my $prev;
|
|
open(GCC, "gcc -E -dD @ARGV |") || die "can't run gcc";
|
|
while(<GCC>){
|
|
if(/^#define __NR_Linux\s+([0-9]+)/){
|
|
# mips/mips64: extract offset
|
|
$offset = $1;
|
|
}
|
|
elsif(/^#define __NR(\w*)_SYSCALL_BASE\s+([0-9]+)/){
|
|
# arm: extract offset
|
|
$offset = $1;
|
|
}
|
|
elsif(/^#define __NR_syscalls\s+/) {
|
|
# ignore redefinitions of __NR_syscalls
|
|
}
|
|
elsif(/^#define __NR_(\w*)Linux_syscalls\s+/) {
|
|
# mips/mips64: ignore definitions about the number of syscalls
|
|
}
|
|
elsif(/^#define __NR_(\w+)\s+([0-9]+)/){
|
|
$prev = $2;
|
|
fmt($1, $2);
|
|
}
|
|
elsif(/^#define __NR3264_(\w+)\s+([0-9]+)/){
|
|
$prev = $2;
|
|
fmt($1, $2);
|
|
}
|
|
elsif(/^#define __NR_(\w+)\s+\(\w+\+\s*([0-9]+)\)/){
|
|
fmt($1, $prev+$2)
|
|
}
|
|
elsif(/^#define __NR_(\w+)\s+\(__NR_Linux \+ ([0-9]+)/){
|
|
fmt($1, $2);
|
|
}
|
|
elsif(/^#define __NR_(\w+)\s+\(__NR_SYSCALL_BASE \+ ([0-9]+)/){
|
|
fmt($1, $2);
|
|
}
|
|
}
|
|
|
|
print <<EOF;
|
|
)
|
|
EOF
|