1*4882a593SmuzhiyunFrom 4064f77d2f550762cbf220fec7c26a8ce4219ea4 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Alexander Egorenkov <egorenar@linux.ibm.com> 3*4882a593SmuzhiyunDate: Sun, 8 Aug 2021 11:19:52 +0200 4*4882a593SmuzhiyunSubject: [PATCH] src/rtld/dl-tls.c: Fix TLS offsets computation for s390 arch 5*4882a593Smuzhiyun 6*4882a593Smuzhiyunrtld_determine_tlsoffsets() didn't handle s390 arch properly by falling 7*4882a593Smuzhiyunback to the default case. If TLS_TCB_AT_TP is 1, then set offset to -1. 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunFrom glibc's sysdeps/s390/nptl/tls.h: 10*4882a593Smuzhiyun------------------------------------- 11*4882a593Smuzhiyun/* The TCB can have any size and the memory following the address the 12*4882a593Smuzhiyun thread pointer points to is unspecified. Allocate the TCB there. */ 13*4882a593Smuzhiyundefine TLS_TCB_AT_TP 1 14*4882a593Smuzhiyundefine TLS_DTV_AT_TP 0 15*4882a593Smuzhiyun 16*4882a593SmuzhiyunThis lead to the following error: 17*4882a593Smuzhiyun--------------------------------- 18*4882a593Smuzhiyunprelink-rtld: error while loading shared libraries: /lib64/libc.so.6: cannot handle TLS data 19*4882a593Smuzhiyun 20*4882a593SmuzhiyunSigned-off-by: Alexander Egorenkov <egorenar@linux.ibm.com> 21*4882a593Smuzhiyun--- 22*4882a593Smuzhiyun src/rtld/dl-tls.c | 5 +++++ 23*4882a593Smuzhiyun 1 file changed, 5 insertions(+) 24*4882a593Smuzhiyun 25*4882a593Smuzhiyundiff --git a/src/rtld/dl-tls.c b/src/rtld/dl-tls.c 26*4882a593Smuzhiyunindex 280cee45f950..29422dcfd25e 100644 27*4882a593Smuzhiyun--- a/src/rtld/dl-tls.c 28*4882a593Smuzhiyun+++ b/src/rtld/dl-tls.c 29*4882a593Smuzhiyun@@ -143,6 +143,11 @@ rtld_determine_tlsoffsets (int e_machine, struct r_scope_elem *search_list) 30*4882a593Smuzhiyun tls_tcb_size = 0; 31*4882a593Smuzhiyun break; 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun+ case EM_S390: 34*4882a593Smuzhiyun+ tls_tcb_at_tp = 1; 35*4882a593Smuzhiyun+ tls_tcb_size = -1; 36*4882a593Smuzhiyun+ break; 37*4882a593Smuzhiyun+ 38*4882a593Smuzhiyun default: 39*4882a593Smuzhiyun /* Hope there's no TLS! */ 40*4882a593Smuzhiyun for (i = 0; i < search_list->r_nlist; i++) 41*4882a593Smuzhiyun-- 42*4882a593Smuzhiyun2.31.1 43*4882a593Smuzhiyun 44