[RndTbl] syscall mapping in userland.
Sean Cody
sean at tinfoilhat.ca
Mon Mar 12 01:29:53 CDT 2007
I'm implementing a basic system call to get a handle on how.
Now I build it into a kernel fine and call it via 'syscall
(__NR_foo)'; which gives the desired output.
Now I'm trying to get the stub working so I can call in userland via
'foo()'..
Since when compiling the kernel my foo.h wasn't put in /usr/include/
linux/foo.h I copied it there myself.
The contents are below:
#include <linux/unistd.h>
_syscall0(int,foo); /* no parameters. */
Now if I complile a test userland app trying to reference foo.h I get.
gcc -o t test.c
In file included from test.c:2:
/usr/include/linux/foo.h: error: expected declaration specifiers or
'...' before 'foo'
/usr/include/linux/foo.h: warning: data definition has no type or
storage class
This lends me to believe that either I'm using _syscall0 wrong or it
is broken (since I can invoke the system call by it's number). I've
grepped through the kernel source and found lots of references
(specifically x64 ones) for stub_syscallX but nothing matching what
has been described (aside from the macro definitions of course).
I've also ready through syscall(2) man page and it states I'm using
it right as does the macro itself in include/asm/unistd.h I've also
tried going around the macro by doing it manually (ie. implement the
macro with my values instead of the 'macro parameters').
Does anyone see anything obviously wrong with the above or have any
links to relevant documents that detail syscall creation on a kernel
newer than 2.4 (lots I've found so far are 2.4 centric and there have
been significant layout changes since)?
--
Sean
More information about the Roundtable
mailing list