From patchwork Tue Mar 31 06:51:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yann Sionneau X-Patchwork-Id: 1265271 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=uclibc-ng.org (client-ip=2a00:1828:2000:679::23; helo=helium.openadk.org; envelope-from=devel-bounces@uclibc-ng.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=sionneau.net Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; secure) header.d=sionneau.net header.i=@sionneau.net header.a=rsa-sha1 header.s=selectormx3 header.b=C3B1veUv; dkim-atps=neutral Received: from helium.openadk.org (helium.openadk.org [IPv6:2a00:1828:2000:679::23]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 48sswV3fRXz9sT9 for ; Thu, 2 Apr 2020 04:03:38 +1100 (AEDT) Received: from helium.openadk.org (localhost [IPv6:::1]) by helium.openadk.org (Postfix) with ESMTP id 0CA47101A8; Wed, 1 Apr 2020 19:03:27 +0200 (CEST) X-Original-To: devel@uclibc-ng.org Delivered-To: devel@helium.openadk.org Received: from mx3.sionneau.net (mx3.sionneau.net [163.172.183.177]) by helium.openadk.org (Postfix) with ESMTPS id 6A9D11007E for ; Tue, 31 Mar 2020 08:51:49 +0200 (CEST) Received: from mx3.sionneau.net (localhost [127.0.0.1]) by mx3.sionneau.net. (OpenSMTPD) with ESMTP id ac297fa3; Tue, 31 Mar 2020 06:51:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha1; c=simple; d=sionneau.net; h=from:to:cc :subject:date:message-id; s=selectormx3; bh=EBv5euMpOcTRoUrKn3l8 nHy8oCc=; b=C3B1veUv5wnjI2aqmjM09hMOKPKwGtomanx4Xa3+gOTbqtvc/yZ2 jPjuTu/Uf21eADBd7sTXp79H+BV3tsw9OaPRqXhbe2eSS9IrnP3YTvs8LnbP+pC4 lJCdtGJwc52XZLie8HVuY8TditefldxjZheYXIcVM/g8b7nPWmLr5pU= DomainKey-Signature: a=rsa-sha1; c=simple; d=sionneau.net; h=from:to:cc :subject:date:message-id; q=dns; s=selectormx3; b=f+YJzkoSt6gL40 v0EWUopRW+BspLL+WHF4wbSxp6yMCGx95NJZE1feKJ6xv+kP4Cu1I8IydppB1SKf AjtJ3G8pchkcAT5vCScHgzFZ5k6CavCNZH/pYiEqjZcuAqozLHWpnxiEV6RbqoGz FS43SekhHtyXZ38kMVGwtEyn4OvgA= Received: by mx3.sionneau.net (OpenSMTPD) with ESMTPSA id ad2905a3 (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128:NO); Tue, 31 Mar 2020 06:51:47 +0000 (UTC) From: yann@sionneau.net To: devel@uclibc-ng.org Date: Tue, 31 Mar 2020 08:51:31 +0200 Message-Id: <20200331065131.19854-1-yann@sionneau.net> X-Mailer: git-send-email 2.17.1 Subject: [uclibc-ng-devel] [PATCH] or1k: fix some TLS issues X-BeenThere: devel@uclibc-ng.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: uClibc-ng Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: devel-bounces@uclibc-ng.org Sender: "devel" From: Yann Sionneau Before this commit tst-tls-at-ctor test would segfault. After it passes. testsuite run before: https://pastebin.com/504JgQXa testsuite run after: https://pastebin.com/d2aNciVt Stafford Horne already fixed it in glibc: * https://github.com/openrisc/or1k-glibc/blob/bcd87396ebe78228645c0731b06c934dfd88855a/sysdeps/or1k/dl-machine.h#L298 * https://github.com/openrisc/or1k-glibc/blob/bcd87396ebe78228645c0731b06c934dfd88855a/sysdeps/or1k/dl-machine.h#L99 --- ldso/ldso/or1k/dl-sysdep.h | 6 ++++-- ldso/ldso/or1k/elfinterp.c | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/ldso/ldso/or1k/dl-sysdep.h b/ldso/ldso/or1k/dl-sysdep.h index d79249449..d838a50eb 100644 --- a/ldso/ldso/or1k/dl-sysdep.h +++ b/ldso/ldso/or1k/dl-sysdep.h @@ -36,8 +36,10 @@ do { \ #define ELF_TARGET "or1k" #define elf_machine_type_class(type) \ - (((type) == R_OR1K_JMP_SLOT) * ELF_RTYPE_CLASS_PLT \ - | ((type) == R_OR1K_COPY) * ELF_RTYPE_CLASS_COPY) + (((type) == R_OR1K_JMP_SLOT || (type) == R_OR1K_TLS_DTPMOD || \ + (type) == R_OR1K_TLS_DTPOFF || \ + (type) == R_OR1K_TLS_TPOFF) * ELF_RTYPE_CLASS_PLT \ + | ((type) == R_OR1K_COPY) * ELF_RTYPE_CLASS_COPY) static inline Elf32_Addr * or1k_get_got (void) diff --git a/ldso/ldso/or1k/elfinterp.c b/ldso/ldso/or1k/elfinterp.c index 7fd0825ae..6b6589af5 100644 --- a/ldso/ldso/or1k/elfinterp.c +++ b/ldso/ldso/or1k/elfinterp.c @@ -249,11 +249,11 @@ _dl_do_reloc(struct elf_resolve *tpnt, struct r_scope_elem *scope, *reloc_addr = tls_tpnt->l_tls_modid; break; case R_OR1K_TLS_DTPOFF: - *reloc_addr = symbol_addr; + *reloc_addr = symbol_addr + rpnt->r_addend; break; case R_OR1K_TLS_TPOFF: CHECK_STATIC_TLS ((struct link_map *) tls_tpnt); - *reloc_addr = tls_tpnt->l_tls_offset + symbol_addr + rpnt->r_addend; + *reloc_addr = tls_tpnt->l_tls_offset + symbol_addr + rpnt->r_addend - TLS_TCB_SIZE; break; #endif