Fix NR_syscalls in ARM
PATCH 1/1 Fix NR_syscalls in ARM
The -rt patch adds a NR_syscalls symbol to the arm/unistd.h but it is not the correct value as there are 348 syscalls on ARM and the existing change sets the symbol to 322.
---
Russell: Why isn't this in mainline? Other arches all seem to have this symbol already defined.
include/asm-arm/unistd.h +1 -1
@@ -375,7 +375,7 @@#define __NR_kexec_load (__NR_SYSCALL_BASE+347)#ifndef __ASSEMBLY__ -#define NR_syscalls (__NR_set_mempolicy + 1 - __NR_SYSCALL_BASE) +#define NR_syscalls (__NR_kexec_load + 1 - __NR_SYSCALL_BASE)#endif /*
Signature · 1 line
Deepak Saxena - [email protected] - http://www.plexity.net
Quoted 6 lines · Deepak Saxena
The -rt patch adds a
NR_syscallssymbol to thearm/unistd.hbut it is not the correct value as there are 348 syscalls on ARM and the existing change sets the symbol to 322.Russell: Why isn't this in mainline? Other arches all seem to have this symbol already defined.
The hint is that it isn't in mainline; it's just plainly not required. It's also the wrong place to define it; it's not a property that unistd.h should concern itself with - it's a property of the kernel's branch table for calling the syscalls, and on ARM we calculate that number directly from the size of the kernel's branch table.
It's also not just last_syscall_number+1 since the table is sized to make the assembly easy - iow, a number divisible by 4.
So all in all, NR_syscalls in unistd.h is just utterly wrong.
Signature · 3 lines
Russell King Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/ maintainer of:
Quoted 14 lines · Russell King
Quoted 6 lines · Deepak Saxena
The -rt patch adds a
NR_syscallssymbol to thearm/unistd.hbut it is not the correct value as there are 348 syscalls on ARM and the existing change sets the symbol to 322.Russell: Why isn't this in mainline? Other arches all seem to have this symbol already defined.
The hint is that it isn't in mainline; it's just plainly not required. It's also the wrong place to define it; it's not a property that
unistd.hshould concern itself with - it's a property of the kernel's branch table for calling the syscalls, and on ARM we calculate that number directly from the size of the kernel's branch table.
Quoted 4 lines
It's also not just last_syscall_number+1 since the table is sized to make the assembly easy - iow, a number divisible by 4.
So all in all,
NR_syscallsinunistd.his just utterly wrong.
BTW, it should be pointed out that you've found the exact reason why putting it in unistd.h is _wrong_. It's all to easy for it to get out of sync with updates to the place where it really matters - the code which bounds-checks the syscall number (that being the assembly code which indexes the branch table.)
Signature · 3 lines
Russell King Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/ maintainer of: