-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[POWERPC] Check that the syscall table matches the syscall numbers
Also check that __NR_syscalls has been updated appropriately. Hopefully this will catch any out of order additions to the table in the future. Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Paul Mackerras <paulus@samba.org>
- Loading branch information
Stephen Rothwell
authored and
Paul Mackerras
committed
Jan 17, 2008
1 parent
4ec161c
commit 0a4690c
Showing
3 changed files
with
101 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
/* | ||
* This file, when run through CPP produces a list of syscall numbers | ||
* in the order of systbl.h. That way we can check for gaps and syscalls | ||
* that are out of order. | ||
* | ||
* Unfortunately, we cannot check for the correct ordering of entries | ||
* using SYSX(). | ||
* | ||
* Copyright © IBM Corporation | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License | ||
* as published by the Free Software Foundation; either version | ||
* 2 of the License, or (at your option) any later version. | ||
*/ | ||
#include <asm/unistd.h> | ||
|
||
#define SYSCALL(func) __NR_##func | ||
#define COMPAT_SYS(func) __NR_##func | ||
#define PPC_SYS(func) __NR_##func | ||
#ifdef CONFIG_PPC64 | ||
#define OLDSYS(func) -1 | ||
#define SYS32ONLY(func) -1 | ||
#else | ||
#define OLDSYS(func) __NR_old##func | ||
#define SYS32ONLY(func) __NR_##func | ||
#endif | ||
#define SYSX(f, f3264, f32) -1 | ||
|
||
#define SYSCALL_SPU(func) SYSCALL(func) | ||
#define COMPAT_SYS_SPU(func) COMPAT_SYS(func) | ||
#define PPC_SYS_SPU(func) PPC_SYS(func) | ||
#define SYSX_SPU(f, f3264, f32) SYSX(f, f3264, f32) | ||
|
||
/* Just insert a marker for ni_syscalls */ | ||
#define __NR_ni_syscall -1 | ||
|
||
/* | ||
* These are the known exceptions. | ||
* Hopefully, there will be no more. | ||
*/ | ||
#define __NR_llseek __NR__llseek | ||
#undef __NR_umount | ||
#define __NR_umount __NR_umount2 | ||
#define __NR_old_getrlimit __NR_getrlimit | ||
#define __NR_newstat __NR_stat | ||
#define __NR_newlstat __NR_lstat | ||
#define __NR_newfstat __NR_fstat | ||
#define __NR_newuname __NR_uname | ||
#define __NR_sysctl __NR__sysctl | ||
#define __NR_olddebug_setcontext __NR_sys_debug_setcontext | ||
|
||
/* We call sys_ugetrlimit for syscall number __NR_getrlimit */ | ||
#define getrlimit ugetrlimit | ||
|
||
START_TABLE | ||
#include <asm/systbl.h> | ||
END_TABLE __NR_syscalls |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
#!/bin/sh | ||
# | ||
# Just process the CPP output from systbl_chk.c and complain | ||
# if anything is out of order. | ||
# | ||
# Copyright © 2008 IBM Corporation | ||
# | ||
# This program is free software; you can redistribute it and/or | ||
# modify it under the terms of the GNU General Public License | ||
# as published by the Free Software Foundation; either version | ||
# 2 of the License, or (at your option) any later version. | ||
|
||
awk 'BEGIN { num = -1; } # Ignore the beginning of the file | ||
/^#/ { next; } | ||
/^[ \t]*$/ { next; } | ||
/^START_TABLE/ { num = 0; next; } | ||
/^END_TABLE/ { | ||
if (num != $2) { | ||
printf "__NR_syscalls (%s) is not one more than the last syscall (%s)\n", | ||
$2, num - 1; | ||
exit(1); | ||
} | ||
num = -1; # Ignore the rest of the file | ||
} | ||
{ | ||
if (num == -1) next; | ||
if (($1 != -1) && ($1 != num)) { | ||
printf "Syscall %s out of order (expected %s)\n", | ||
$1, num; | ||
exit(1); | ||
}; | ||
num++; | ||
}' "$1" |