Actually this patch breaks all platforms. The variables were re-added to the functions as non-static function locals, so the first call will work, and subsequent calls will return default-initialized values. I'll revert for now just to get back to a working state, and we can discuss what to do about the function local static versus global static separately.
On Wed, Aug 20, 2014 at 1:41 PM, Zachary Turner <[email protected]> wrote: > Sorry, what i meant by my comment about the Host layer is that I suspect > we don't run the risk of the problem becoming widespread enough that it > will have noticeable performance impact on startup time. > > > On Wed, Aug 20, 2014 at 1:35 PM, Zachary Turner <[email protected]> > wrote: > >> Hi Greg, >> >> MSVC doesn't have thread-safe function local statics, which is why I >> opted to use global statics. I suspect most statics will be in the Host >> layer, and as such we don't run the risk of incurring their penalty all >> over. If it's just a matter of silencing a warning, can we silence it at >> the compiler level instead? Or are you concerned about the performance >> overhead of the global constructors? >> >> >> On Wed, Aug 20, 2014 at 10:00 AM, Greg Clayton <[email protected]> >> wrote: >> >>> Author: gclayton >>> Date: Wed Aug 20 12:00:21 2014 >>> New Revision: 216080 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=216080&view=rev >>> Log: >>> Avoid global contstructors and place static variables inside classes as >>> static local variables and remove the static ivars. Subclasses should use >>> the accessor functions. >>> >>> >>> Modified: >>> lldb/trunk/include/lldb/Host/HostInfoBase.h >>> lldb/trunk/source/Host/common/HostInfoBase.cpp >>> >>> Modified: lldb/trunk/include/lldb/Host/HostInfoBase.h >>> URL: >>> http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Host/HostInfoBase.h?rev=216080&r1=216079&r2=216080&view=diff >>> >>> ============================================================================== >>> --- lldb/trunk/include/lldb/Host/HostInfoBase.h (original) >>> +++ lldb/trunk/include/lldb/Host/HostInfoBase.h Wed Aug 20 12:00:21 2014 >>> @@ -80,14 +80,6 @@ class HostInfoBase >>> >>> protected: >>> static void ComputeHostArchitectureSupport(ArchSpec &arch_32, >>> ArchSpec &arch_64); >>> - >>> - static uint32_t m_number_cpus; >>> - static std::string m_vendor_string; >>> - static std::string m_os_string; >>> - static std::string m_host_triple; >>> - >>> - static ArchSpec m_host_arch_32; >>> - static ArchSpec m_host_arch_64; >>> }; >>> } >>> >>> >>> Modified: lldb/trunk/source/Host/common/HostInfoBase.cpp >>> URL: >>> http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/common/HostInfoBase.cpp?rev=216080&r1=216079&r2=216080&view=diff >>> >>> ============================================================================== >>> --- lldb/trunk/source/Host/common/HostInfoBase.cpp (original) >>> +++ lldb/trunk/source/Host/common/HostInfoBase.cpp Wed Aug 20 12:00:21 >>> 2014 >>> @@ -22,85 +22,86 @@ >>> using namespace lldb; >>> using namespace lldb_private; >>> >>> -uint32_t HostInfoBase::m_number_cpus = 0; >>> -std::string HostInfoBase::m_vendor_string; >>> -std::string HostInfoBase::m_os_string; >>> -std::string HostInfoBase::m_host_triple; >>> -ArchSpec HostInfoBase::m_host_arch_32; >>> -ArchSpec HostInfoBase::m_host_arch_64; >>> >>> uint32_t >>> HostInfoBase::GetNumberCPUS() >>> { >>> static bool is_initialized = false; >>> + uint32_t g_number_cpus = 0; >>> if (!is_initialized) >>> { >>> - m_number_cpus = std::thread::hardware_concurrency(); >>> + g_number_cpus = std::thread::hardware_concurrency(); >>> is_initialized = true; >>> } >>> >>> - return m_number_cpus; >>> + return g_number_cpus; >>> } >>> >>> llvm::StringRef >>> HostInfoBase::GetVendorString() >>> { >>> static bool is_initialized = false; >>> + std::string g_vendor_string; >>> if (!is_initialized) >>> { >>> const ArchSpec &host_arch = HostInfo::GetArchitecture(); >>> const llvm::StringRef &str_ref = >>> host_arch.GetTriple().getVendorName(); >>> - m_vendor_string.assign(str_ref.begin(), str_ref.end()); >>> + g_vendor_string.assign(str_ref.begin(), str_ref.end()); >>> is_initialized = true; >>> } >>> - return m_vendor_string; >>> + return llvm::StringRef(g_vendor_string); >>> } >>> >>> llvm::StringRef >>> HostInfoBase::GetOSString() >>> { >>> static bool is_initialized = false; >>> + std::string g_os_string; >>> if (!is_initialized) >>> { >>> const ArchSpec &host_arch = HostInfo::GetArchitecture(); >>> const llvm::StringRef &str_ref = >>> host_arch.GetTriple().getOSName(); >>> - m_os_string.assign(str_ref.begin(), str_ref.end()); >>> + g_os_string.assign(str_ref.begin(), str_ref.end()); >>> is_initialized = true; >>> } >>> - return m_os_string; >>> + return llvm::StringRef(g_os_string); >>> } >>> >>> llvm::StringRef >>> HostInfoBase::GetTargetTriple() >>> { >>> static bool is_initialized = false; >>> + std::string g_host_triple; >>> if (!is_initialized) >>> { >>> const ArchSpec &host_arch = HostInfo::GetArchitecture(); >>> - m_host_triple = host_arch.GetTriple().getTriple(); >>> + g_host_triple = host_arch.GetTriple().getTriple(); >>> is_initialized = true; >>> } >>> - return m_host_triple; >>> + return g_host_triple; >>> } >>> >>> const ArchSpec & >>> HostInfoBase::GetArchitecture(ArchitectureKind arch_kind) >>> { >>> static bool is_initialized = false; >>> + static ArchSpec g_host_arch_32; >>> + static ArchSpec g_host_arch_64; >>> + >>> if (!is_initialized) >>> { >>> - HostInfo::ComputeHostArchitectureSupport(m_host_arch_32, >>> m_host_arch_64); >>> + HostInfo::ComputeHostArchitectureSupport(g_host_arch_32, >>> g_host_arch_64); >>> is_initialized = true; >>> } >>> >>> // If an explicit 32 or 64-bit architecture was requested, return >>> that. >>> if (arch_kind == eArchKind32) >>> - return m_host_arch_32; >>> + return g_host_arch_32; >>> if (arch_kind == eArchKind64) >>> - return m_host_arch_64; >>> + return g_host_arch_64; >>> >>> // Otherwise prefer the 64-bit architecture if it is valid. >>> - return (m_host_arch_64.IsValid()) ? m_host_arch_64 : m_host_arch_32; >>> + return (g_host_arch_64.IsValid()) ? g_host_arch_64 : g_host_arch_32; >>> } >>> >>> void >>> >>> >>> _______________________________________________ >>> lldb-commits mailing list >>> [email protected] >>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits >>> >> >> >
_______________________________________________ lldb-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
