| 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 |
| |