Use of __ia64_syscall() - syscall interface
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Joel GUILLET
Joel> This doesn't compile on a Itanium. I got a "undefined Joel> reference to __ia64_syscall()"
Please use the syscall() routine instead. The stuff in unistd.h is for kernel-use only.
--david
Quoted 10 lines · David Mosberger
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Joel GUILLET
Joel> This doesn't compile on a Itanium. I got a "undefined Joel> reference to
__ia64_syscall()"Please use the
syscall()routine instead. The stuff inunistd.his for kernel-use only.--david
Thanks for your reply.
Actually, I had seen before some (lots of) mails (many from you) that recommands the use of the syscall() interface, but I mis-understood the message...
The problem is that I got some problems to find documentation about this interface and made a mix between the kernel and the glibc interfaces. (I finally found some in glibc/manual/libc.info-43 )
I can see clearly now. (Thanks for help)
So, as I found how to compile my program, I just send here the way I used the interface, just in case someone would need it. (even, if it's not the purpose of that mail-list).
***************************************
#ifndef __NR_sched_setaffinity
#ifndef _AFFINITY_H
#define _AFFINITY_H
#if defined(__ia64__)
#define __NR_sched_setaffinity 1231
#define __NR_sched_getaffinity 1232
#endif
#define sched_setaffinity(arg1, arg2, arg3) syscall(__NR_sched_setaffinity, arg1, arg2, arg3) #define sched_getaffinity(arg1, arg2, arg3) syscall(__NR_sched_getaffinity, arg1, arg2, arg3)
#endif /* __NR_sched_setaffinity */
#endif /* _AFFINITY_H */
***************************************
(...and then just use directly sched_setaffinity in your program !)
Is that clean ?
----------------
** Joel **
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line · Joel GUILLET
Joel> Actually, I had seen before some (lots of) mails (many from Joel> you) that recommands the use of the syscall() interface, but I Joel> mis-understood the message... The problem is that I got some Joel> problems to find documentation about this interface and made a Joel> mix between the kernel and the glibc interfaces. (I finally Joel> found some in glibc/manual/libc.info-43 )
Yes, syscall() is documented in the glibc manual.
Joel> #ifndef __NR_sched_setaffinity
Joel> #ifndef _AFFINITY_H
Joel> #define _AFFINITY_H
Joel> #if defined(__ia64__)
Joel> #define __NR_sched_setaffinity 1231
Joel> #define __NR_sched_getaffinity 1232
Joel> #endif
Joel> #define sched_setaffinity(arg1, arg2, arg3) syscall(__NR_sched_setaffinity, arg1, arg2, arg3) Joel> #define sched_getaffinity(arg1, arg2, arg3) syscall(__NR_sched_getaffinity, arg1, arg2, arg3)
Joel> #endif /* __NR_sched_setaffinity */
Joel> #endif /* _AFFINITY_H */
This is basically fine, except that for syscall(), the syscall number macros by convention start with SYS_*. So I'd rewrite your code to:
#ifndef SYS_sched_setaffinity
#ifndef _AFFINITY_H
#define _AFFINITY_H
#if defined(__ia64__)
#define SYS_sched_setaffinity 1231
#define SYS_sched_getaffinity 1232
#endif
#define sched_setaffinity(arg1, arg2, arg3) syscall(SYS_sched_setaffinity, arg1, arg2, arg3) #define sched_getaffinity(arg1, arg2, arg3) syscall(SYS_sched_getaffinity, arg1, arg2, arg3)
#endif /* SYS_sched_setaffinity */
#endif /* _AFFINITY_H */
--david