#include #include #include #include #define __sys2(x) #x #define __sys1(x) __sys2(x) #ifndef __syscall #define __syscall(name) "swi\t" __sys1(__NR_##name) "\n\t" #endif #define syscall1(type,name,type1,arg1) \ type name(type1 arg1) { \ long __res; \ __asm__ __volatile__ ( \ "mov\tr0,%1\n\t" \ __syscall(uname) \ "mov %0,r0" \ : "=r" (__res) \ : "r" ((long)(arg1)) \ : "r0","lr"); \ __syscall_return(type,__res); \ } static inline syscall1(int, my_uname, struct utsname *, utsn); int main() { struct utsname utsn; int ret = my_uname(&utsn); printf("%s\n", utsn.sysname); }