diff options
author | Carmelo Amoroso <carmelo.amoroso@st.com> | 2008-03-16 09:11:31 +0000 |
---|---|---|
committer | Carmelo Amoroso <carmelo.amoroso@st.com> | 2008-03-16 09:11:31 +0000 |
commit | 1cd785fe106389b7cc708d1c413eb8bfbc95ff43 (patch) | |
tree | 01a20f24c6cac36568a0c96ce76578fe8b8f47f8 /libc/sysdeps/linux/avr32/syscall.S | |
parent | b892d0f9caca5d891d7ce615e3df518b3870b36b (diff) | |
download | uClibc-alpine-1cd785fe106389b7cc708d1c413eb8bfbc95ff43.tar.bz2 uClibc-alpine-1cd785fe106389b7cc708d1c413eb8bfbc95ff43.tar.xz |
Merge nptl branch tree with trunk.
Step 8: add xtensa, cris and avr32 architecture dependent
files, as is.
Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
Diffstat (limited to 'libc/sysdeps/linux/avr32/syscall.S')
-rw-r--r-- | libc/sysdeps/linux/avr32/syscall.S | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/libc/sysdeps/linux/avr32/syscall.S b/libc/sysdeps/linux/avr32/syscall.S new file mode 100644 index 000000000..f14fcdb30 --- /dev/null +++ b/libc/sysdeps/linux/avr32/syscall.S @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2004-2007 Atmel Corporation + * + * This file is subject to the terms and conditions of the GNU Lesser General + * Public License. See the file "COPYING.LIB" in the main directory of this + * archive for more details. + */ +#include <features.h> + + .text + + /* + * long int syscall(long int sysno, ...) + */ + .global syscall + .type syscall, @function + .align 2 +syscall: + stm --sp, r3,r5,r6,lr + sub lr, sp, -16 + mov r8, r12 + ldm lr, r3,r5,r9-r12 + scall + cp.w r12, -4095 + brlo .Ldone + +#ifdef __PIC__ + lddpc r6, .Lgot +.Lgotcalc: + rsub r6, pc +# ifdef __UCLIBC_HAS_THREADS__ + rsub r3, r12, 0 + mcall r6[__errno_location@got] + st.w r12[0], r3 +# else + ld.w r3, r6[errno@got] + neg r12 + st.w r3[0], r12 +# endif +#else +# ifdef __UCLIBC_HAS_THREADS__ + rsub r3, r12, 0 + mcall .Lerrno_location + st.w r12[0], r3 +# else + lddpc r3, .Lerrno + neg r12 + st.w r3[0], r12 +# endif +#endif + mov r12, -1 + +.Ldone: + ldm sp++, r3,r5,r6,pc + + .align 2 +#ifdef __PIC__ +.Lgot: + .long .Lgotcalc - _GLOBAL_OFFSET_TABLE_ +#else +# ifdef __UCLIBC_HAS_THREADS__ +.Lerrno_location: + .long __errno_location +# else +.Lerrno: + .long errno +# endif +#endif + + + .size syscall, . - syscall |