[RFC,PATCH] arch/arm: compute and export NR_syscalls
Will Drewry
wad at chromium.org
Sun Aug 21 20:43:33 EDT 2011
On Sun, Aug 21, 2011 at 4:07 AM, Russell King - ARM Linux
<linux at arm.linux.org.uk> wrote:
> On Wed, Aug 17, 2011 at 11:22:48AM +0200, Arnd Bergmann wrote:
>> On Wednesday 17 August 2011, Mikael Pettersson wrote:
>> > > I proposed this approach based solely on prior threads I've seen. E.g.,
>> > > - https://lkml.org/lkml/2007/6/1/427
>> > > (don't just #define)
>> > > - https://lkml.org/lkml/2009/8/27/280
>> > > (todo: x86-32 to move to x86-64)
>> > >
>> > > If a single line #define is good enough, then it certainly works for me.
>> >
>> > Yes, the one-line #define NR_syscalls in unistd.h is a perfectly adequate,
>> > if not entirely elegant, solution. Adding asm-export.c just for this is
>> > waaay overkill.
>>
>> Right. While the main problem with having the constant in asm/unistd.h
>> (needs to be kept in sync when adding new syscalls) is an annoyance,
>> the suggested approach is adding more complexity than necessary.
>>
>> If you want to have the value automatically computed, I'd suggest
>> moving the format of unistd.h over to a method like the one used
>> by x86-64 and asm-generic, which is to combine the syscall number
>> definitions with the list of syscall pointers that currently reside
>> in arch/arm/kernel/calls.S, for the added benefit that it's easier to
>> keep the two in sync as well.
>
> You obviously haven't looked at calls.S - the table has multiple
> options depending on whether its being used for EABI or OABI. It's
> not purely a 1:1 mapping between syscall number name and function
> name.
>
> Adding an additional parameter to the CALL() macro to get around that
> for the syscall number name starts making the file unweidly, especially
> if we obey the 80 column limit.
>
> Finally, the assembly 'number of syscalls' is different from the real
> number of syscalls to ensure that we don't overflow the 8-bit constant
> limit for the compare instruction. Whether that needs to be included
> in the C __NR_syscalls or not depends on how its used.
>
> I personally would prefer C code not to rely on the (unprovided)
> NR_syscalls due to these kinds of issues.
Upon continued inspection, I largely agree.I have some out-of-tree
code (hopefully not forever) which uses ftrace. It followed its
coding approach which statically allocates arrays based on
NR_syscalls. While it makes lookups simple, it creates more
infrastructure headaches for arches that have a non-zero syscall base
and/or differenting numberings based on the active ABI. I've since
changed my approach to one that works for all architectures and
doesn't require knowing NR_syscalls at compiled-time.
> Finally, if its just for ftrace, well I don't have a high regard for that
> code. It's something I hardly ever use and when I have tried to use it
> it has been soo dire in terms of overheads that it's just not worth
> bothering with. When I want timings out of the kernel, I have always
> (and continue to do so) implement my own gathering mechanisms rather
> than using the ftrace crap.
My personal interest is in reusing the shared filter engine along with
its awareness of system call metadata. That aside, I have a sneaking
suspicion ftrace_syscalls will move away from the current
NR_syscalls-based approach in order to support more architecture
flavors, but I have no idea for sure. (I'll be sending patches at
some point.)
thanks for your thoughts and consideration!
will
More information about the linux-arm-kernel
mailing list