From nobody Thu Jul 10 19:06:06 2025 X-Original-To: dev-commits-src-main@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 4bdPSt2FNHz61R4L; Thu, 10 Jul 2025 19:06:06 +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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bdPSt1fdmz3vhw; Thu, 10 Jul 2025 19:06:06 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1752174366; 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=TwzV7Vrmg47gi1bYRsvZkTx6ydkEuUDnK7S8kFwjFUk=; b=KVt0GuWenwFrdgGs+huO2bbrt1U//AZKT29upFkyoHvdwzfYjDBCwCrtjpRI7G1eD1R50K wW4MnWmLm3/k5aPObev+XXg/9bAT6bM9L6cmaDG6Lly0DFfre52xNES90uoVIDLpNUt1x2 LyGGvYHv5OQQ9QzxzdEzq7OfdEUsFJym8WwDNZtPNeHODaoKExzGd2qbY1oLF1Mgtjj+Xi +DPHtH5cWHbxxFjjtCnd6jie2ucBydRPNY7spsFEGNHcSxoQMHbj/z5s8Fhk0plz1mEYm9 ummyHH6pI3rYiECauuUzi6LysDMKMPZP4NCh5/vTONlQECbT0VDv+cvRb6rDVw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1752174366; 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=TwzV7Vrmg47gi1bYRsvZkTx6ydkEuUDnK7S8kFwjFUk=; b=kD73O1eAhTsLqBOINQt3AZg8jGsx6yVuw+QJJqlHAJnbgrEuYGw3zQAAYSSkG/SmV3iHVE g2AgxbO0Rj4s3QvfVfeDKBx1I3xbQAQi5zMA+RBesNLARb+Qt78S3SOV7ZUS4N6qTpcbrR 3vbr5YaYub9k8zgij7YCbrYlUmAFBojM3w7KJeZMuLmx1wJoda9Z0J4Gry8bprr9sRC+0e 1ZpTtzKTWKex/AUO9e8bWNd7lqhDSHX4oXeZ4SbBY8IeZIfkcWw/+dIs2xK3GoblBehV0v Y/cBE+yHVp7jH3phe7/iqZhJIbzhMxOrCJVsELa3BGATRKDDSWO0l6CNYjhKcg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1752174366; a=rsa-sha256; cv=none; b=x9qK6VeGWyNxoT8npKYRrapNZIL7rbO7M3HJ2lqBjLQz0DXz1IGOWgGMSfsuAPohurQmgA W+PnuDq8XKAaEF6eQ20AdSxYd75BEKusrYf4f8Zrg9HmkLk2zEjIN/iNwo5AAJnXNEhCxP 1XsBfoydGSudd46wem6msjs5cvGm6mcyONAUQrw0999voRlOS4gCSOODEbcAsVvEsm3HLM GVHHamtCxGoFoJ8Tlb2+pUWAvtbFHmNybLO+MSU8gQRZLqVcp6etmjORAD8UgvusdLhiZf VPq1I+8DRfzaEWgCFx9AnSj4sHKt4lyUfZ9vQSI/0ZCfda6zzz25kSJ/lGQKIg== 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 4bdPSt13scz1Hxc; Thu, 10 Jul 2025 19:06:06 +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 56AJ66ip004636; Thu, 10 Jul 2025 19:06:06 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 56AJ66FN004631; Thu, 10 Jul 2025 19:06:06 GMT (envelope-from git) Date: Thu, 10 Jul 2025 19:06:06 GMT Message-Id: <202507101906.56AJ66FN004631@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: 4d2752925a4f - main - rtld-elf: Extract part of allocate_tls_offset into allocate_tls_offset_common List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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: 4d2752925a4f75547a67f093dfe249da54196803 Auto-Submitted: auto-generated The branch main has been updated by jrtc27: URL: https://cgit.FreeBSD.org/src/commit/?id=4d2752925a4f75547a67f093dfe249da54196803 commit 4d2752925a4f75547a67f093dfe249da54196803 Author: Jessica Clarke AuthorDate: 2025-07-10 19:00:28 +0000 Commit: Jessica Clarke CommitDate: 2025-07-10 19:00:28 +0000 rtld-elf: Extract part of allocate_tls_offset into allocate_tls_offset_common This will be used to allocate additional space for a TAILQ_ENTRY by rtld at a known offset from the TCB, as if it were TLS data. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D51068 --- libexec/rtld-elf/rtld.c | 54 ++++++++++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c index 1459b38f3720..7172fbf1d794 100644 --- a/libexec/rtld-elf/rtld.c +++ b/libexec/rtld-elf/rtld.c @@ -5698,32 +5698,22 @@ allocate_module_tls(struct tcb *tcb, int index) return (p); } -bool -allocate_tls_offset(Obj_Entry *obj) +static bool +allocate_tls_offset_common(size_t *offp, size_t tlssize, size_t tlsalign, + size_t tlspoffset __unused) { size_t off; - if (obj->tls_dynamic) - return (false); - - if (obj->tls_static) - return (true); - - if (obj->tlssize == 0) { - obj->tls_static = true; - return (true); - } - if (tls_last_offset == 0) - off = calculate_first_tls_offset(obj->tlssize, obj->tlsalign, - obj->tlspoffset); + off = calculate_first_tls_offset(tlssize, tlsalign, + tlspoffset); else off = calculate_tls_offset(tls_last_offset, tls_last_size, - obj->tlssize, obj->tlsalign, obj->tlspoffset); + tlssize, tlsalign, tlspoffset); - obj->tlsoffset = off; + *offp = off; #ifdef TLS_VARIANT_I - off += obj->tlssize; + off += tlssize; #endif /* @@ -5735,12 +5725,34 @@ allocate_tls_offset(Obj_Entry *obj) if (tls_static_space != 0) { if (off > tls_static_space) return (false); - } else if (obj->tlsalign > tls_static_max_align) { - tls_static_max_align = obj->tlsalign; + } else if (tlsalign > tls_static_max_align) { + tls_static_max_align = tlsalign; } tls_last_offset = off; - tls_last_size = obj->tlssize; + tls_last_size = tlssize; + + return (true); +} + +bool +allocate_tls_offset(Obj_Entry *obj) +{ + if (obj->tls_dynamic) + return (false); + + if (obj->tls_static) + return (true); + + if (obj->tlssize == 0) { + obj->tls_static = true; + return (true); + } + + if (!allocate_tls_offset_common(&obj->tlsoffset, obj->tlssize, + obj->tlsalign, obj->tlspoffset)) + return (false); + obj->tls_static = true; return (true);