diff options
author | Austin Foxley <austinf@cetoncorp.com> | 2010-04-02 09:17:30 -0700 |
---|---|---|
committer | Austin Foxley <austinf@cetoncorp.com> | 2010-04-02 09:17:30 -0700 |
commit | aae3eb9256affb18cff589b52ee26e0a4e557bbd (patch) | |
tree | 003711a54e7dfbde0b50979e2942fd3e0d3451c8 /libc/sysdeps/linux/nios2/bits | |
parent | ef18cfe8ebab25f5ef92e81956f50e2dc57df602 (diff) | |
parent | 2864786ad884369ab5397be864e9f43d32bc2726 (diff) |
Merge commit 'origin/master' into nptl
Conflicts:
Makefile.in
extra/Configs/Config.in
libc/sysdeps/linux/common/bits/kernel-features.h
libc/sysdeps/linux/common/poll.c
libc/sysdeps/linux/common/sysdep.h
libc/sysdeps/linux/sh/sysdep.h
Signed-off-by: Austin Foxley <austinf@cetoncorp.com>
Diffstat (limited to 'libc/sysdeps/linux/nios2/bits')
-rw-r--r-- | libc/sysdeps/linux/nios2/bits/fcntl.h | 6 | ||||
-rw-r--r-- | libc/sysdeps/linux/nios2/bits/syscalls.h | 359 |
2 files changed, 89 insertions, 276 deletions
diff --git a/libc/sysdeps/linux/nios2/bits/fcntl.h b/libc/sysdeps/linux/nios2/bits/fcntl.h index 7d0bcf946..e564b4217 100644 --- a/libc/sysdeps/linux/nios2/bits/fcntl.h +++ b/libc/sysdeps/linux/nios2/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2004 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -48,6 +48,8 @@ # define O_DIRECTORY 040000 /* Must be a directory. */ # define O_NOFOLLOW 0100000 /* Do not follow links. */ # define O_DIRECT 0200000 /* Direct disk access. */ +# define O_NOATIME 01000000 /* Do not set atime. */ +# define O_CLOEXEC 02000000 /* set close_on_exec */ #endif /* For now Linux has synchronisity options for data and read operations. @@ -81,7 +83,7 @@ #define F_SETLK64 13 /* Set record locking info (non-blocking). */ #define F_SETLKW64 14 /* Set record locking info (blocking). */ -#if defined __USE_BSD || defined __USE_XOPEN2K +#if defined __USE_BSD || defined __USE_UNIX98 # define F_SETOWN 8 /* Get owner of socket (receiver of SIGIO). */ # define F_GETOWN 9 /* Set owner of socket (receiver of SIGIO). */ #endif diff --git a/libc/sysdeps/linux/nios2/bits/syscalls.h b/libc/sysdeps/linux/nios2/bits/syscalls.h index ec5370712..f80bea206 100644 --- a/libc/sysdeps/linux/nios2/bits/syscalls.h +++ b/libc/sysdeps/linux/nios2/bits/syscalls.h @@ -9,287 +9,98 @@ #include <errno.h> #include <asm/traps.h> -#define __syscall_return(type, res) \ -do { \ - if ((unsigned long)(res) >= (unsigned long)(-125)) { \ - \ - /* avoid using res which is declared to be in \ - register r2; errno might expand to a function \ - call and clobber it. */ \ - \ - int __err = -(res); \ - errno = __err; \ - res = -1; \ - } \ - return (type) (res); \ -} while (0) +#define __syscall_return(type, res) \ + do { \ + if (unlikely(INTERNAL_SYSCALL_ERROR_P(res, ))) { \ + __set_errno(INTERNAL_SYSCALL_ERRNO(res, )); \ + res = (unsigned long) -1; \ + } \ + return (type) (res); \ + } while (0) -#define _syscall0(type,name) \ -type name(void) \ -{ \ - long __res; \ - \ - __asm__ __volatile__ ( \ - \ - " \n\t" \ - \ - " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \ - " movi r3, %1\n\t" /* __NR_##name */ \ - \ - " trap\n\t" \ - " mov %0, r2\n\t" /* syscall rtn */ \ - \ - " \n\t" \ - \ - : "=r" (__res) /* %0 */ \ - \ - : "i" (__NR_##name) /* %1 */ \ - , "i" (TRAP_ID_SYSCALL) /* %2 */ \ - \ - : "r2" /* Clobbered */ \ - , "r3" /* Clobbered */ \ - ); \ - \ -__syscall_return(type,__res); \ -} +#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ + ({ \ + long __res; \ + __asm__ __volatile__ ( \ + "movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \ + "movi r3, %1\n\t" /* __NR_##name */ \ + ASM_ARGS_##nr \ + "trap\n\t" \ + "mov %0, r2\n\t" /* syscall return */ \ + : "=r" (__res) /* %0 */ \ + : "i" (name) /* %1 */ \ + , "i" (TRAP_ID_SYSCALL) /* %2 */ \ + MAP_ARGS_##nr (args) /* %3-%8 */ \ + : "r2" \ + , "r3" \ + CLOB_ARGS_##nr /* Clobbered */ \ + ); \ + __res; \ + }) -#define _syscall1(type,name,atype,a) \ -type name(atype a) \ -{ \ - long __res; \ - \ - __asm__ __volatile__ ( \ - \ - " \n\t" \ - \ - " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \ - " movi r3, %1\n\t" /* __NR_##name */ \ - " mov r4, %3\n\t" /* (long) a */ \ - \ - " trap\n\t" \ - " mov %0, r2\n\t" /* syscall rtn */ \ - \ - " \n\t" \ - \ - : "=r" (__res) /* %0 */ \ - \ - : "i" (__NR_##name) /* %1 */ \ - , "i" (TRAP_ID_SYSCALL) /* %2 */ \ - , "r" ((long) a) /* %3 */ \ - \ - : "r2" /* Clobbered */ \ - , "r3" /* Clobbered */ \ - , "r4" /* Clobbered */ \ - ); \ - \ -__syscall_return(type,__res); \ -} +#define INTERNAL_SYSCALL_ERROR_P(val, err) \ + ((unsigned long)(val) >= (unsigned long)(-125)) -#define _syscall2(type,name,atype,a,btype,b) \ -type name(atype a,btype b) \ -{ \ - long __res; \ - \ - __asm__ __volatile__ ( \ - \ - " \n\t" \ - \ - " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \ - " movi r3, %1\n\t" /* __NR_##name */ \ - " mov r4, %3\n\t" /* (long) a */ \ - " mov r5, %4\n\t" /* (long) b */ \ - \ - " trap\n\t" \ - " mov %0, r2\n\t" /* syscall rtn */ \ - \ - " \n\t" \ - \ - : "=r" (__res) /* %0 */ \ - \ - : "i" (__NR_##name) /* %1 */ \ - , "i" (TRAP_ID_SYSCALL) /* %2 */ \ - , "r" ((long) a) /* %3 */ \ - , "r" ((long) b) /* %4 */ \ - \ - : "r2" /* Clobbered */ \ - , "r3" /* Clobbered */ \ - , "r4" /* Clobbered */ \ - , "r5" /* Clobbered */ \ - ); \ - \ -__syscall_return(type,__res); \ -} +#define ASM_ARGS_0 +#define MAP_ARGS_0() +#define CLOB_ARGS_0 -#define _syscall3(type,name,atype,a,btype,b,ctype,c) \ -type name(atype a,btype b,ctype c) \ -{ \ - long __res; \ - \ - __asm__ __volatile__ ( \ - \ - " \n\t" \ - \ - " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \ - " movi r3, %1\n\t" /* __NR_##name */ \ - " mov r4, %3\n\t" /* (long) a */ \ - " mov r5, %4\n\t" /* (long) b */ \ - " mov r6, %5\n\t" /* (long) c */ \ - \ - " trap\n\t" \ - " mov %0, r2\n\t" /* syscall rtn */ \ - \ - " \n\t" \ - \ - : "=r" (__res) /* %0 */ \ - \ - : "i" (__NR_##name) /* %1 */ \ - , "i" (TRAP_ID_SYSCALL) /* %2 */ \ - , "r" ((long) a) /* %3 */ \ - , "r" ((long) b) /* %4 */ \ - , "r" ((long) c) /* %5 */ \ - \ - : "r2" /* Clobbered */ \ - , "r3" /* Clobbered */ \ - , "r4" /* Clobbered */ \ - , "r5" /* Clobbered */ \ - , "r6" /* Clobbered */ \ - ); \ - \ -__syscall_return(type,__res); \ -} +#define ASM_ARGS_1 \ + "mov r4, %3\n\t" +#define MAP_ARGS_1(a) \ + , "r" ((long) a) +#define CLOB_ARGS_1 \ + , "r4" -#define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \ -type name (atype a, btype b, ctype c, dtype d) \ -{ \ - long __res; \ - \ - __asm__ __volatile__ ( \ - \ - " \n\t" \ - \ - " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \ - " movi r3, %1\n\t" /* __NR_##name */ \ - " mov r4, %3\n\t" /* (long) a */ \ - " mov r5, %4\n\t" /* (long) b */ \ - " mov r6, %5\n\t" /* (long) c */ \ - " mov r7, %6\n\t" /* (long) d */ \ - \ - " trap\n\t" \ - " mov %0, r2\n\t" /* syscall rtn */ \ - \ - " \n\t" \ - \ - : "=r" (__res) /* %0 */ \ - \ - : "i" (__NR_##name) /* %1 */ \ - , "i" (TRAP_ID_SYSCALL) /* %2 */ \ - , "r" ((long) a) /* %3 */ \ - , "r" ((long) b) /* %4 */ \ - , "r" ((long) c) /* %5 */ \ - , "r" ((long) d) /* %6 */ \ - \ - : "r2" /* Clobbered */ \ - , "r3" /* Clobbered */ \ - , "r4" /* Clobbered */ \ - , "r5" /* Clobbered */ \ - , "r6" /* Clobbered */ \ - , "r7" /* Clobbered */ \ - ); \ - \ -__syscall_return(type,__res); \ -} +#define ASM_ARGS_2 \ + ASM_ARGS_1 \ + "mov r5, %4\n\t" +#define MAP_ARGS_2(a, b) \ + MAP_ARGS_1(a) \ + , "r" ((long) b) +#define CLOB_ARGS_2 \ + CLOB_ARGS_1 \ + , "r5" -#define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \ -type name (atype a,btype b,ctype c,dtype d,etype e) \ -{ \ - long __res; \ - \ - __asm__ __volatile__ ( \ - \ - " \n\t" \ - \ - " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \ - " movi r3, %1\n\t" /* __NR_##name */ \ - " mov r4, %3\n\t" /* (long) a */ \ - " mov r5, %4\n\t" /* (long) b */ \ - " mov r6, %5\n\t" /* (long) c */ \ - " mov r7, %6\n\t" /* (long) c */ \ - " mov r8, %7\n\t" /* (long) e */ \ - \ - " trap\n\t" \ - " mov %0, r2\n\t" /* syscall rtn */ \ - \ - " \n\t" \ - \ - : "=r" (__res) /* %0 */ \ - \ - : "i" (__NR_##name) /* %1 */ \ - , "i" (TRAP_ID_SYSCALL) /* %2 */ \ - , "r" ((long) a) /* %3 */ \ - , "r" ((long) b) /* %4 */ \ - , "r" ((long) c) /* %5 */ \ - , "r" ((long) d) /* %6 */ \ - , "r" ((long) e) /* %7 */ \ - \ - : "r2" /* Clobbered */ \ - , "r3" /* Clobbered */ \ - , "r4" /* Clobbered */ \ - , "r5" /* Clobbered */ \ - , "r6" /* Clobbered */ \ - , "r7" /* Clobbered */ \ - , "r8" /* Clobbered */ \ - ); \ - \ -__syscall_return(type,__res); \ -} +#define ASM_ARGS_3 \ + ASM_ARGS_2 \ + "mov r6, %5\n\t" +#define MAP_ARGS_3(a, b, c) \ + MAP_ARGS_2(a, b) \ + , "r" ((long) c) +#define CLOB_ARGS_3 \ + CLOB_ARGS_2 \ + , "r6" -#define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \ -type name (atype a,btype b,ctype c,dtype d,etype e,ftype f) \ -{ \ - long __res; \ - \ - __asm__ __volatile__ ( \ - \ - " \n\t" \ - \ - " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \ - " movi r3, %1\n\t" /* __NR_##name */ \ - " mov r4, %3\n\t" /* (long) a */ \ - " mov r5, %4\n\t" /* (long) b */ \ - " mov r6, %5\n\t" /* (long) c */ \ - " mov r7, %6\n\t" /* (long) c */ \ - " mov r8, %7\n\t" /* (long) e */ \ - " mov r9, %8\n\t" /* (long) f */ \ - \ - " trap\n\t" \ - " mov %0, r2\n\t" /* syscall rtn */ \ - \ - " \n\t" \ - \ - : "=r" (__res) /* %0 */ \ - \ - : "i" (__NR_##name) /* %1 */ \ - , "i" (TRAP_ID_SYSCALL) /* %2 */ \ - , "r" ((long) a) /* %3 */ \ - , "r" ((long) b) /* %4 */ \ - , "r" ((long) c) /* %5 */ \ - , "r" ((long) d) /* %6 */ \ - , "r" ((long) e) /* %7 */ \ - , "r" ((long) f) /* %8 */ \ - \ - : "r2" /* Clobbered */ \ - , "r3" /* Clobbered */ \ - , "r4" /* Clobbered */ \ - , "r5" /* Clobbered */ \ - , "r6" /* Clobbered */ \ - , "r7" /* Clobbered */ \ - , "r8" /* Clobbered */ \ - , "r9" /* Clobbered */ \ - ); \ - \ -__syscall_return(type,__res); \ -} +#define ASM_ARGS_4 \ + ASM_ARGS_3 \ + "mov r7, %6\n\t" +#define MAP_ARGS_4(a, b, c, d) \ + MAP_ARGS_3(a, b, c) \ + , "r" ((long) d) +#define CLOB_ARGS_4 \ + CLOB_ARGS_3 \ + , "r7" + +#define ASM_ARGS_5 \ + ASM_ARGS_4 \ + "mov r8, %7\n\t" +#define MAP_ARGS_5(a, b, c, d, e) \ + MAP_ARGS_4(a, b, c, d) \ + , "r" ((long) e) +#define CLOB_ARGS_5 \ + CLOB_ARGS_4 \ + , "r8" + +#define ASM_ARGS_6 \ + ASM_ARGS_5 \ + "mov r9, %8\n\t" +#define MAP_ARGS_6(a, b, c, d, e, f) \ + MAP_ARGS_5(a, b, c, d, e) \ + , "r" ((long) f) +#define CLOB_ARGS_6 \ + CLOB_ARGS_5 \ + , "r9" #endif /* __ASSEMBLER__ */ #endif /* _BITS_SYSCALLS_H */ - |