diff options
Diffstat (limited to 'libc')
| -rw-r--r-- | libc/sysdeps/linux/i386/bits/syscalls.h | 19 | 
1 files changed, 9 insertions, 10 deletions
| diff --git a/libc/sysdeps/linux/i386/bits/syscalls.h b/libc/sysdeps/linux/i386/bits/syscalls.h index eb77ea8d0..8b2f1b0ec 100644 --- a/libc/sysdeps/linux/i386/bits/syscalls.h +++ b/libc/sysdeps/linux/i386/bits/syscalls.h @@ -152,28 +152,27 @@ type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5, type6 arg6) \  { \  return (type) (INLINE_SYSCALL(name, 6, arg1, arg2, arg3, arg4, arg5, arg6)); \  } -#define INLINE_SYSCALL(name, nr, args...) \ + #define INLINE_SYSCALL(name, nr, args...) \    ({                                                                          \ -    unsigned int result = INTERNAL_SYSCALL (name, , nr, args);                \ -    if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (result, ), 0))            \ +    unsigned int _resultvar = INTERNAL_SYSCALL (name, , nr, args);            \ +    if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (_resultvar, ), 0))        \        {                                                                       \ -        __set_errno (INTERNAL_SYSCALL_ERRNO (result, ));                      \ -        result = 0xffffffff;                                                  \ +        __set_errno (INTERNAL_SYSCALL_ERRNO (_resultvar, ));                  \ +        _resultvar = 0xffffffff;                                              \        }                                                                       \ -    (int) result; }) +    (int) _resultvar; })  #define INTERNAL_SYSCALL(name, err, nr, args...) \    ({                                                                          \ -    unsigned int resultvar;                                                   \ -    __asm__ __volatile__ (                                                    \ +    register unsigned int resultvar;                                          \ +    asm volatile (                                                            \      LOADARGS_##nr                                                             \      "movl %1, %%eax\n\t"                                                      \      "int $0x80\n\t"                                                           \      RESTOREARGS_##nr                                                          \      : "=a" (resultvar)                                                        \      : "i" (__NR_##name) ASMFMT_##nr(args) : "memory", "cc");                  \ -    (int) resultvar; }) - +     (int) resultvar; })  #define LOADARGS_0  #define LOADARGS_1 \ | 
