12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- From 4064f77d2f550762cbf220fec7c26a8ce4219ea4 Mon Sep 17 00:00:00 2001
- From: Alexander Egorenkov <egorenar@linux.ibm.com>
- Date: Sun, 8 Aug 2021 11:19:52 +0200
- Subject: [PATCH] src/rtld/dl-tls.c: Fix TLS offsets computation for s390 arch
- rtld_determine_tlsoffsets() didn't handle s390 arch properly by falling
- back to the default case. If TLS_TCB_AT_TP is 1, then set offset to -1.
- From glibc's sysdeps/s390/nptl/tls.h:
- -------------------------------------
- /* The TCB can have any size and the memory following the address the
- thread pointer points to is unspecified. Allocate the TCB there. */
- define TLS_TCB_AT_TP 1
- define TLS_DTV_AT_TP 0
- This lead to the following error:
- ---------------------------------
- prelink-rtld: error while loading shared libraries: /lib64/libc.so.6: cannot handle TLS data
- Signed-off-by: Alexander Egorenkov <egorenar@linux.ibm.com>
- ---
- src/rtld/dl-tls.c | 5 +++++
- 1 file changed, 5 insertions(+)
- diff --git a/src/rtld/dl-tls.c b/src/rtld/dl-tls.c
- index 280cee45f950..29422dcfd25e 100644
- --- a/src/rtld/dl-tls.c
- +++ b/src/rtld/dl-tls.c
- @@ -143,6 +143,11 @@ rtld_determine_tlsoffsets (int e_machine, struct r_scope_elem *search_list)
- tls_tcb_size = 0;
- break;
-
- + case EM_S390:
- + tls_tcb_at_tp = 1;
- + tls_tcb_size = -1;
- + break;
- +
- default:
- /* Hope there's no TLS! */
- for (i = 0; i < search_list->r_nlist; i++)
- --
- 2.31.1
|