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.h | |
parent | 772e3426a7b6f5200cb1029d41308b8b666cdbab (diff) | |
download | glibc-e6ebd2e4db59da6c1726ecfa3516f1f1b3048442.tar glibc-e6ebd2e4db59da6c1726ecfa3516f1f1b3048442.tar.gz glibc-e6ebd2e4db59da6c1726ecfa3516f1f1b3048442.tar.bz2 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.h')
-rw-r--r-- | sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h | 65 |
1 files changed, 43 insertions, 22 deletions
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h index dbe77df979..976fd26f50 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h +++ b/sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h @@ -46,8 +46,6 @@ number. Linus said he will make sure the no syscall returns a value in -1 .. -4095 as a valid result so we can savely test with -4095. */ -#define SYSCALL_ERROR_LABEL 0f - #undef PSEUDO #define PSEUDO(name, syscall_name, args) \ .text; \ @@ -55,35 +53,58 @@ DO_CALL (syscall_name, args); \ lghi %r4,-4095 ; \ clgr %r2,%r4 ; \ - jnl SYSCALL_ERROR_LABEL ; \ - L(pseudo_end): + jgnl SYSCALL_ERROR_LABEL #undef PSEUDO_END #define PSEUDO_END(name) \ SYSCALL_ERROR_HANDLER; \ END (name) -#ifndef _LIBC_REENTRANT #ifndef PIC -#define SYSCALL_ERROR_HANDLER \ -0: lcr %r2,%r2 ; \ - larl %r1,errno ; \ - st %r2,0(%r1) ; \ - lghi %r2,-1 ; \ - br %r14 +# define SYSCALL_ERROR_LABEL syscall_error +# define SYSCALL_ERROR_HANDLER #else -#define SYSCALL_ERROR_HANDLER \ -0: larl %r1,_GLOBAL_OFFSET_TABLE_ ; \ - lg %r1,errno@GOT(%r1) ; \ - lcr %r2,%r2 ; \ - st %r2,0(%r1) ; \ - lghi %r2,-1 ; \ - br %r14 +# if RTLD_PRIVATE_ERRNO +# define SYSCALL_ERROR_LABEL 0f +# define SYSCALL_ERROR_HANDLER \ +0: larl %r1,errno; \ + lcr %r2,%r2; \ + st %r2,0(%r1); \ + lghi %r2,-1; \ + br %r14 +# elif defined _LIBC_REENTRANT +# if USE___THREAD +# ifndef NOT_IN_libc +# define SYSCALL_ERROR_ERRNO __libc_errno +# else +# define SYSCALL_ERROR_ERRNO errno +# endif +# define SYSCALL_ERROR_LABEL 0f +# define SYSCALL_ERROR_HANDLER \ +0: lcr %r0,%r2; \ + larl %r1,SYSCALL_ERROR_ERRNO@indntpoff; \ + lg %r1,0(%r1); \ + ear %r2,%a0; \ + sllg %r2,%r2,32; \ + ear %r2,%a1; \ + st %r0,0(%r1,%r2); \ + lghi %r2,-1; \ + br %r14 +# else +# define SYSCALL_ERROR_LABEL syscall_error@plt +# define SYSCALL_ERROR_HANDLER +# endif +# else +# define SYSCALL_ERROR_LABEL 0f +# define SYSCALL_ERROR_HANDLER \ +0: larl %r1,_GLOBAL_OFFSET_TABLE_; \ + lg %r1,errno@GOT(%r1); \ + lcr %r2,%r2; \ + st %r2,0(%r1); \ + lghi %r2,-1; \ + br %r14 +# endif /* _LIBC_REENTRANT */ #endif /* PIC */ -#else -#define SYSCALL_ERROR_HANDLER \ -0: jg __syscall_error@PLT -#endif /* _LIBC_REENTRANT */ /* Linux takes system call arguments in registers: |