From 27b032941ab4b5ea81cee7f9e10e21ffea258616 Mon Sep 17 00:00:00 2001 From: Alexander Egorenkov Date: Sun, 8 Aug 2021 11:48:44 +0200 Subject: [PATCH] package/prelink-cross: fix handling of TLS offsets for s390 arch /tmp/instance-1/output-1/host/sbin/prelink-rtld: error while loading shared libraries: /lib64/libc.so.6: cannot handle TLS data ERROR: can't resolve libraries to shared libraries: glib-2.0, gobject-2.0 ninja: build stopped: subcommand failed. make: *** [package/pkg-generic.mk:270: /tmp/instance-1/output-1/build/gobject-introspection-1.68.0/.stamp_built] Error 1 make: Leaving directory '/tmp/instance-1/buildroot' Fixes: - http://autobuild.buildroot.org/results/7614f5928e845331d7295349da891a76f1786b79/ Signed-off-by: Alexander Egorenkov Signed-off-by: Thomas Petazzoni --- ...c-Fix-TLS-offsets-computation-for-s3.patch | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 package/prelink-cross/0001-src-rtld-dl-tls.c-Fix-TLS-offsets-computation-for-s3.patch diff --git a/package/prelink-cross/0001-src-rtld-dl-tls.c-Fix-TLS-offsets-computation-for-s3.patch b/package/prelink-cross/0001-src-rtld-dl-tls.c-Fix-TLS-offsets-computation-for-s3.patch new file mode 100644 index 0000000000..cea1357d1d --- /dev/null +++ b/package/prelink-cross/0001-src-rtld-dl-tls.c-Fix-TLS-offsets-computation-for-s3.patch @@ -0,0 +1,43 @@ +From 4064f77d2f550762cbf220fec7c26a8ce4219ea4 Mon Sep 17 00:00:00 2001 +From: Alexander Egorenkov +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 +--- + 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 + -- 2.30.2