diff options
author | Carmelo Amoroso <carmelo.amoroso@st.com> | 2008-09-18 15:14:15 +0000 |
---|---|---|
committer | Carmelo Amoroso <carmelo.amoroso@st.com> | 2008-09-18 15:14:15 +0000 |
commit | 0f8269c12af221c163ed28b0388242506d3aee8a (patch) | |
tree | e52bb037accfcb175b1cdb7e18429442c26bea2b /libpthread/nptl/sysdeps/unix | |
parent | 7bae7ba631cbb0677f1e08a9e6e9a41a554aef0b (diff) | |
download | uClibc-alpine-0f8269c12af221c163ed28b0388242506d3aee8a.tar.bz2 uClibc-alpine-0f8269c12af221c163ed28b0388242506d3aee8a.tar.xz |
Fixes posix_fadvise[64] functions to return the
error number in case of failure instead of -1 and setting errno,
according to SuSv3 (IEEE Std 1003.1 2004 edition) specification.
Also refactor sysdep.h and syscalls.h moving INTERNAL_SYSCALL
macro to the latter (as other archs do in uclibc).
Signed-off-by: Filippo Arcidiacono <filippo.arcidiacono@st.com>
Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
Diffstat (limited to 'libpthread/nptl/sysdeps/unix')
-rw-r--r-- | libpthread/nptl/sysdeps/unix/sysdep.h | 2 | ||||
-rw-r--r-- | libpthread/nptl/sysdeps/unix/sysv/linux/sh/sysdep.h | 147 |
2 files changed, 2 insertions, 147 deletions
diff --git a/libpthread/nptl/sysdeps/unix/sysdep.h b/libpthread/nptl/sysdeps/unix/sysdep.h index 3f5d1721c..0e7c9da5a 100644 --- a/libpthread/nptl/sysdeps/unix/sysdep.h +++ b/libpthread/nptl/sysdeps/unix/sysdep.h @@ -58,4 +58,6 @@ /* Wrappers around system calls should normally inline the system call code. But sometimes it is not possible or implemented and we use this code. */ +#ifndef INLINE_SYSCALL #define INLINE_SYSCALL(name, nr, args...) __syscall_##name (args) +#endif diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sysdep.h b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sysdep.h index fc2d71591..76cd04a55 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sysdep.h +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/sysdep.h @@ -219,153 +219,6 @@ 1: .long SYS_ify (syscall_name); \ 2: -#else /* not __ASSEMBLER__ */ - -#define SYSCALL_INST_STR0 "trapa #0x10\n\t" -#define SYSCALL_INST_STR1 "trapa #0x11\n\t" -#define SYSCALL_INST_STR2 "trapa #0x12\n\t" -#define SYSCALL_INST_STR3 "trapa #0x13\n\t" -#define SYSCALL_INST_STR4 "trapa #0x14\n\t" -#define SYSCALL_INST_STR5 "trapa #0x15\n\t" -#define SYSCALL_INST_STR6 "trapa #0x16\n\t" - -# ifdef NEED_SYSCALL_INST_PAD -# define SYSCALL_INST_PAD "\ - or r0,r0; or r0,r0; or r0,r0; or r0,r0; or r0,r0" -# else -# define SYSCALL_INST_PAD -# endif - -#define ASMFMT_0 -#define ASMFMT_1 \ - , "r" (r4) -#define ASMFMT_2 \ - , "r" (r4), "r" (r5) -#define ASMFMT_3 \ - , "r" (r4), "r" (r5), "r" (r6) -#define ASMFMT_4 \ - , "r" (r4), "r" (r5), "r" (r6), "r" (r7) -#define ASMFMT_5 \ - , "r" (r4), "r" (r5), "r" (r6), "r" (r7), "0" (r0) -#define ASMFMT_6 \ - , "r" (r4), "r" (r5), "r" (r6), "r" (r7), "0" (r0), "r" (r1) -#define ASMFMT_7 \ - , "r" (r4), "r" (r5), "r" (r6), "r" (r7), "0" (r0), "r" (r1), "r" (r2) - -#define SUBSTITUTE_ARGS_0() -#define SUBSTITUTE_ARGS_1(arg1) \ - long int _arg1 = (long int) (arg1); \ - register long int r4 __asm__ ("%r4") = (long int) (_arg1) -#define SUBSTITUTE_ARGS_2(arg1, arg2) \ - long int _arg1 = (long int) (arg1); \ - long int _arg2 = (long int) (arg2); \ - register long int r4 __asm__ ("%r4") = (long int) (_arg1); \ - register long int r5 __asm__ ("%r5") = (long int) (_arg2) -#define SUBSTITUTE_ARGS_3(arg1, arg2, arg3) \ - long int _arg1 = (long int) (arg1); \ - long int _arg2 = (long int) (arg2); \ - long int _arg3 = (long int) (arg3); \ - register long int r4 __asm__ ("%r4") = (long int) (_arg1); \ - register long int r5 __asm__ ("%r5") = (long int) (_arg2); \ - register long int r6 __asm__ ("%r6") = (long int) (_arg3) -#define SUBSTITUTE_ARGS_4(arg1, arg2, arg3, arg4) \ - long int _arg1 = (long int) (arg1); \ - long int _arg2 = (long int) (arg2); \ - long int _arg3 = (long int) (arg3); \ - long int _arg4 = (long int) (arg4); \ - register long int r4 __asm__ ("%r4") = (long int) (_arg1); \ - register long int r5 __asm__ ("%r5") = (long int) (_arg2); \ - register long int r6 __asm__ ("%r6") = (long int) (_arg3); \ - register long int r7 __asm__ ("%r7") = (long int) (_arg4) -#define SUBSTITUTE_ARGS_5(arg1, arg2, arg3, arg4, arg5) \ - long int _arg1 = (long int) (arg1); \ - long int _arg2 = (long int) (arg2); \ - long int _arg3 = (long int) (arg3); \ - long int _arg4 = (long int) (arg4); \ - long int _arg5 = (long int) (arg5); \ - register long int r4 __asm__ ("%r4") = (long int) (_arg1); \ - register long int r5 __asm__ ("%r5") = (long int) (_arg2); \ - register long int r6 __asm__ ("%r6") = (long int) (_arg3); \ - register long int r7 __asm__ ("%r7") = (long int) (_arg4); \ - register long int r0 __asm__ ("%r0") = (long int) (_arg5) -#define SUBSTITUTE_ARGS_6(arg1, arg2, arg3, arg4, arg5, arg6) \ - long int _arg1 = (long int) (arg1); \ - long int _arg2 = (long int) (arg2); \ - long int _arg3 = (long int) (arg3); \ - long int _arg4 = (long int) (arg4); \ - long int _arg5 = (long int) (arg5); \ - long int _arg6 = (long int) (arg6); \ - register long int r4 __asm__ ("%r4") = (long int)(_arg1); \ - register long int r5 __asm__ ("%r5") = (long int) (_arg2); \ - register long int r6 __asm__ ("%r6") = (long int) (_arg3); \ - register long int r7 __asm__ ("%r7") = (long int) (_arg4); \ - register long int r0 __asm__ ("%r0") = (long int) (_arg5); \ - register long int r1 __asm__ ("%r1") = (long int) (_arg6) -#define SUBSTITUTE_ARGS_7(arg1, arg2, arg3, arg4, arg5, arg6, arg7) \ - long int _arg1 = (long int) (arg1); \ - long int _arg2 = (long int) (arg2); \ - long int _arg3 = (long int) (arg3); \ - long int _arg4 = (long int) (arg4); \ - long int _arg5 = (long int) (arg5); \ - long int _arg6 = (long int) (arg6); \ - long int _arg7 = (long int) (arg7); \ - register long int r4 __asm__ ("%r4") = (long int) (_arg1); \ - register long int r5 __asm__ ("%r5") = (long int) (_arg2); \ - register long int r6 __asm__ ("%r6") = (long int) (_arg3); \ - register long int r7 __asm__ ("%r7") = (long int) (_arg4); \ - register long int r0 __asm__ ("%r0") = (long int) (_arg5); \ - register long int r1 __asm__ ("%r1") = (long int) (_arg6); \ - register long int r2 __asm__ ("%r2") = (long int) (_arg7) - -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ - ({ \ - unsigned int __resultvar = INTERNAL_SYSCALL (name, , nr, args); \ - if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (__resultvar, ), 0)) \ - { \ - __set_errno (INTERNAL_SYSCALL_ERRNO (__resultvar, )); \ - __resultvar = 0xffffffff; \ - } \ - (int) __resultvar; }) - -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL(name, err, nr, args...) \ - ({ \ - unsigned long int resultvar; \ - register long int r3 __asm__ ("%r3") = SYS_ify (name); \ - SUBSTITUTE_ARGS_##nr(args); \ - \ - __asm__ volatile (SYSCALL_INST_STR##nr SYSCALL_INST_PAD \ - : "=z" (resultvar) \ - : "r" (r3) ASMFMT_##nr \ - : "memory"); \ - \ - (int) resultvar; }) - -/* The _NCS variant allows non-constant syscall numbers. */ -#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ - ({ \ - unsigned long int resultvar; \ - register long int r3 __asm__ ("%r3") = (name); \ - SUBSTITUTE_ARGS_##nr(args); \ - \ - __asm__ volatile (SYSCALL_INST_STR##nr SYSCALL_INST_PAD \ - : "=z" (resultvar) \ - : "r" (r3) ASMFMT_##nr \ - : "memory"); \ - \ - (int) resultvar; }) - -#undef INTERNAL_SYSCALL_DECL -#define INTERNAL_SYSCALL_DECL(err) do { } while (0) - -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) \ - ((unsigned int) (val) >= 0xfffff001u) - -#undef INTERNAL_SYSCALL_ERRNO -#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) - #endif /* __ASSEMBLER__ */ #endif /* linux/sh/sysdep.h */ |