Skip to contentSkip to conversation

Use of __ia64_syscall() - syscall interface

Linux-ia64 David Mosberger 2 participants 3 messages Dec 16, 2002 – Dec 17, 2002

lore
Share & tools
lore
#0 lore raw
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
#1 lore raw
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 in unistd.h is 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 **

#2 lore raw
In reply to David Mosberger
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