From nobody Wed May 7 19:22:11 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Zt4s05J8rz5v944; Wed, 07 May 2025 19:22:12 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Zt4s000tRz49px; Wed, 07 May 2025 19:22:12 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1746645732; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=4wynIkosMvXpTcu6siiF5Gs9hI3Y0QRfOmVB4FB1sh4=; b=dgkaK2sWI13eHNe0MfuGzbkV3jy4yNoUJRKiYBzQIn01XfFNIvNGTJ58RGHbwoa8qrCkDZ UGD/69l2gP1vJGaFIEmc0KwxFH8SYuNGFjBGBaIU3nx3pyIncvo1iLmhxIIivG5m4ofu7C vrN18r61vF8LbNiUDtfRIylRTlN2xwvhOxy6VvKYNDyvOnMA7rVttbmfU8bQqfg/GJ4nsX kuORJVz0pRKfmEaYDhh9bJDPfW3JgDDjtEVAupZ3H7VwosyfyQyFLJN/qxwpvFw6PHI28G +rirZEq6th3jA4UTsJbNbNOc7WnwNTFQn2sD2IUudhdRuD57qCL4E2IBgXd4ug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1746645732; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=4wynIkosMvXpTcu6siiF5Gs9hI3Y0QRfOmVB4FB1sh4=; b=PTmEQ4wyM+miTUtY0J/m1SiHls5yB9FzApLGk3UJndvpRtYyCgz4jXOoyRTO0fx0mSey8a XfcUov9sZ00zypAm/IEUsg747ZmIr7YZkdsPheuVc4+RLtAxV1+XCrE8wKCzRkEBb8O4eU jHnAgx8XgNcntpznyoxm+ODBOYsOKBBUKpNcEzZeYHEIET6hlm14qAbDrGZEed91QD2P46 VaR0p4wXN+XuojrVt36zVC1YfQLxp8+xYhvEXTbTHtYyi2oOMohTBMOc2ek/HaUpHIhQhn PqCJasQpc73yQzu3QV39/iJfPbMacspUrH0SoGJUah2mQ8Iuo/CiY92/CCtLXg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1746645732; a=rsa-sha256; cv=none; b=mCHd+B73zSFtr0B13CI+YL3m08ZyC99sicd9zhoA+W+ukk7TddEoAWEmZp33OIERvWhWvX P0becuPhEAO/djtgFkPdH3wv3IOD9E+0Cbt/6ImVrqkMGtm96w0G0SneeefFupDHXJwMAz K6Y5RqfryQpGDjbt2l8dZ4XS8NoCooua9BBmLvII5lcZ8L4jfASnc6GD16JWvF5XEXu0FO fhTHgMyeGs6K50DBCwIeto60dl/LC6Wu/BogKTVJGfn4WcjqhzgV/6B+DwoNRqgrZnUZIE dxqKMf9oyr0q7DfuCzRmq3qTprxk0gZFTmPbJeT80DzRHp3ANQ+vWLufh6T+Xg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Zt4rz6dcPzjkS; Wed, 07 May 2025 19:22:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 547JMBOS043132; Wed, 7 May 2025 19:22:11 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 547JMB4Y043129; Wed, 7 May 2025 19:22:11 GMT (envelope-from git) Date: Wed, 7 May 2025 19:22:11 GMT Message-Id: <202505071922.547JMB4Y043129@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Jessica Clarke Subject: git: b209947fc27c - main - rtld-elf: Use struct tcb * rather than uintptr_t ** for the tcb List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jrtc27 X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: b209947fc27ce60be866d8a16657485eedd97d55 Auto-Submitted: auto-generated The branch main has been updated by jrtc27: URL: https://cgit.FreeBSD.org/src/commit/?id=b209947fc27ce60be866d8a16657485eedd97d55 commit b209947fc27ce60be866d8a16657485eedd97d55 Author: Jessica Clarke AuthorDate: 2025-05-07 19:20:15 +0000 Commit: Jessica Clarke CommitDate: 2025-05-07 19:20:15 +0000 rtld-elf: Use struct tcb * rather than uintptr_t ** for the tcb This lets us access via named struct members rather than magic hard-coded indices. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D50229 --- libexec/rtld-elf/rtld.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c index 8234efdecf53..44347e482c64 100644 --- a/libexec/rtld-elf/rtld.c +++ b/libexec/rtld-elf/rtld.c @@ -5436,7 +5436,8 @@ allocate_tls(Obj_Entry *objs, void *oldtcb, size_t tcbsize, size_t tcbalign) { Obj_Entry *obj; char *tls_block; - uintptr_t *dtv, **tcb; + uintptr_t *dtv; + struct tcb *tcb; char *addr; uintptr_t i; size_t extra_size, maxalign, post_size, pre_size, tls_block_size; @@ -5459,7 +5460,7 @@ allocate_tls(Obj_Entry *objs, void *oldtcb, size_t tcbsize, size_t tcbalign) /* Allocate whole TLS block */ tls_block = xmalloc_aligned(tls_block_size, maxalign, 0); - tcb = (uintptr_t **)(tls_block + pre_size + extra_size); + tcb = (struct tcb *)(tls_block + pre_size + extra_size); if (oldtcb != NULL) { memcpy(tls_block, get_tls_block_ptr(oldtcb, tcbsize), @@ -5467,7 +5468,7 @@ allocate_tls(Obj_Entry *objs, void *oldtcb, size_t tcbsize, size_t tcbalign) free(get_tls_block_ptr(oldtcb, tcbsize)); /* Adjust the DTV. */ - dtv = tcb[0]; + dtv = tcb->tcb_dtv; for (i = 0; i < dtv[1]; i++) { if (dtv[i + 2] >= (uintptr_t)oldtcb && dtv[i + 2] < (uintptr_t)oldtcb + tls_static_space) { @@ -5477,7 +5478,7 @@ allocate_tls(Obj_Entry *objs, void *oldtcb, size_t tcbsize, size_t tcbalign) } } else { dtv = xcalloc(tls_max_index + 2, sizeof(uintptr_t)); - tcb[0] = dtv; + tcb->tcb_dtv = dtv; dtv[0] = tls_dtv_generation; dtv[1] = tls_max_index; @@ -5524,7 +5525,7 @@ free_tls(void *tcb, size_t tcbsize, size_t tcbalign __unused) tlsstart = (uintptr_t)tcb + TLS_TCB_SIZE + post_size; tlsend = (uintptr_t)tcb + tls_static_space; - dtv = *(uintptr_t **)tcb; + dtv = ((struct tcb *)tcb)->tcb_dtv; dtvsize = dtv[1]; for (i = 0; i < dtvsize; i++) { if (dtv[i + 2] != 0 && (dtv[i + 2] < tlsstart || @@ -5550,7 +5551,7 @@ allocate_tls(Obj_Entry *objs, void *oldtcb, size_t tcbsize, size_t tcbalign) size_t size, ralign; char *tls_block; uintptr_t *dtv, *olddtv; - uintptr_t **tcb; + struct tcb *tcb; char *addr; size_t i; @@ -5563,9 +5564,9 @@ allocate_tls(Obj_Entry *objs, void *oldtcb, size_t tcbsize, size_t tcbalign) tls_block = xmalloc_aligned(size, ralign, 0 /* XXX */); dtv = xcalloc(tls_max_index + 2, sizeof(uintptr_t)); - tcb = (uintptr_t **)(tls_block + roundup(tls_static_space, ralign)); - tcb[0] = (uintptr_t *)tcb; - tcb[1] = dtv; + tcb = (struct tcb *)(tls_block + roundup(tls_static_space, ralign)); + tcb->tcb_self = tcb; + tcb->tcb_dtv = dtv; dtv[0] = tls_dtv_generation; dtv[1] = tls_max_index; @@ -5582,7 +5583,7 @@ allocate_tls(Obj_Entry *objs, void *oldtcb, size_t tcbsize, size_t tcbalign) * If any dynamic TLS blocks have been created tls_get_addr(), * move them over. */ - olddtv = ((uintptr_t **)oldtcb)[1]; + olddtv = ((struct tcb *)oldtcb)->tcb_dtv; for (i = 0; i < olddtv[1]; i++) { if (olddtv[i + 2] < (uintptr_t)oldtcb - size || olddtv[i + 2] > (uintptr_t)oldtcb) { @@ -5631,7 +5632,7 @@ free_tls(void *tcb, size_t tcbsize __unused, size_t tcbalign) ralign = tls_static_max_align; size = roundup(tls_static_space, ralign); - dtv = ((uintptr_t **)tcb)[1]; + dtv = ((struct tcb *)tcb)->tcb_dtv; dtvsize = dtv[1]; tlsend = (uintptr_t)tcb; tlsstart = tlsend - size;