From nobody Sun Nov 23 17:50:23 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 4dDxLl37cQz6HNjQ for ; Sun, 23 Nov 2025 17:50:23 +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 "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dDxLl1jXvz3J7G for ; Sun, 23 Nov 2025 17:50:23 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1763920223; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=wNYeCcAUJueVneFPD744XDK5P+0H6a9gIEsrCmIN9ek=; b=uayqEa4Lyp1CxA1PK1uRgqhs4wYOR+ZjiUTNv//IpFFSge7U9aZ6QPqrsop3pow0bux9JC 7ig8FKovExRtFdkdiyVh8KOKiwNnOVGb254wtFL8EsleunXjEF1I8dXh0hei2jNDEXE/ur 9M2ttCdglvByz5nWB8SXskhYKv+a1k1/AWQQBW6g6NF3n7DJOEORW250xpOL4FmFiYbZtg +N0pYntrAB+IjG98ABD6wHbhQ14Fd5dwtB8NRYoWSmMTH70BUqns5XvuMQn6xsMOT8Hhi+ bHYttb3ZR09Ku2BRaBCrA1Q7aHvH5lcdAc4HowsrxaysP9LPT9MExsPHqZOTsA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1763920223; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=wNYeCcAUJueVneFPD744XDK5P+0H6a9gIEsrCmIN9ek=; b=uUGLwVpZRnjRsm40Bfr7rrrxTesl8WN60mFwU+jB/MeqE1edU0TtKH/4EtZrYFwZVdz123 4UONX67KXFlilMUgeHVf5WtTLkrnH2h3OC5oOMm7JvcNv7ocepWhkoBOSp+S778Er6FUdx JK/yOyyGFNSNbqFPUkYsg7VBibBVxkDpgcJxFR5WlT9iZvtz7w35MHJQa93LpcF8LLmRyX 6MHj1X5DHURnJQQ6kPBBvhOw5UlFMZZQ+9fqMccVUspQS9Uv/fbpZ/7zoan2iCBxVb/waA 0kZ8ScQMCAkgMtU6LHxfGQsZNBAst11AN3gOzAbg5jsknCPX+N/2Y/Pra3pmKQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1763920223; a=rsa-sha256; cv=none; b=gSD8fvOLTPueSRPeLD9d+QsslU0Qax0uGt53NcJ8vdJ6QMi6O9cSPZS3ob2RmwFJmQ18A7 71glltEBCdc2zjCxt2G2SYX9FN0U2eM+TqqcWb0rxJH4GYujEqRRw1oCpr/Wt8L13lFsXg 5vjCynoPW5iUJR2qP0Z7QFR6mV2DsDMcwDjJEuyN+5EoVy7oD8j407QQsSnvCCbQmLoLeC c+cQ6gbETovHE0dbqpdy3Pdq1P21WLMzrwdixEh10BQAfr7xFeFqLifL5MuLQOSBVcezUQ iVfTKmq7UHhbodT9/6TdYFSUoAfbxhfH7bBj9SEAkIkYDFq887+7bgrVY9DSUQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4dDxLl0jyVzfCT for ; Sun, 23 Nov 2025 17:50:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id e463 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 23 Nov 2025 17:50:23 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: ShengYi Hung From: Ed Maste Subject: git: 1d1a2e6932d6 - main - lldb: Fix empty register set when trying to get size of register 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: emaste X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 1d1a2e6932d682c40ab878bf83cbbde02d8d0af1 Auto-Submitted: auto-generated Date: Sun, 23 Nov 2025 17:50:23 +0000 Message-Id: <6923495f.e463.2e27d4e5@gitrepo.freebsd.org> The branch main has been updated by emaste: URL: https://cgit.FreeBSD.org/src/commit/?id=1d1a2e6932d682c40ab878bf83cbbde02d8d0af1 commit 1d1a2e6932d682c40ab878bf83cbbde02d8d0af1 Author: ShengYi Hung AuthorDate: 2025-11-21 18:30:25 +0000 Commit: Ed Maste CommitDate: 2025-11-23 17:49:51 +0000 lldb: Fix empty register set when trying to get size of register The register set information is stored as a singleton in GetRegisterInfo_i386. However, other functions later access this information assuming it is stored in GetSharedRegisterInfoVector. To resolve this inconsistency, we remove the original construction logic and instead initialize the singleton using llvm::call_once within the appropriate function (GetSharedRegisterInfoVector_i386). PR: 289945 Obtained from: llvm-project 41859c27842eeda1ef6ff18f3b2fb269388c0857 --- .../Utility/RegisterContextFreeBSD_x86_64.cpp | 44 ++++++++++------------ 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/contrib/llvm-project/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_x86_64.cpp b/contrib/llvm-project/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_x86_64.cpp index e0f3971c6e27..c361b2abb726 100644 --- a/contrib/llvm-project/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_x86_64.cpp +++ b/contrib/llvm-project/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_x86_64.cpp @@ -9,6 +9,7 @@ #include "RegisterContextFreeBSD_x86_64.h" #include "RegisterContextFreeBSD_i386.h" #include "RegisterContextPOSIX_x86.h" +#include "llvm/Support/Threading.h" #include using namespace lldb_private; @@ -69,40 +70,34 @@ struct UserArea { #include "RegisterInfos_x86_64.h" #undef DECLARE_REGISTER_INFOS_X86_64_STRUCT -static std::vector &GetSharedRegisterInfoVector() { - static std::vector register_infos; - return register_infos; -} - -static const RegisterInfo * -GetRegisterInfo_i386(const lldb_private::ArchSpec &arch) { - static std::vector g_register_infos( - GetSharedRegisterInfoVector()); - - // Allocate RegisterInfo only once - if (g_register_infos.empty()) { - // Copy the register information from base class - std::unique_ptr reg_interface( - new RegisterContextFreeBSD_i386(arch)); - const RegisterInfo *base_info = reg_interface->GetRegisterInfo(); - g_register_infos.insert(g_register_infos.end(), &base_info[0], - &base_info[k_num_registers_i386]); +static std::vector & +GetSharedRegisterInfoVector_i386(const lldb_private::ArchSpec &arch) { + static std::vector g_register_infos; + static llvm::once_flag g_initialized; + llvm::call_once(g_initialized, [&]() { + if (g_register_infos.empty()) { + // Copy the register information from base class + std::unique_ptr reg_interface( + new RegisterContextFreeBSD_i386(arch)); + const RegisterInfo *base_info = reg_interface->GetRegisterInfo(); + g_register_infos.insert(g_register_infos.end(), &base_info[0], + &base_info[k_num_registers_i386]); // Include RegisterInfos_x86_64 to update the g_register_infos structure // with x86_64 offsets. #define UPDATE_REGISTER_INFOS_I386_STRUCT_WITH_X86_64_OFFSETS #include "RegisterInfos_x86_64.h" #undef UPDATE_REGISTER_INFOS_I386_STRUCT_WITH_X86_64_OFFSETS - } - - return &g_register_infos[0]; + } + }); + return g_register_infos; } static const RegisterInfo * PrivateGetRegisterInfoPtr(const lldb_private::ArchSpec &target_arch) { switch (target_arch.GetMachine()) { case llvm::Triple::x86: - return GetRegisterInfo_i386(target_arch); + return &GetSharedRegisterInfoVector_i386(target_arch)[0]; case llvm::Triple::x86_64: return g_register_infos_x86_64; default: @@ -116,9 +111,10 @@ PrivateGetRegisterCount(const lldb_private::ArchSpec &target_arch) { switch (target_arch.GetMachine()) { case llvm::Triple::x86: // This vector should have already been filled. - assert(!GetSharedRegisterInfoVector().empty() && + assert(!GetSharedRegisterInfoVector_i386(target_arch).empty() && "i386 register info vector not filled."); - return static_cast(GetSharedRegisterInfoVector().size()); + return static_cast( + GetSharedRegisterInfoVector_i386(target_arch).size()); case llvm::Triple::x86_64: return static_cast(sizeof(g_register_infos_x86_64) / sizeof(g_register_infos_x86_64[0]));