diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-01-28 10:42:28 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-01-28 10:42:28 +0000 |
commit | e6ebd2e4db59da6c1726ecfa3516f1f1b3048442 (patch) | |
tree | dfa3797737a8e4dc76ed38e52cf7baa27e936003 /sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S | |
parent | 772e3426a7b6f5200cb1029d41308b8b666cdbab (diff) | |
download | glibc-e6ebd2e4db59da6c1726ecfa3516f1f1b3048442.tar.gz glibc-e6ebd2e4db59da6c1726ecfa3516f1f1b3048442.tar.xz glibc-e6ebd2e4db59da6c1726ecfa3516f1f1b3048442.zip |
Update.
2003-01-27 Martin Schwidefsky <schwidefsky@de.ibm.com> * elf/elf.h: Add new s390 relocs. * elf/tls-macros.h: Add s390 versions. * sysdeps/s390/Versions [GLIBC_2.3] (ld): Export __tls_get_offset. * sysdeps/s390/dl-tls.h: New file. * sysdeps/s390/libc-tls.c: New file. * sysdeps/s390/s390-32/dl-machine.h (elf_machine_type_class): Add TLS relocs for class PLT. (elf_machine_rela): Handle TLS relocs. * sysdeps/s390/s390-64/dl-machine.h: Likewise. * sysdeps/s390/s390-32/elf/configure.in: Add TLS check. * sysdeps/s390/s390-64/elf/configure.in: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/clone.S: Add support for CLONE_CHILD_*TID flags. * sysdeps/unix/sysv/linux/s390/s390-64/clone.S: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/mmap.S: Use branch with 32 bit offset. * sysdeps/unix/sysv/linux/s390/s390-64/socket.S: Likewise. * sysdeps/unix/sysv/linux/s390/s390-64/syscall.S: Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S (__syscall_error): Support USE___THREAD. Define RTLD_PRIVATE_ERRNO variant. * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S (__syscall_error): Likewise. * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: (SYSCALL_ERROR_LABEL): Move define next to SYSCALL_ERROR_HANDLER. (SYSCALL_ERROR_HANDLER): Add USE___THREAD and RTLD_PRIVATE_ERRNO variants. * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h: (SYSCALL_ERROR_LABEL): Move define next to SYSCALL_ERROR_HANDLER. Use direct branch to syscall_error for !PIC and PIC && !_LIBC_REENTRANT. (SYSCALL_ERROR_HANDLER): Add USE___THREAD and RTLD_PRIVATE_ERRNO variants.
Diffstat (limited to 'sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S')
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S | 113 |
1 files changed, 75 insertions, 38 deletions
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S index a29b0b983a..84c747aef0 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S +++ b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2001, 2002 Free Software Foundation, Inc. +/* Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU C Library. @@ -29,47 +29,84 @@ #undef CALL_MCOUNT #define CALL_MCOUNT - .text +.text ENTRY(__syscall_error) #ifndef PIC -#ifndef _LIBC_REENTRANT - lcr %r2,%r2 - larl %r1,errno - st %r2,0(%r1) - lghi %r2,-1 - br %r14 -#else - stmg %r13,%r15,104(%r15) - lgr %r0,%r15 - aghi %r15,-160 - lcr %r13,%r2 - stg %r0,0(%r15) - brasl %r14,__errno_location - st %r13,0(%r2) - lmg %r13,%r15,264(%r15) - lghi %r2,-1 - br %r14 +# if USE___THREAD +# ifndef NOT_IN_libc +# define SYSCALL_ERROR_ERRNO __libc_errno +# else +# define SYSCALL_ERROR_ERRNO errno +# endif + basr %r1,0 +0: lg %r1,1f-0b(%r1) + ear %r3,%a0 + sllg %r3,%r3,32 + ear %r3,%a1 + lcr %r2,%r2 + st %r2,0(%r1,%r3) + lghi %r2,-1 + br %r14 +1: .quad SYSCALL_ERROR_ERRNO@ntpoff +# elif !defined _LIBC_REENTRANT + larl %r1,errno + lcr %r2,%r2 + st %r2,0(%r1) + lghi %r2,-1 + br %r14 +# else + stmg %r13,%r15,104(%r15) + lgr %r0,%r15 + aghi %r15,-160 + lcr %r13,%r2 + stg %r0,0(%r15) + brasl %r14,__errno_location + st %r13,0(%r2) + lmg %r13,%r15,264(%r15) + lghi %r2,-1 + br %r14 #endif #else -#ifndef _LIBC_REENTRANT - larl %r1,_GLOBAL_OFFSET_TABLE_ - lg %r1,errno@GOT(%r1) - lcr %r2,%r2 - st %r2,0(%r1) - lghi %r2,-1 - br %r14 -#else - stmg %r13,%r15,104(%r15) - lgr %r0,%r15 - aghi %r15,-160 - lcr %r13,%r2 - stg %r0,0(%r15) - brasl %r14,__errno_location@PLT - st %r13,0(%r2) - lmg %r13,%r15,264(%r15) - lghi %r2,-1 - br %r14 -#endif +# if RTLD_PRIVATE_ERRNO + larl %r1,errno + lcr %r2,%r2 + st %r2,0(%r1) + lghi %r2,-1 + br %r14 +# elif USE___THREAD +# ifndef NOT_IN_libc +# define SYSCALL_ERROR_ERRNO __libc_errno +# else +# define SYSCALL_ERROR_ERRNO errno +# endif + larl %r1,_GLOBAL_OFFSET_TABLE_ + lg %r1,SYSCALL_ERROR_ERRNO@gotntpoff(%r1) + ear %r3,%a0 + sllg %r3,%r3,32 + ear %r3,%a1 + lcr %r2,%r2 + st %r2,0(%r1,%r3) + lghi %r2,-1 + br %r14 +# elif !defined _LIBC_REENTRANT + larl %r1,_GLOBAL_OFFSET_TABLE_ + lg %r1,errno@GOT(%r1) + lcr %r2,%r2 + st %r2,0(%r1) + lghi %r2,-1 + br %r14 +# else + stmg %r13,%r15,104(%r15) + lgr %r0,%r15 + aghi %r15,-160 + lcr %r13,%r2 + stg %r0,0(%r15) + brasl %r14,__errno_location@PLT + st %r13,0(%r2) + lmg %r13,%r15,264(%r15) + lghi %r2,-1 + br %r14 +# endif #endif END (__syscall_error) |