aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/arm
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-01-08 00:22:00 +0000
committerUlrich Drepper <drepper@redhat.com>2003-01-08 00:22:00 +0000
commitb5facfdac0a9a10f9b0b145d6e3b1348a751f2ff (patch)
treeba1c715765882bf6dad329e73ee45d99c152422e /sysdeps/unix/arm
parente9c7764ec9fe328dfac0c01a7f609d6a2a9bac00 (diff)
downloadglibc-b5facfdac0a9a10f9b0b145d6e3b1348a751f2ff.tar
glibc-b5facfdac0a9a10f9b0b145d6e3b1348a751f2ff.tar.gz
glibc-b5facfdac0a9a10f9b0b145d6e3b1348a751f2ff.tar.bz2
glibc-b5facfdac0a9a10f9b0b145d6e3b1348a751f2ff.zip
Update.
2003-01-06 Philip Blundell <philb@gnu.org> * sysdeps/unix/arm/sysdep.S (syscall_error): Optimise a little. [__LIBC_REENTRANT]: Unify PIC and non-PIC cases. * sysdeps/unix/sysv/linux/arm/sysdep.h (PSEUDO): Remove .type directive. (PSEUDO_RET): Use SYSCALL_ERROR in place of __syscall_error. (SYSCALL_ERROR): New. (SYSCALL_ERROR_HANDLER) [NOT_IN_libc]: Provide local copy of error handling code. (INTERNAL_SYSCALL): Define. (INLINE_SYSCALL): Use it. (INTERNAL_SYSCALL_ERROR_P, INTERNAL_SYSCALL_ERRNO): Define. * sysdeps/unix/sysv/linux/arm/socket.S (__socket): Use SYSCALL_ERROR in place of __syscall_error. 2003-01-07 Jakub Jelinek <jakub@redhat.com> * sysdeps/ia64/bits/byteswap.h [__GNUC__ >= 2] (__bswap_16, __bswap_32, __bswap_64): Put x into temporary variable to avoid warnings. [!__GNUC__] (__bswap_16, __bswap_32, __bswap_64): Change into static (inline) functions. * sysdeps/s390/bits/byteswap.h [__GNUC__ >= 2] (__bswap_16, __bswap_32, __bswap_64): Put x into temporary variable to avoid warnings. [!__GNUC__] (__bswap_16, __bswap_32, __bswap_64): Change into static (inline) functions. * sysdeps/i386/bits/byteswap.h [!__GNUC__] (__bswap_16, __bswap_32): Likewise. 2003-01-07 Jakub Jelinek <jakub@redhat.com> * sysdeps/unix/sysv/linux/alpha/adjtime.c (ntp_adjtime): New weak alias.
Diffstat (limited to 'sysdeps/unix/arm')
-rw-r--r--sysdeps/unix/arm/sysdep.S52
1 files changed, 22 insertions, 30 deletions
diff --git a/sysdeps/unix/arm/sysdep.S b/sysdeps/unix/arm/sysdep.S
index 6487caa919..5fc80a872e 100644
--- a/sysdeps/unix/arm/sysdep.S
+++ b/sysdeps/unix/arm/sysdep.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,92,93,94,95,96,97,98 Free Software Foundation, Inc.
+/* Copyright (C) 1991,92,93,94,95,96,97,98,2002,03 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
@@ -37,42 +37,34 @@ syscall_error:
moveq r0, $EAGAIN /* Yes; translate it to EAGAIN. */
#endif
-#ifndef PIC
- ldr r1, _errno_loc
- str r0, [r1]
#ifdef _LIBC_REENTRANT
- stmdb sp!, {r0, lr}
- /* put another copy of r0 at a specific errno location */
- bl C_SYMBOL_NAME(__errno_location)
- ldmia sp!, {r1, lr}
+ str lr, [sp, #-4]!
+ str r0, [sp, #-4]!
+ bl PLTJMP(C_SYMBOL_NAME(__errno_location))
+ ldr r1, [sp], #4
str r1, [r0]
-#endif
+ mvn r0, $0
+ ldr pc, [sp], #4
#else
- stmdb sp!,{r10, lr}
- @ we have to establish our PIC register
- ldr r10, 1f
- add r10, pc, r10
-0: ldr r1, 2f
- ldr r1, [r10, r1]
- @ store a copy in _errno_loc
+#ifndef PIC
+ ldr r1, 1f
str r0, [r1]
-#ifdef _LIBC_REENTRANT
- @ and another copy in thread copy of _errno_loc
- mov r10, r0
- bl __errno_location(PLT)
- str r10, [r0]
-#endif
- ldmia sp!, {r10, lr}
- b 4f
-1: .word _GLOBAL_OFFSET_TABLE_ - 0b - 4
-2: .word C_SYMBOL_NAME(errno)(GOT)
-4:
-#endif
mvn r0, $0
RETINSTR(mov, pc, r14)
-#ifndef PIC
-_errno_loc: .long C_SYMBOL_NAME(errno)
+1: .long C_SYMBOL_NAME(errno)
+#else
+ @ we have to establish our PIC register
+ ldr r2, 1f
+ ldr r1, 2f
+0: add r2, pc, r2
+ str r0, [r1, r2]
+ mvn r0, $0
+ RETINSTR(mov, pc, r14)
+
+1: .word _GLOBAL_OFFSET_TABLE_ - 0b - 8
+2: .word C_SYMBOL_NAME(errno)(GOTOFF)
+#endif
#endif
#undef __syscall_error