It seems that as of kernel version 2.6.x (which x? does anybody know?) the macros _syscallX (where X=1,2,3,4,5,6) have been removed. Now what is a poor developer to do in order to get a system call to work?
I haven't been able to find a proper written document describing the "Novo ordo seclorum" of the kernel but what I did is simple and seems to work (compiling at least).
The _syscallX macros produced a wrapper function for the standard glibc function syscall(). This is what I did also but without the macro.
Let's say you want to use
int sys_foo(char* arg1,int arg2,struct bar* arg3).
Back in the old kernel days you whould put the following in your C source file:
_syscall3(int, sys_foo, char*, arg1, int, arg2, struct bar*, arg3) /* mind the comma's */
and you would use sys_foo normally as being defined in the same source file.
Observe to what this macro expands:
int sys_foo (char* arg1, int arg2, struct bar* arg3)
{
return syscall( __NR_sys_futex, arg1, arg2, arg3);
}
Case solved. Use the above function prototype as a guide and you will be rubbing your eyes*
(*) Direct greek translation of the expression "τρίβω τα μάτια μου". It is meant as a greek joke. All foreign speaking visitors please ignore and replace with "you will be astonished" or something similar.
Showing posts with label syscall. Show all posts
Showing posts with label syscall. Show all posts
Thursday, May 3, 2007
Subscribe to:
Posts (Atom)