diff options
author | Andreas Schwab <schwab@suse.de> | 2002-12-21 19:37:26 +0000 |
---|---|---|
committer | Andreas Schwab <schwab@suse.de> | 2002-12-21 19:37:26 +0000 |
commit | 257757f8b032bd2913db107b7bbfa76cbce6f9d1 (patch) | |
tree | dd135dd3a88f8342406d5a2fd7d3a661b0f74086 | |
parent | 1332e84802b4dd0018655411b112999eccaf12c4 (diff) | |
download | glibc-257757f8b032bd2913db107b7bbfa76cbce6f9d1.tar.gz glibc-257757f8b032bd2913db107b7bbfa76cbce6f9d1.tar.xz glibc-257757f8b032bd2913db107b7bbfa76cbce6f9d1.zip |
*** empty log message ***
2002-12-21 Andreas Schwab <schwab@suse.de> * sysdeps/unix/sysv/linux/m68k/sysdep.h (INTERNAL_SYSCALL): Define. (INLINE_SYSCALL): Use it. (INTERNAL_SYSCALL_ERROR_P, INTERNAL_SYSCALL_ERRNO): Define. * sysdeps/unix/sysv/linux/m68k/getpagesize.c: Use INTERNAL_SYSCALL. * sysdeps/unix/sysv/linux/m68k/brk.c: Likewise.
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/m68k/sysdep.h | 27 |
2 files changed, 30 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog index 2bad0f6c58..c4c8ad12df 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2002-12-21 Andreas Schwab <schwab@suse.de> + + * sysdeps/unix/sysv/linux/m68k/sysdep.h (INTERNAL_SYSCALL): Define. + (INLINE_SYSCALL): Use it. + (INTERNAL_SYSCALL_ERROR_P, INTERNAL_SYSCALL_ERRNO): Define. + + * sysdeps/unix/sysv/linux/m68k/getpagesize.c: Use INTERNAL_SYSCALL. + * sysdeps/unix/sysv/linux/m68k/brk.c: Likewise. + 2002-12-20 Art Haas <ahaas@airmail.net> * sysdeps/gnu/siglist.c: Convert GCC extension initializer diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep.h b/sysdeps/unix/sysv/linux/m68k/sysdep.h index 1247cc49f2..005e60ffe1 100644 --- a/sysdeps/unix/sysv/linux/m68k/sysdep.h +++ b/sysdeps/unix/sysv/linux/m68k/sysdep.h @@ -163,7 +163,21 @@ SYSCALL_ERROR_LABEL: \ /* Define a macro which expands into the inline wrapper code for a system call. */ #undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ +#define INLINE_SYSCALL(name, nr, args...) \ + ({ unsigned int _sys_result = INTERNAL_SYSCALL (name, nr, args); \ + if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (_sys_result), 0)) \ + { \ + __set_errno (INTERNAL_SYSCALL_ERRNO (_sys_result)); \ + _sys_result = (unsigned int) -1; \ + } \ + (int) _sys_result; }) + +/* Define a macro which expands inline into the wrapper code for a system + call. This use is for internal calls that do not need to handle errors + normally. It will never touch errno. This returns just what the kernel + gave back. */ +#undef INTERNAL_SYSCALL +#define INTERNAL_SYSCALL(name, nr, args...) \ ({ unsigned int _sys_result; \ { \ LOAD_ARGS_##nr (args) \ @@ -174,13 +188,14 @@ SYSCALL_ERROR_LABEL: \ : "memory"); \ _sys_result = _d0; \ } \ - if (_sys_result >= (unsigned int) -4095) \ - { \ - __set_errno (-_sys_result); \ - _sys_result = (unsigned int) -1; \ - } \ (int) _sys_result; }) +#undef INTERNAL_SYSCALL_ERROR_P +#define INTERNAL_SYSCALL_ERROR_P(val) ((unsigned int) (val) >= -4095U) + +#undef INTERNAL_SYSCALL_ERRNO +#define INTERNAL_SYSCALL_ERRNO(val) (-(val)) + #define LOAD_ARGS_0() #define ASM_ARGS_0 #define LOAD_ARGS_1(a1) \ |