[Lldb-commits] [lldb] r318039 - Revert "[lldb] Use OrcMCJITReplacement rather than MCJIT as the underlying JIT for LLDB"
Author: labath Date: Mon Nov 13 06:03:17 2017 New Revision: 318039 URL: http://llvm.org/viewvc/llvm-project?rev=318039&view=rev Log: Revert "[lldb] Use OrcMCJITReplacement rather than MCJIT as the underlying JIT for LLDB" This commit really did not introduce any functional changes (for most people) but it turns out it's not for the reason we thought it was. The reason wasn't that Orc is a perfect drop-in replacement for MCJIT, but it was because we were never using Orc in the first place, as it was not initialized. Orc's initialization relies on a global constructor in the LLVMOrcJIT.a. Since this archive does not expose any symbols referenced from other object files, it does not get linked into liblldb when linking against llvm components statically. However, in an LLVM_LINK_LLVM_DYLIB=On build, LLVMOrcJit.a is linked into libLLVM.so using --whole-archive, so the global constructor does end up firing. The result of using Orc jit is pr34194, where lldb fails to evaluate even very simple expressions. This bug can be reproduced in non-LLVM_LINK_LLVM_DYLIB builds by making sure Orc jit is linked into liblldb, for example by #including llvm/ExecutionEngine/OrcMCJITReplacement.h in IRExecutionUnit.cpp (and adding OrcJIT as a dependency to the relevant CMakeLists.txt file). The bug reproduces (at least) on linux and osx. The root cause of the bug seems to be related to relocation processing. It seems Orc processes relocations earlier than the system it is replacing. This means the relocation processing happens before we have had a chance to remap section load addresses to reflect their address in the target process memory, so they end up pointing to locations in the lldb's address space instead. I am not sure whether this is a bug in Orc jit, or in how we are using it from lldb, but in any case it is preventing us from using Orc right now. Reverting this fixes LLVM_LINK_LLVM_DYLIB build, and makes it clear that we are in fact *not* using Orc, and we never really were. This reverts commit r279327. Modified: lldb/trunk/source/Expression/IRExecutionUnit.cpp Modified: lldb/trunk/source/Expression/IRExecutionUnit.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Expression/IRExecutionUnit.cpp?rev=318039&r1=318038&r2=318039&view=diff == --- lldb/trunk/source/Expression/IRExecutionUnit.cpp (original) +++ lldb/trunk/source/Expression/IRExecutionUnit.cpp Mon Nov 13 06:03:17 2017 @@ -277,8 +277,7 @@ void IRExecutionUnit::GetRunnableInfo(St .setRelocationModel(relocModel) .setMCJITMemoryManager( std::unique_ptr(new MemoryManager(*this))) - .setOptLevel(llvm::CodeGenOpt::Less) - .setUseOrcMCJITReplacement(true); + .setOptLevel(llvm::CodeGenOpt::Less); llvm::StringRef mArch; llvm::StringRef mCPU; ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] r318040 - CompilerType: Add ability to retrieve an integral template argument
Author: labath Date: Mon Nov 13 06:26:21 2017 New Revision: 318040 URL: http://llvm.org/viewvc/llvm-project?rev=318040&view=rev Log: CompilerType: Add ability to retrieve an integral template argument Summary: Despite it's name, GetTemplateArgument was only really working for Type template arguments. This adds the ability to retrieve integral arguments as well (which I've needed for the std::bitset data formatter). I've done this by splitting the function into three pieces. The idea is that one first calls GetTemplateArgumentKind (first function) to determine the what kind of a parameter this is. Based on that, one can then use specialized functions to retrieve the correct value. Currently, I only implement two of these: GetTypeTemplateArgument and GetIntegralTemplateArgument. Reviewers: jingham, clayborg Subscribers: lldb-commits Differential Revision: https://reviews.llvm.org/D39844 Modified: lldb/trunk/include/lldb/Symbol/ClangASTContext.h lldb/trunk/include/lldb/Symbol/CompilerType.h lldb/trunk/include/lldb/Symbol/GoASTContext.h lldb/trunk/include/lldb/Symbol/JavaASTContext.h lldb/trunk/include/lldb/Symbol/OCamlASTContext.h lldb/trunk/include/lldb/Symbol/TypeSystem.h lldb/trunk/include/lldb/lldb-enumerations.h lldb/trunk/source/API/SBType.cpp lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxx.cpp lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxList.cpp lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp lldb/trunk/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp lldb/trunk/source/Symbol/ClangASTContext.cpp lldb/trunk/source/Symbol/CompilerType.cpp lldb/trunk/source/Symbol/JavaASTContext.cpp lldb/trunk/source/Symbol/TypeSystem.cpp lldb/trunk/unittests/Symbol/TestClangASTContext.cpp Modified: lldb/trunk/include/lldb/Symbol/ClangASTContext.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ClangASTContext.h?rev=318040&r1=318039&r2=318040&view=diff == --- lldb/trunk/include/lldb/Symbol/ClangASTContext.h (original) +++ lldb/trunk/include/lldb/Symbol/ClangASTContext.h Mon Nov 13 06:26:21 2017 @@ -782,9 +782,14 @@ public: size_t GetNumTemplateArguments(lldb::opaque_compiler_type_t type) override; - CompilerType GetTemplateArgument(lldb::opaque_compiler_type_t type, - size_t idx, - lldb::TemplateArgumentKind &kind) override; + lldb::TemplateArgumentKind + GetTemplateArgumentKind(lldb::opaque_compiler_type_t type, + size_t idx) override; + CompilerType GetTypeTemplateArgument(lldb::opaque_compiler_type_t type, + size_t idx) override; + std::pair + GetIntegralTemplateArgument(lldb::opaque_compiler_type_t type, + size_t idx) override; CompilerType GetTypeForFormatters(void *type) override; @@ -971,6 +976,9 @@ public: return m_origins; } protected: + const clang::ClassTemplateSpecializationDecl * + GetAsTemplateSpecialization(lldb::opaque_compiler_type_t type); + //-- // Classes that inherit from ClangASTContext can see and modify these //-- Modified: lldb/trunk/include/lldb/Symbol/CompilerType.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/CompilerType.h?rev=318040&r1=318039&r2=318040&view=diff == --- lldb/trunk/include/lldb/Symbol/CompilerType.h (original) +++ lldb/trunk/include/lldb/Symbol/CompilerType.h Mon Nov 13 06:26:21 2017 @@ -365,8 +365,12 @@ public: size_t GetNumTemplateArguments() const; - CompilerType GetTemplateArgument(size_t idx, - lldb::TemplateArgumentKind &kind) const; + lldb::TemplateArgumentKind GetTemplateArgumentKind(size_t idx) const; + CompilerType GetTypeTemplateArgument(size_t idx) const; + + // Returns the value of the template argument and its type. In case the + // argument is not found, returns an invalid CompilerType. + std::pair GetIntegralTemplateArgument(size_t idx) const; CompilerType GetTypeForFormatters() const; Modified: lldb/trunk/include/lldb/Symbol/GoASTContext.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/GoASTContext.h?rev=318040&r1=318039&r2=318040&view=diff == --- lldb/trunk/include/lldb/Symbol/GoASTContext.h (original) +++ lldb/trunk/include/lldb/Symbol/GoASTContext.h Mon Nov 13 06:26:21 2017 @
[Lldb-commits] [PATCH] D39844: CompilerType: Add ability to retrieve an integral template argument
This revision was automatically updated to reflect the committed changes. Closed by commit rL318040: CompilerType: Add ability to retrieve an integral template argument (authored by labath). Repository: rL LLVM https://reviews.llvm.org/D39844 Files: lldb/trunk/include/lldb/Symbol/ClangASTContext.h lldb/trunk/include/lldb/Symbol/CompilerType.h lldb/trunk/include/lldb/Symbol/GoASTContext.h lldb/trunk/include/lldb/Symbol/JavaASTContext.h lldb/trunk/include/lldb/Symbol/OCamlASTContext.h lldb/trunk/include/lldb/Symbol/TypeSystem.h lldb/trunk/include/lldb/lldb-enumerations.h lldb/trunk/source/API/SBType.cpp lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxx.cpp lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxList.cpp lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp lldb/trunk/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp lldb/trunk/source/Symbol/ClangASTContext.cpp lldb/trunk/source/Symbol/CompilerType.cpp lldb/trunk/source/Symbol/JavaASTContext.cpp lldb/trunk/source/Symbol/TypeSystem.cpp lldb/trunk/unittests/Symbol/TestClangASTContext.cpp Index: lldb/trunk/unittests/Symbol/TestClangASTContext.cpp === --- lldb/trunk/unittests/Symbol/TestClangASTContext.cpp +++ lldb/trunk/unittests/Symbol/TestClangASTContext.cpp @@ -406,18 +406,28 @@ type, "foo_def", CompilerDeclContext(m_ast.get(), m_ast->GetTranslationUnitDecl())); + CompilerType auto_type(m_ast->getASTContext(), + m_ast->getASTContext()->getAutoType( + ClangUtil::GetCanonicalQualType(typedef_type), + clang::AutoTypeKeyword::Auto, false)); + CompilerType int_type(m_ast->getASTContext(), m_ast->getASTContext()->IntTy); - for(CompilerType t: { type, typedef_type }) { + for(CompilerType t: { type, typedef_type, auto_type }) { SCOPED_TRACE(t.GetTypeName().AsCString()); -TemplateArgumentKind kind; -CompilerType arg = -m_ast->GetTemplateArgument(t.GetOpaqueQualType(), 0, kind); -EXPECT_EQ(kind, eTemplateArgumentKindType); -EXPECT_EQ(arg, int_type); - -arg = m_ast->GetTemplateArgument(t.GetOpaqueQualType(), 1, kind); -EXPECT_EQ(kind, eTemplateArgumentKindIntegral); -EXPECT_EQ(arg, int_type); +EXPECT_EQ(m_ast->GetTemplateArgumentKind(t.GetOpaqueQualType(), 0), + eTemplateArgumentKindType); +EXPECT_EQ(m_ast->GetTypeTemplateArgument(t.GetOpaqueQualType(), 0), + int_type); +auto p = m_ast->GetIntegralTemplateArgument(t.GetOpaqueQualType(), 0); +EXPECT_EQ(p.second, CompilerType()); + +EXPECT_EQ(m_ast->GetTemplateArgumentKind(t.GetOpaqueQualType(), 1), + eTemplateArgumentKindIntegral); +EXPECT_EQ(m_ast->GetTypeTemplateArgument(t.GetOpaqueQualType(), 1), + CompilerType()); +p = m_ast->GetIntegralTemplateArgument(t.GetOpaqueQualType(), 1); +EXPECT_EQ(p.first, llvm::APSInt(47)); +EXPECT_EQ(p.second, int_type); } } Index: lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp === --- lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp +++ lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp @@ -290,8 +290,7 @@ CompilerType type = valobj_sp->GetCompilerType(); if (!type.IsValid() || type.GetNumTemplateArguments() == 0) return nullptr; - TemplateArgumentKind kind; - CompilerType arg_type = type.GetTemplateArgument(0, kind); + CompilerType arg_type = type.GetTypeTemplateArgument(0); if (arg_type.GetTypeName() == ConstString("bool")) return new LibcxxVectorBoolSyntheticFrontEnd(valobj_sp); return new LibcxxStdVectorSyntheticFrontEnd(valobj_sp); Index: lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp === --- lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp +++ lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp @@ -121,11 +121,10 @@ if (!first_sp) return nullptr; m_element_type = first_sp->GetCompilerType(); -lldb::TemplateArgumentKind kind; -m_element_type = m_element_type.GetTemplateArgument(0, kind); +m_element_type = m_element_type.GetTypeTemplateArgument(0); m_element_type = m_element_type.GetPointeeType(); m_node_type = m_element_type; -m_element_type = m_element_type.GetTemplateArgument(0, kind); +m_element_type = m_element_type.GetTypeTemplateArgument(0); std::string name; m_element_type = m_element_type.GetFieldAtIndex(0, name, nullptr, nullptr, nullptr); Index: lldb/trunk/so
[Lldb-commits] [PATCH] D39896: Remove last Host usage from ArchSpec
labath added a comment. If I understand correctly, everyone agrees with this change, so I will commit it soon(ish). Below are my thoughs on some of the things said in this thread. @zturner wrote: > Super awesome. When you do move it to Utility, can you run the deps python > script to see if any cmake dependencies can be updated? The only change necessary was to *add* Utility as a dependency of the ArchitectureArm plugin, which did not depend (directly) on Utility before this. In https://reviews.llvm.org/D39896#922381, @probinson wrote: > Drive by comment: > > Triple.h is in ADT; Triple.cpp is in Support. I agree it belongs in Support, > and I'm not sure why it's schizo like that. That's because there is no `llvm/lib/ADT`, and there couldn't be one in the present form because of all the mutual dependencies between ADT and Support headers. So all of the ADT cpp files live in Support, but it's not so glaringly obvious as most of ADT is header-only. Triple is one of few headers that actually has a cpp file. (That said, I can see some reasoning behind it being in ADT, but I do think it would look better in Support.) > Note, Greg and I used to argue about the strategy for lldb-server. My notion > was on modern systems the actual file size difference between an lldb-server > that used all of lldb.framework, and one that could use a cut down library > was really not all that important. If you're making a stub for an hard > embedded system, you probably aren't going to use lldb-server, you'll use a > much smaller gdb-protocol stub, and we didn't really have the intent to > provide that functionality. So lldb server as intended for things like > phones etc, where "small" means small in modern terms, not "a kilobyte > matters" type small. In our distribution model, we copy the lldb-server to the phone the first time you start a debug session, so size is still important to us (we're not counting every kilobyte, but a megabyte more or less matters). liblldb is currently ~61 MB, while lldb-server (x86_64) is 9.6 (less, when you compile with -Os). Initially, the two numbers were nearly equal. Right now we're mostly happy with the size (although we wouldn't mind it being smaller), so size is not my primary motivation here. In https://reviews.llvm.org/D39896#922134, @zturner wrote: > I'd be open to having another organizational component that isn't Utility. > But as Jim said, there isn't a critical mass of stuff yet in Utility to > figure out where it makes sense to draw the line. > > In all honesty, that second component might just end up being "Core" again, > if enough stuff can be moved out of Core that it doesn't have to depend on > Symbol, Host, Interpreter, Breakpoint, etc. I agree. At one point in not too distant future we will need to sit down and figure out how to split up Utility (otherwise, the layering problem can be vacuously "solved" by moving everything into a single layer). I don't think it will be easy though, as there is a natural tendency for the lowest layers of anything to become a collection of random unrelated tidbits (which is what happened to llvm support). My ideas for the next steps are roughly as follows: - move ProcessInfo class and friends to Utility or Host. This is so that the "get me the list of processes on this machine" functionality can work without including Process.h - move the symbol-finding code from Host to Platform -- most of this is not host- but target-specific. E.g. the linux way of finding symbols could easily work for remote debugging from other OSes, if you had a suitable sysroot copied or network-mounted. - move RegisterValue to Utility -- useful in lldb-server, unlike a lot of the stuff in Core. https://reviews.llvm.org/D39896 ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] r318046 - Remove last Host usage from ArchSpec
Author: labath Date: Mon Nov 13 07:57:20 2017 New Revision: 318046 URL: http://llvm.org/viewvc/llvm-project?rev=318046&view=rev Log: Remove last Host usage from ArchSpec Summary: In D39387, I was quick to jump to conclusion that ArchSpec has no external dependencies. It turns there still was one call to HostInfo::GetArchitecture left -- for implementing the "systemArch32" architecture and friends. Since GetAugmentedArchSpec is the place we handle these "incomplete" triples that don't specify os or vendor and "systemArch" looks very much like an incomplete triple, I move its handling there. After this ArchSpec *really* does not have external dependencies, and I'll move it to the Utility module as a follow-up. Reviewers: zturner, clayborg, jingham Subscribers: lldb-commits Differential Revision: https://reviews.llvm.org/D39896 Modified: lldb/trunk/include/lldb/Host/HostInfoBase.h lldb/trunk/source/Core/ArchSpec.cpp lldb/trunk/source/Host/common/HostInfoBase.cpp lldb/trunk/source/Target/Platform.cpp lldb/trunk/unittests/Host/HostInfoTest.cpp Modified: lldb/trunk/include/lldb/Host/HostInfoBase.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Host/HostInfoBase.h?rev=318046&r1=318045&r2=318046&view=diff == --- lldb/trunk/include/lldb/Host/HostInfoBase.h (original) +++ lldb/trunk/include/lldb/Host/HostInfoBase.h Mon Nov 13 07:57:20 2017 @@ -61,6 +61,8 @@ public: static const ArchSpec & GetArchitecture(ArchitectureKind arch_kind = eArchKindDefault); + static llvm::Optional ParseArchitectureKind(llvm::StringRef kind); + //-- /// Find a resource files that are related to LLDB. /// Modified: lldb/trunk/source/Core/ArchSpec.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ArchSpec.cpp?rev=318046&r1=318045&r2=318046&view=diff == --- lldb/trunk/source/Core/ArchSpec.cpp (original) +++ lldb/trunk/source/Core/ArchSpec.cpp Mon Nov 13 07:57:20 2017 @@ -9,7 +9,6 @@ #include "lldb/Core/ArchSpec.h" -#include "lldb/Host/HostInfo.h" #include "lldb/Utility/NameMatches.h" #include "lldb/Utility/Stream.h" // for Stream #include "lldb/Utility/StringList.h" @@ -874,17 +873,7 @@ bool ArchSpec::SetTriple(llvm::StringRef if (ParseMachCPUDashSubtypeTriple(triple, *this)) return true; - if (triple.startswith(LLDB_ARCH_DEFAULT)) { -// Special case for the current host default architectures... -if (triple.equals(LLDB_ARCH_DEFAULT_32BIT)) - *this = HostInfo::GetArchitecture(HostInfo::eArchKind32); -else if (triple.equals(LLDB_ARCH_DEFAULT_64BIT)) - *this = HostInfo::GetArchitecture(HostInfo::eArchKind64); -else if (triple.equals(LLDB_ARCH_DEFAULT)) - *this = HostInfo::GetArchitecture(HostInfo::eArchKindDefault); - } else { -SetTriple(llvm::Triple(llvm::Triple::normalize(triple))); - } + SetTriple(llvm::Triple(llvm::Triple::normalize(triple))); return IsValid(); } Modified: lldb/trunk/source/Host/common/HostInfoBase.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/common/HostInfoBase.cpp?rev=318046&r1=318045&r2=318046&view=diff == --- lldb/trunk/source/Host/common/HostInfoBase.cpp (original) +++ lldb/trunk/source/Host/common/HostInfoBase.cpp Mon Nov 13 07:57:20 2017 @@ -103,6 +103,14 @@ const ArchSpec &HostInfoBase::GetArchite : g_fields->m_host_arch_32; } +llvm::Optional HostInfoBase::ParseArchitectureKind(llvm::StringRef kind) { + return llvm::StringSwitch>(kind) + .Case(LLDB_ARCH_DEFAULT, eArchKindDefault) + .Case(LLDB_ARCH_DEFAULT_32BIT, eArchKind32) + .Case(LLDB_ARCH_DEFAULT_64BIT, eArchKind64) + .Default(llvm::None); +} + bool HostInfoBase::GetLLDBPath(lldb::PathType type, FileSpec &file_spec) { file_spec.Clear(); @@ -258,6 +266,9 @@ ArchSpec HostInfoBase::GetAugmentedArchS if (!ArchSpec::ContainsOnlyArch(normalized_triple)) return ArchSpec(triple); + if (auto kind = HostInfo::ParseArchitectureKind(triple)) +return HostInfo::GetArchitecture(*kind); + llvm::Triple host_triple(llvm::sys::getDefaultTargetTriple()); if (normalized_triple.getVendorName().empty()) Modified: lldb/trunk/source/Target/Platform.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Platform.cpp?rev=318046&r1=318045&r2=318046&view=diff == --- lldb/trunk/source/Target/Platform.cpp (original) +++ lldb/trunk/source/Target/Platform.cpp Mon Nov 13 07:57:20 2017 @@ -976,6 +976,9 @@ ArchSpec Platform::GetAugmentedArchSpec( if (!ArchSpec::ContainsOnlyArch(normalized_triple)) return ArchSpec(triple); + if (auto kind =
[Lldb-commits] [PATCH] D39896: Remove last Host usage from ArchSpec
This revision was automatically updated to reflect the committed changes. Closed by commit rL318046: Remove last Host usage from ArchSpec (authored by labath). Changed prior to commit: https://reviews.llvm.org/D39896?vs=122416&id=122651#toc Repository: rL LLVM https://reviews.llvm.org/D39896 Files: lldb/trunk/include/lldb/Host/HostInfoBase.h lldb/trunk/source/Core/ArchSpec.cpp lldb/trunk/source/Host/common/HostInfoBase.cpp lldb/trunk/source/Target/Platform.cpp lldb/trunk/unittests/Host/HostInfoTest.cpp Index: lldb/trunk/unittests/Host/HostInfoTest.cpp === --- lldb/trunk/unittests/Host/HostInfoTest.cpp +++ lldb/trunk/unittests/Host/HostInfoTest.cpp @@ -1,4 +1,4 @@ -//===-- HostTest.cpp *- C++ -*-===// +//===-- HostInfoTest.cpp *- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -8,6 +8,7 @@ //===--===// #include "lldb/Host/HostInfo.h" +#include "lldb/lldb-defines.h" #include "gtest/gtest.h" using namespace lldb_private; @@ -37,4 +38,8 @@ EXPECT_EQ(spec.GetTriple().getOS(), triple.getOS()); EXPECT_EQ(spec.GetTriple().getVendor(), triple.getVendor()); EXPECT_EQ(spec.GetTriple().getEnvironment(), triple.getEnvironment()); + + // Test LLDB_ARCH_DEFAULT + EXPECT_EQ(HostInfo::GetAugmentedArchSpec(LLDB_ARCH_DEFAULT).GetTriple(), +HostInfo::GetArchitecture(HostInfo::eArchKindDefault).GetTriple()); } Index: lldb/trunk/source/Host/common/HostInfoBase.cpp === --- lldb/trunk/source/Host/common/HostInfoBase.cpp +++ lldb/trunk/source/Host/common/HostInfoBase.cpp @@ -103,6 +103,14 @@ : g_fields->m_host_arch_32; } +llvm::Optional HostInfoBase::ParseArchitectureKind(llvm::StringRef kind) { + return llvm::StringSwitch>(kind) + .Case(LLDB_ARCH_DEFAULT, eArchKindDefault) + .Case(LLDB_ARCH_DEFAULT_32BIT, eArchKind32) + .Case(LLDB_ARCH_DEFAULT_64BIT, eArchKind64) + .Default(llvm::None); +} + bool HostInfoBase::GetLLDBPath(lldb::PathType type, FileSpec &file_spec) { file_spec.Clear(); @@ -258,6 +266,9 @@ if (!ArchSpec::ContainsOnlyArch(normalized_triple)) return ArchSpec(triple); + if (auto kind = HostInfo::ParseArchitectureKind(triple)) +return HostInfo::GetArchitecture(*kind); + llvm::Triple host_triple(llvm::sys::getDefaultTargetTriple()); if (normalized_triple.getVendorName().empty()) Index: lldb/trunk/source/Core/ArchSpec.cpp === --- lldb/trunk/source/Core/ArchSpec.cpp +++ lldb/trunk/source/Core/ArchSpec.cpp @@ -9,7 +9,6 @@ #include "lldb/Core/ArchSpec.h" -#include "lldb/Host/HostInfo.h" #include "lldb/Utility/NameMatches.h" #include "lldb/Utility/Stream.h" // for Stream #include "lldb/Utility/StringList.h" @@ -874,17 +873,7 @@ if (ParseMachCPUDashSubtypeTriple(triple, *this)) return true; - if (triple.startswith(LLDB_ARCH_DEFAULT)) { -// Special case for the current host default architectures... -if (triple.equals(LLDB_ARCH_DEFAULT_32BIT)) - *this = HostInfo::GetArchitecture(HostInfo::eArchKind32); -else if (triple.equals(LLDB_ARCH_DEFAULT_64BIT)) - *this = HostInfo::GetArchitecture(HostInfo::eArchKind64); -else if (triple.equals(LLDB_ARCH_DEFAULT)) - *this = HostInfo::GetArchitecture(HostInfo::eArchKindDefault); - } else { -SetTriple(llvm::Triple(llvm::Triple::normalize(triple))); - } + SetTriple(llvm::Triple(llvm::Triple::normalize(triple))); return IsValid(); } Index: lldb/trunk/source/Target/Platform.cpp === --- lldb/trunk/source/Target/Platform.cpp +++ lldb/trunk/source/Target/Platform.cpp @@ -976,6 +976,9 @@ if (!ArchSpec::ContainsOnlyArch(normalized_triple)) return ArchSpec(triple); + if (auto kind = HostInfo::ParseArchitectureKind(triple)) +return HostInfo::GetArchitecture(*kind); + ArchSpec compatible_arch; ArchSpec raw_arch(triple); if (!IsCompatibleArchitecture(raw_arch, false, &compatible_arch)) Index: lldb/trunk/include/lldb/Host/HostInfoBase.h === --- lldb/trunk/include/lldb/Host/HostInfoBase.h +++ lldb/trunk/include/lldb/Host/HostInfoBase.h @@ -61,6 +61,8 @@ static const ArchSpec & GetArchitecture(ArchitectureKind arch_kind = eArchKindDefault); + static llvm::Optional ParseArchitectureKind(llvm::StringRef kind); + //-- /// Find a resource files that are related to LLDB. /// ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-
[Lldb-commits] [lldb] r318052 - Fix netbsd, freebsd and osx builds for ArchSpec move
Author: labath Date: Mon Nov 13 08:47:37 2017 New Revision: 318052 URL: http://llvm.org/viewvc/llvm-project?rev=318052&view=rev Log: Fix netbsd, freebsd and osx builds for ArchSpec move Modified: lldb/trunk/include/lldb/Utility/ArchSpec.h lldb/trunk/source/Host/macosx/Host.mm lldb/trunk/source/Host/macosx/Symbols.cpp lldb/trunk/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.cpp lldb/trunk/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.cpp lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp lldb/trunk/source/Plugins/Platform/MacOSX/PlatformiOSSimulator.cpp lldb/trunk/source/Plugins/Process/Darwin/NativeProcessDarwin.h lldb/trunk/source/Plugins/Process/FreeBSD/RegisterContextPOSIX.h lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.h lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ThreadKDP.cpp lldb/trunk/source/Plugins/Process/NetBSD/NativeProcessNetBSD.h lldb/trunk/source/Plugins/Process/mach-core/ThreadMachCore.cpp lldb/trunk/unittests/SymbolFile/PDB/SymbolFilePDBTests.cpp Modified: lldb/trunk/include/lldb/Utility/ArchSpec.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Utility/ArchSpec.h?rev=318052&r1=318051&r2=318052&view=diff == --- lldb/trunk/include/lldb/Utility/ArchSpec.h (original) +++ lldb/trunk/include/lldb/Utility/ArchSpec.h Mon Nov 13 08:47:37 2017 @@ -23,7 +23,7 @@ namespace lldb_private { //-- -/// @class ArchSpec ArchSpec.h "lldb/Core/ArchSpec.h" +/// @class ArchSpec ArchSpec.h "lldb/Utility/ArchSpec.h" /// @brief An architecture specification class. /// /// A class designed to be created from a cpu type and subtype, a Modified: lldb/trunk/source/Host/macosx/Host.mm URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/macosx/Host.mm?rev=318052&r1=318051&r2=318052&view=diff == --- lldb/trunk/source/Host/macosx/Host.mm (original) +++ lldb/trunk/source/Host/macosx/Host.mm Mon Nov 13 08:47:37 2017 @@ -54,7 +54,6 @@ #include #include -#include "lldb/Core/ArchSpec.h" #include "lldb/Core/Communication.h" #include "lldb/Core/Module.h" #include "lldb/Core/ModuleSpec.h" @@ -63,6 +62,7 @@ #include "lldb/Host/ThreadLauncher.h" #include "lldb/Target/Platform.h" #include "lldb/Target/Process.h" +#include "lldb/Utility/ArchSpec.h" #include "lldb/Utility/CleanUp.h" #include "lldb/Utility/DataBufferHeap.h" #include "lldb/Utility/DataExtractor.h" Modified: lldb/trunk/source/Host/macosx/Symbols.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/macosx/Symbols.cpp?rev=318052&r1=318051&r2=318052&view=diff == --- lldb/trunk/source/Host/macosx/Symbols.cpp (original) +++ lldb/trunk/source/Host/macosx/Symbols.cpp Mon Nov 13 08:47:37 2017 @@ -23,11 +23,11 @@ #include "Host/macosx/cfcpp/CFCData.h" #include "Host/macosx/cfcpp/CFCReleaser.h" #include "Host/macosx/cfcpp/CFCString.h" -#include "lldb/Core/ArchSpec.h" #include "lldb/Core/Module.h" #include "lldb/Core/ModuleSpec.h" #include "lldb/Host/Host.h" #include "lldb/Symbol/ObjectFile.h" +#include "lldb/Utility/ArchSpec.h" #include "lldb/Utility/CleanUp.h" #include "lldb/Utility/DataBuffer.h" #include "lldb/Utility/DataExtractor.h" Modified: lldb/trunk/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.cpp?rev=318052&r1=318051&r2=318052&view=diff == --- lldb/trunk/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.cpp (original) +++ lldb/trunk/source/Plugins/Platform/MacOSX/PlatformAppleTVSimulator.cpp Mon Nov 13 08:47:37 2017 @@ -14,7 +14,6 @@ // Other libraries and framework includes // Project includes #include "lldb/Breakpoint/BreakpointLocation.h" -#include "lldb/Core/ArchSpec.h" #include "lldb/Core/Module.h" #include "lldb/Core/ModuleList.h" #include "lldb/Core/ModuleSpec.h" @@ -23,6 +22,7 @@ #include "lldb/Host/HostInfo.h" #include "lldb/Target/Process.h" #include "lldb/Target/Target.h" +#include "lldb/Utility/ArchSpec.h" #include "lldb/Utility/FileSpec.h" #include "lldb/Utility/Log.h" #include "lldb/Utility/Status.h" Modified: lldb/trunk/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.cpp?rev=318052&r1=318051&r2=318052&view=diff == --- lldb/trunk/source/Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.cpp (original) +++ lldb/trunk/source/Plugins/Platform/MacOSX/PlatformA
[Lldb-commits] [PATCH] D39578: Fix a couple of self-assignments using memcpy.
hintonda added a comment. ping? https://reviews.llvm.org/D39578 ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
Re: [Lldb-commits] [lldb] r318039 - Revert "[lldb] Use OrcMCJITReplacement rather than MCJIT as the underlying JIT for LLDB"
Oops -- I thought I'd reverted this ages ago. Evidently not. Thanks Pavel! -- Lang. On Mon, Nov 13, 2017 at 6:03 AM, Pavel Labath via lldb-commits < lldb-commits@lists.llvm.org> wrote: > Author: labath > Date: Mon Nov 13 06:03:17 2017 > New Revision: 318039 > > URL: http://llvm.org/viewvc/llvm-project?rev=318039&view=rev > Log: > Revert "[lldb] Use OrcMCJITReplacement rather than MCJIT as the underlying > JIT for LLDB" > > This commit really did not introduce any functional changes (for most > people) but it turns out it's not for the reason we thought it was. > > The reason wasn't that Orc is a perfect drop-in replacement for MCJIT, > but it was because we were never using Orc in the first place, as it was > not initialized. > > Orc's initialization relies on a global constructor in the LLVMOrcJIT.a. > Since this archive does not expose any symbols referenced from other > object files, it does not get linked into liblldb when linking against > llvm components statically. However, in an LLVM_LINK_LLVM_DYLIB=On > build, LLVMOrcJit.a is linked into libLLVM.so using --whole-archive, so > the global constructor does end up firing. > > The result of using Orc jit is pr34194, where lldb fails to evaluate > even very simple expressions. This bug can be reproduced in > non-LLVM_LINK_LLVM_DYLIB builds by making sure Orc jit is linked into > liblldb, for example by #including > llvm/ExecutionEngine/OrcMCJITReplacement.h in IRExecutionUnit.cpp (and > adding OrcJIT as a dependency to the relevant CMakeLists.txt file). The > bug reproduces (at least) on linux and osx. > > The root cause of the bug seems to be related to relocation processing. > It seems Orc processes relocations earlier than the system it is > replacing. This means the relocation processing happens before we have > had a chance to remap section load addresses to reflect their address in > the target process memory, so they end up pointing to locations in the > lldb's address space instead. > > I am not sure whether this is a bug in Orc jit, or in how we are using > it from lldb, but in any case it is preventing us from using Orc right > now. Reverting this fixes LLVM_LINK_LLVM_DYLIB build, and makes it clear > that we are in fact *not* using Orc, and we never really were. > > This reverts commit r279327. > > Modified: > lldb/trunk/source/Expression/IRExecutionUnit.cpp > > Modified: lldb/trunk/source/Expression/IRExecutionUnit.cpp > URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/ > Expression/IRExecutionUnit.cpp?rev=318039&r1=318038&r2=318039&view=diff > > == > --- lldb/trunk/source/Expression/IRExecutionUnit.cpp (original) > +++ lldb/trunk/source/Expression/IRExecutionUnit.cpp Mon Nov 13 06:03:17 > 2017 > @@ -277,8 +277,7 @@ void IRExecutionUnit::GetRunnableInfo(St >.setRelocationModel(relocModel) >.setMCJITMemoryManager( >std::unique_ptr(new MemoryManager(*this))) > - .setOptLevel(llvm::CodeGenOpt::Less) > - .setUseOrcMCJITReplacement(true); > + .setOptLevel(llvm::CodeGenOpt::Less); > >llvm::StringRef mArch; >llvm::StringRef mCPU; > > > ___ > lldb-commits mailing list > lldb-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits > ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
Re: [Lldb-commits] [lldb] r318039 - Revert "[lldb] Use OrcMCJITReplacement rather than MCJIT as the underlying JIT for LLDB"
For the curious: The relocation issue is one of two known incompatibilities between OrcMCJIT and MCJIT. I'm working on an ORC refactor that should eliminate both, at which point we can try this out again (with OrcMCJITReplacement properly #included this time). Cheers, Lang. On Mon, Nov 13, 2017 at 6:03 AM, Pavel Labath via lldb-commits < lldb-commits@lists.llvm.org> wrote: > Author: labath > Date: Mon Nov 13 06:03:17 2017 > New Revision: 318039 > > URL: http://llvm.org/viewvc/llvm-project?rev=318039&view=rev > Log: > Revert "[lldb] Use OrcMCJITReplacement rather than MCJIT as the underlying > JIT for LLDB" > > This commit really did not introduce any functional changes (for most > people) but it turns out it's not for the reason we thought it was. > > The reason wasn't that Orc is a perfect drop-in replacement for MCJIT, > but it was because we were never using Orc in the first place, as it was > not initialized. > > Orc's initialization relies on a global constructor in the LLVMOrcJIT.a. > Since this archive does not expose any symbols referenced from other > object files, it does not get linked into liblldb when linking against > llvm components statically. However, in an LLVM_LINK_LLVM_DYLIB=On > build, LLVMOrcJit.a is linked into libLLVM.so using --whole-archive, so > the global constructor does end up firing. > > The result of using Orc jit is pr34194, where lldb fails to evaluate > even very simple expressions. This bug can be reproduced in > non-LLVM_LINK_LLVM_DYLIB builds by making sure Orc jit is linked into > liblldb, for example by #including > llvm/ExecutionEngine/OrcMCJITReplacement.h in IRExecutionUnit.cpp (and > adding OrcJIT as a dependency to the relevant CMakeLists.txt file). The > bug reproduces (at least) on linux and osx. > > The root cause of the bug seems to be related to relocation processing. > It seems Orc processes relocations earlier than the system it is > replacing. This means the relocation processing happens before we have > had a chance to remap section load addresses to reflect their address in > the target process memory, so they end up pointing to locations in the > lldb's address space instead. > > I am not sure whether this is a bug in Orc jit, or in how we are using > it from lldb, but in any case it is preventing us from using Orc right > now. Reverting this fixes LLVM_LINK_LLVM_DYLIB build, and makes it clear > that we are in fact *not* using Orc, and we never really were. > > This reverts commit r279327. > > Modified: > lldb/trunk/source/Expression/IRExecutionUnit.cpp > > Modified: lldb/trunk/source/Expression/IRExecutionUnit.cpp > URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/ > Expression/IRExecutionUnit.cpp?rev=318039&r1=318038&r2=318039&view=diff > > == > --- lldb/trunk/source/Expression/IRExecutionUnit.cpp (original) > +++ lldb/trunk/source/Expression/IRExecutionUnit.cpp Mon Nov 13 06:03:17 > 2017 > @@ -277,8 +277,7 @@ void IRExecutionUnit::GetRunnableInfo(St >.setRelocationModel(relocModel) >.setMCJITMemoryManager( >std::unique_ptr(new MemoryManager(*this))) > - .setOptLevel(llvm::CodeGenOpt::Less) > - .setUseOrcMCJITReplacement(true); > + .setOptLevel(llvm::CodeGenOpt::Less); > >llvm::StringRef mArch; >llvm::StringRef mCPU; > > > ___ > lldb-commits mailing list > lldb-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits > ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D39578: Fix a couple of self-assignments using memcpy.
clayborg requested changes to this revision. clayborg added a comment. This revision now requires changes to proceed. First change looks good. Second one we can probably avoid doing anything in Value::AppendDataToHostBuffer and return 0. No need to copy data over itself. Comment at: source/Core/Value.cpp:146-147 size_t Value::AppendDataToHostBuffer(const Value &rhs) { + // FIXME: What should we do if this == &rhs? + // If we allow, change s/memcpy/memmove/ below. size_t curr_size = m_data_buffer.GetByteSize(); Should probably return 0 if this == &rhs? https://reviews.llvm.org/D39578 ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D39966: Add a data formatter for libc++ std::bitset
labath created this revision. Herald added a subscriber: mgorny. Herald added a reviewer: EricWF. https://reviews.llvm.org/D39966 Files: packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/bitset/Makefile packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/bitset/TestDataFormatterLibcxxBitset.py packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/bitset/main.cpp source/Plugins/Language/CPlusPlus/CMakeLists.txt source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp source/Plugins/Language/CPlusPlus/LibCxx.h source/Plugins/Language/CPlusPlus/LibCxxBitset.cpp Index: source/Plugins/Language/CPlusPlus/LibCxxBitset.cpp === --- /dev/null +++ source/Plugins/Language/CPlusPlus/LibCxxBitset.cpp @@ -0,0 +1,105 @@ +//===-- LibCxxBitset.cpp *- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===--===// + +#include "LibCxx.h" +#include "lldb/DataFormatters/FormattersHelpers.h" +#include "lldb/Symbol/ClangASTContext.h" +#include "lldb/Target/Target.h" + +using namespace lldb; +using namespace lldb_private; + +namespace { + +class BitsetFrontEnd : public SyntheticChildrenFrontEnd { +public: + BitsetFrontEnd(ValueObject &valobj) : SyntheticChildrenFrontEnd(valobj) { +Update(); + } + + size_t GetIndexOfChildWithName(const ConstString &name) override { +return formatters::ExtractIndexFromString(name.GetCString()); + } + + bool MightHaveChildren() override { return true; } + bool Update() override; + size_t CalculateNumChildren() override { return m_elements.size(); } + ValueObjectSP GetChildAtIndex(size_t idx) override; + +private: + std::vector m_elements; + ValueObjectSP m_first; + ByteOrder m_byte_order; + uint8_t m_byte_size; + CompilerType m_bool_type; +}; +} // namespace + +bool BitsetFrontEnd::Update() { + m_elements.clear(); + m_first.reset(); + + TargetSP target_sp = m_backend.GetTargetSP(); + if (!target_sp) +return false; + + m_byte_order = target_sp->GetArchitecture().GetByteOrder(); + m_byte_size = target_sp->GetArchitecture().GetAddressByteSize(); + size_t capping_size = target_sp->GetMaximumNumberOfChildrenToDisplay(); + + size_t size = 0; + auto value_and_type = + m_backend.GetCompilerType().GetIntegralTemplateArgument(0); + if (value_and_type.second) +size = value_and_type.first.getLimitedValue(capping_size); + + m_bool_type = m_backend.GetCompilerType().GetBasicTypeFromAST(eBasicTypeBool); + m_elements.assign(size, ValueObjectSP()); + + m_first = m_backend.GetChildMemberWithName(ConstString("__first_"), true); + return false; +} + +ValueObjectSP BitsetFrontEnd::GetChildAtIndex(size_t idx) { + if (idx >= m_elements.size() || !m_first) +return ValueObjectSP(); + + if (m_elements[idx]) +return m_elements[idx]; + + ExecutionContext ctx = m_backend.GetExecutionContextRef().Lock(false); + CompilerType type; + ValueObjectSP chunk; + // For small bitsets __first_ is not an array, but a plain size_t. + if (m_first->GetCompilerType().IsArrayType(&type, nullptr, nullptr)) +chunk = m_first->GetChildAtIndex( +idx / type.GetBitSize(ctx.GetBestExecutionContextScope()), true); + else { +type = m_first->GetCompilerType(); +chunk = m_first; + } + if (!type || !chunk) +return ValueObjectSP(); + + size_t chunk_idx = idx % type.GetBitSize(ctx.GetBestExecutionContextScope()); + uint8_t value = !!(chunk->GetValueAsUnsigned(0) & (uint64_t(1) << chunk_idx)); + DataExtractor data(&value, sizeof(value), m_byte_order, m_byte_size); + + m_elements[idx] = CreateValueObjectFromData(llvm::formatv("[{0}]", idx).str(), + data, ctx, m_bool_type); + + return m_elements[idx]; +} + +SyntheticChildrenFrontEnd *formatters::LibcxxBitsetSyntheticFrontEndCreator( +CXXSyntheticChildren *, lldb::ValueObjectSP valobj_sp) { + if (valobj_sp) +return new BitsetFrontEnd(*valobj_sp); + return nullptr; +} Index: source/Plugins/Language/CPlusPlus/LibCxx.h === --- source/Plugins/Language/CPlusPlus/LibCxx.h +++ source/Plugins/Language/CPlusPlus/LibCxx.h @@ -92,6 +92,10 @@ lldb::ByteOrder m_byte_order; }; +SyntheticChildrenFrontEnd * +LibcxxBitsetSyntheticFrontEndCreator(CXXSyntheticChildren *, + lldb::ValueObjectSP); + SyntheticChildrenFrontEnd * LibcxxSharedPtrSyntheticFrontEndCreator(CXXSyntheticChildren *, lldb::ValueObjectSP); Index: source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp ===
[Lldb-commits] [PATCH] D39967: Refactoring of MemoryWrite function
tatyana-krasnukha created this revision. Comments in this function didn't match code. Moved it in right place and grouped cases, that need only WriteMemoryPrivate call, at the top of the function. Applied clang-format. Repository: rL LLVM https://reviews.llvm.org/D39967 Files: source/Target/Process.cpp Index: source/Target/Process.cpp === --- source/Target/Process.cpp +++ source/Target/Process.cpp @@ -129,11 +129,13 @@ nullptr, nullptr, "If true, breakpoints will be ignored during expression evaluation."}, {"unwind-on-error-in-expressions", OptionValue::eTypeBoolean, true, true, - nullptr, nullptr, "If true, errors in expression evaluation will unwind " - "the stack back to the state before the call."}, + nullptr, nullptr, + "If true, errors in expression evaluation will unwind " + "the stack back to the state before the call."}, {"python-os-plugin-path", OptionValue::eTypeFileSpec, false, true, nullptr, - nullptr, "A path to a python OS plug-in module file that contains a " - "OperatingSystemPlugIn class."}, + nullptr, + "A path to a python OS plug-in module file that contains a " + "OperatingSystemPlugIn class."}, {"stop-on-sharedlibrary-events", OptionValue::eTypeBoolean, true, false, nullptr, nullptr, "If true, stop when a shared library is loaded or unloaded."}, @@ -142,8 +144,9 @@ {"memory-cache-line-size", OptionValue::eTypeUInt64, false, 512, nullptr, nullptr, "The memory cache line size"}, {"optimization-warnings", OptionValue::eTypeBoolean, false, true, nullptr, - nullptr, "If true, warn when stopped in code that is optimized where " - "stepping and variable availability may not behave as expected."}, + nullptr, + "If true, warn when stopped in code that is optimized where " + "stepping and variable availability may not behave as expected."}, {nullptr, OptionValue::eTypeInvalid, false, 0, nullptr, nullptr, nullptr}}; enum { @@ -1203,8 +1206,7 @@ process_sp->GetStatus(*stream); process_sp->GetThreadStatus(*stream, only_threads_with_stop_reason, start_frame, num_frames, - num_frames_with_source, - stop_format); + num_frames_with_source, stop_format); if (curr_thread_stop_info_sp) { lldb::addr_t crashing_address; ValueObjectSP valobj_sp = StopInfo::GetCrashingDereference( @@ -1414,7 +1416,7 @@ lldb::pid_t pid, bool exited, int signo, // Zero for no signal int exit_status // Exit value of process if signal is zero -) { +) { Log *log(lldb_private::GetLogIfAnyCategoriesSet(LIBLLDB_LOG_PROCESS)); if (log) log->Printf("Process::SetProcessExitStatus (pid=%" PRIu64 @@ -1741,7 +1743,8 @@ const lldb::ABISP &Process::GetABI() { if (!m_abi_sp) -m_abi_sp = ABI::FindPlugin(shared_from_this(), GetTarget().GetArchitecture()); +m_abi_sp = +ABI::FindPlugin(shared_from_this(), GetTarget().GetArchitecture()); return m_abi_sp; } @@ -2423,65 +2426,64 @@ BreakpointSiteList bp_sites_in_range; - if (m_breakpoint_site_list.FindInRange(addr, addr + size, - bp_sites_in_range)) { + if (!m_breakpoint_site_list.FindInRange(addr, addr + size, + bp_sites_in_range) || + bp_sites_in_range.IsEmpty()) { + // No breakpoint sites overlap -if (bp_sites_in_range.IsEmpty()) - return WriteMemoryPrivate(addr, buf, size, error); -else { - const uint8_t *ubuf = (const uint8_t *)buf; - uint64_t bytes_written = 0; +return WriteMemoryPrivate(addr, buf, size, error); + } - bp_sites_in_range.ForEach([this, addr, size, &bytes_written, &ubuf, - &error](BreakpointSite *bp) -> void { + const uint8_t *ubuf = (const uint8_t *)buf; + uint64_t bytes_written = 0; -if (error.Success()) { - addr_t intersect_addr; - size_t intersect_size; - size_t opcode_offset; - const bool intersects = bp->IntersectsRange( - addr, size, &intersect_addr, &intersect_size, &opcode_offset); - UNUSED_IF_ASSERT_DISABLED(intersects); - assert(intersects); - assert(addr <= intersect_addr && intersect_addr < addr + size); - assert(addr < intersect_addr + intersect_size && - intersect_addr + intersect_size <= addr + size); - assert(opcode_offset + intersect_size <= bp->GetByteSize()); + bp_sites_in_range.ForEach([this, addr, size, &bytes_written, &ubuf, + &error](BreakpointSite *bp) -> void { - // Check for bytes before this breakpoint - const addr_t curr_
[Lldb-commits] [PATCH] D39967: Refactoring of MemoryWrite function
tatyana-krasnukha added inline comments. Comment at: source/Target/Process.cpp:2462 - // We weren't able to write all of the requested bytes, we - // are done looping and will return the number of bytes that - // we have written so far. This comment says that function will return the number of written bytes, but really it will return zero in this case Comment at: source/Target/Process.cpp:2484 // Write any remaining bytes after the last breakpoint if we have any left return 0; // bytes_written; This comment relates to line 2476 here Repository: rL LLVM https://reviews.llvm.org/D39967 ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D39969: Set error status in ObjectFile::LoadInMemory if it is not set
tatyana-krasnukha created this revision. Herald added a subscriber: ki.stfu. When breakpoints intersect a section, process->WriteMemory returns 0 without setting the error, LoadInMemory breaks execution and returns this error, but client code treat it as success. Just added setting of error status for this case. Applied clang-format. Repository: rL LLVM https://reviews.llvm.org/D39969 Files: source/Symbol/ObjectFile.cpp Index: source/Symbol/ObjectFile.cpp === --- source/Symbol/ObjectFile.cpp +++ source/Symbol/ObjectFile.cpp @@ -78,8 +78,8 @@ // and object container plug-ins can use these bytes to see if they // can parse this file. if (file_size > 0) { - data_sp = - DataBufferLLVM::CreateSliceFromPath(file->GetPath(), 512, file_offset); + data_sp = DataBufferLLVM::CreateSliceFromPath(file->GetPath(), 512, +file_offset); data_offset = 0; } } @@ -122,8 +122,8 @@ } // We failed to find any cached object files in the container // plug-ins, so lets read the first 512 bytes and try again below... -data_sp = DataBufferLLVM::CreateSliceFromPath(archive_file.GetPath(), - 512, file_offset); +data_sp = DataBufferLLVM::CreateSliceFromPath( +archive_file.GetPath(), 512, file_offset); } } } @@ -211,7 +211,8 @@ lldb::offset_t file_offset, lldb::offset_t file_size, ModuleSpecList &specs) { - DataBufferSP data_sp = DataBufferLLVM::CreateSliceFromPath(file.GetPath(), 512, file_offset); + DataBufferSP data_sp = + DataBufferLLVM::CreateSliceFromPath(file.GetPath(), 512, file_offset); if (data_sp) { if (file_size == 0) { const lldb::offset_t actual_file_size = file.GetByteSize(); @@ -665,7 +666,6 @@ } Status ObjectFile::LoadInMemory(Target &target, bool set_pc) { - Status error; ProcessSP process = target.CalculateProcess(); if (!process) return Status("No Process"); @@ -675,6 +675,8 @@ SectionList *section_list = GetSectionList(); if (!section_list) return Status("No section in object file"); + + Status error; size_t section_count = section_list->GetNumSections(0); for (size_t i = 0; i < section_count; ++i) { SectionSP section_sp = section_list->GetSectionAtIndex(i); @@ -687,8 +689,13 @@ section_sp->GetSectionData(section_data); lldb::offset_t written = process->WriteMemory( addr, section_data.GetDataStart(), section_data.GetByteSize(), error); - if (written != section_data.GetByteSize()) + if (written != section_data.GetByteSize()) { +if (!error.Fail()) + error.SetErrorStringWithFormat( + "One or more breakpoints intersect section '%s'", + section_sp->GetName().AsCString()); return error; + } } } if (set_pc) { @@ -701,6 +708,4 @@ return error; } -void ObjectFile::RelocateSection(lldb_private::Section *section) -{ -} +void ObjectFile::RelocateSection(lldb_private::Section *section) {} Index: source/Symbol/ObjectFile.cpp === --- source/Symbol/ObjectFile.cpp +++ source/Symbol/ObjectFile.cpp @@ -78,8 +78,8 @@ // and object container plug-ins can use these bytes to see if they // can parse this file. if (file_size > 0) { - data_sp = - DataBufferLLVM::CreateSliceFromPath(file->GetPath(), 512, file_offset); + data_sp = DataBufferLLVM::CreateSliceFromPath(file->GetPath(), 512, +file_offset); data_offset = 0; } } @@ -122,8 +122,8 @@ } // We failed to find any cached object files in the container // plug-ins, so lets read the first 512 bytes and try again below... -data_sp = DataBufferLLVM::CreateSliceFromPath(archive_file.GetPath(), - 512, file_offset); +data_sp = DataBufferLLVM::CreateSliceFromPath( +archive_file.GetPath(), 512, file_offset); } } } @@ -211,7 +211,8 @@ lldb::offset_t file_offset, lldb::offset_t file_size, ModuleSpecList &specs) { - DataBufferSP data_sp = DataBufferLLVM::CreateSliceFromPath(file.GetPath(), 512, file_offset); + DataBufferSP data_sp = + DataBufferLLVM::CreateSliceFromPath(file.GetPath(), 512, file_offset); if (data_sp) { if (file
[Lldb-commits] [lldb] r318079 - Reformat a comment. NFC.
Author: sas Date: Mon Nov 13 12:13:25 2017 New Revision: 318079 URL: http://llvm.org/viewvc/llvm-project?rev=318079&view=rev Log: Reformat a comment. NFC. Modified: lldb/trunk/include/lldb/lldb-private-defines.h Modified: lldb/trunk/include/lldb/lldb-private-defines.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/lldb-private-defines.h?rev=318079&r1=318078&r2=318079&view=diff == --- lldb/trunk/include/lldb/lldb-private-defines.h (original) +++ lldb/trunk/include/lldb/lldb-private-defines.h Mon Nov 13 12:13:25 2017 @@ -13,8 +13,7 @@ #if defined(__cplusplus) // Include Compiler.h here so we don't define LLVM_FALLTHROUGH and then -// Compiler.h -// later tries to redefine it. +// Compiler.h later tries to redefine it. #include "llvm/Support/Compiler.h" #ifndef LLVM_FALLTHROUGH ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D39966: Add a data formatter for libc++ std::bitset
jingham accepted this revision. jingham added a comment. This revision is now accepted and ready to land. Looks fine. Seems like Update doesn't need to grab the bool type on every pass, but I don't think that matters IRL. Thanks for adding this. Comment at: source/Plugins/Language/CPlusPlus/LibCxxBitset.cpp:62 + + m_bool_type = m_backend.GetCompilerType().GetBasicTypeFromAST(eBasicTypeBool); + m_elements.assign(size, ValueObjectSP()); Does this need to be done every time you Update? Couldn't you do this in the constructor instead? This is probably pretty cheap call, so it doesn't matter much, but it seems odd. https://reviews.llvm.org/D39966 ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [PATCH] D39578: Fix a couple of self-assignments using memcpy.
hintonda updated this revision to Diff 122730. hintonda added a comment. - Address comments. https://reviews.llvm.org/D39578 Files: source/Core/RegisterValue.cpp source/Core/Value.cpp Index: source/Core/Value.cpp === --- source/Core/Value.cpp +++ source/Core/Value.cpp @@ -142,6 +142,9 @@ } size_t Value::AppendDataToHostBuffer(const Value &rhs) { + if (this == &rhs) +return 0; + size_t curr_size = m_data_buffer.GetByteSize(); Status error; switch (rhs.GetValueType()) { Index: source/Core/RegisterValue.cpp === --- source/Core/RegisterValue.cpp +++ source/Core/RegisterValue.cpp @@ -539,6 +539,9 @@ } bool RegisterValue::CopyValue(const RegisterValue &rhs) { + if (this == &rhs) +return rhs.m_type == eTypeInvalid ? false : true; + m_type = rhs.m_type; switch (m_type) { case eTypeInvalid: Index: source/Core/Value.cpp === --- source/Core/Value.cpp +++ source/Core/Value.cpp @@ -142,6 +142,9 @@ } size_t Value::AppendDataToHostBuffer(const Value &rhs) { + if (this == &rhs) +return 0; + size_t curr_size = m_data_buffer.GetByteSize(); Status error; switch (rhs.GetValueType()) { Index: source/Core/RegisterValue.cpp === --- source/Core/RegisterValue.cpp +++ source/Core/RegisterValue.cpp @@ -539,6 +539,9 @@ } bool RegisterValue::CopyValue(const RegisterValue &rhs) { + if (this == &rhs) +return rhs.m_type == eTypeInvalid ? false : true; + m_type = rhs.m_type; switch (m_type) { case eTypeInvalid: ___ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] Buildbot numbers for the week of 10/29/2017 - 11/4/2017
Hello everyone, Below are some buildbot numbers for the week of 10/29/2017 - 11/4/2017. Please see the same data in attached csv files: The longest time each builder was red during the week; "Status change ratio" by active builder (percent of builds that changed the builder status from greed to red or from red to green); Count of commits by project; Number of completed builds, failed builds and average build time for successful builds per active builder; Average waiting time for a revision to get build result per active builder (response time). Thanks Galina The longest time each builder was red during the week: buildername| was_red --+-- lldb-windows7-android| 129:25:17 perf-x86_64-penryn-O3-polly-parallel-fast| 83:15:00 perf-x86_64-penryn-O3-polly-unprofitable | 43:41:03 ubuntu-gcc7.1-werror | 37:47:55 llvm-clang-x86_64-expensive-checks-win | 31:43:18 clang-s390x-linux-lnt| 26:03:09 clang-with-lto-ubuntu| 25:40:23 clang-with-thin-lto-ubuntu | 25:25:28 clang-s390x-linux-multistage | 22:49:01 lldb-amd64-ninja-freebsd11 | 22:34:41 clang-with-thin-lto-windows | 20:30:26 clang-s390x-linux| 20:28:29 clang-lld-x86_64-2stage | 20:17:14 clang-ppc64be-linux | 13:32:17 clang-x86_64-debian-fast | 11:45:03 clang-ppc64be-linux-multistage | 11:41:30 llvm-clang-lld-x86_64-debian-fast| 11:10:37 sanitizer-x86_64-linux-bootstrap-ubsan | 10:36:14 clang-ppc64be-linux-lnt | 10:36:08 clang-cmake-x86_64-sde-avx512-linux | 10:29:43 clang-bpf-build | 10:18:17 clang-atom-d525-fedora-rel | 09:54:59 clang-cmake-x86_64-avx2-linux| 09:50:40 sanitizer-ppc64be-linux | 09:30:49 sanitizer-x86_64-linux | 09:27:43 sanitizer-x86_64-linux-autoconf | 07:09:04 clang-cmake-armv7-a15-selfhost | 06:11:00 clang-cuda-build | 05:45:08 clang-cmake-armv7-a15-selfhost-neon | 05:45:07 clang-ppc64le-linux-multistage | 05:40:25 clang-cmake-aarch64-lld | 05:09:32 clang-x86_64-linux-abi-test | 04:53:30 clang-cmake-thumbv7-a15-full-sh | 04:28:07 llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast | 03:51:32 llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast | 03:35:17 clang-x86-windows-msvc2015 | 03:01:05 sanitizer-x86_64-linux-bootstrap | 02:48:18 clang-x86_64-linux-selfhost-modules-2| 02:41:17 clang-x64-ninja-win7 | 02:40:52 reverse-iteration| 02:36:13 sanitizer-x86_64-linux-bootstrap-msan| 02:06:53 clang-cmake-aarch64-full | 02:05:27 sanitizer-x86_64-linux-fast | 02:02:26 clang-ppc64le-linux-lnt | 01:55:53 lld-x86_64-freebsd | 01:54:04 lld-x86_64-darwin13 | 01:50:57 clang-ppc64le-linux | 01:50:37 clang-x86_64-linux-selfhost-modules | 01:39:22 clang-hexagon-elf| 01:14:13 sanitizer-windows| 01:12:31 lldb-x86_64-ubuntu-14.04-buildserver | 01:07:52 lldb-x86_64-darwin-13.4 | 01:07:49 lldb-amd64-ninja-netbsd8 | 01:02:29 libcxx-libcxxabi-x86_64-linux-ubuntu-cxx03 | 00:56:40 clang-cmake-x86_64-avx2-linux-perf | 00:54:05 lldb-x86_64-ubuntu-14.04-cmake | 00:53:04 clang-cmake-armv7-a15-full | 00:50:38 llvm-hexagon-elf | 00:49:44 clang-cmake-aarch64-global-isel | 00:49:27 clang-cmake-aarch64-quick| 00:44:16 clang-cmake-thumbv7-a15 | 00:40:52 clang-cmake-armv7-a15| 00:40:17 sanitizer-x86_64-linux-android | 00:38:29 sanitizer-x86_64-linux-fuzzer| 00:35:35 lldb-x86-windows-msvc2015| 00:32:47 clang-sphinx-docs| 00:10:50 clang-tools-sphinx-docs | 00:10:42 (67 rows) "Status change ratio" by active builder (percent of builds that changed the builder status from greed to red or from red to green):
[Lldb-commits] Buildbot numbers for the week of 10/22/2017 - 10/28/2017
Hello everyone, Below are some buildbot numbers for the week of 10/22/2017 - 10/28/2017. Please see the same data in attached csv files: The longest time each builder was red during the week; "Status change ratio" by active builder (percent of builds that changed the builder status from greed to red or from red to green); Count of commits by project; Number of completed builds, failed builds and average build time for successful builds per active builder; Average waiting time for a revision to get build result per active builder (response time). Thanks Galina The longest time each builder was red during the week: buildername | was_red +- lldb-x86_64-darwin-13.4| 57:06:25 clang-bpf-build| 41:30:07 reverse-iteration | 34:30:37 sanitizer-x86_64-linux | 31:48:17 libcxx-libcxxabi-x86_64-linux-ubuntu-gcc-tot-cxx1z | 28:29:51 libcxx-libcxxabi-x86_64-linux-debian-noexceptions | 21:41:43 ubuntu-gcc7.1-werror | 21:30:43 lldb-x86_64-ubuntu-14.04-cmake | 16:49:30 llvm-clang-x86_64-expensive-checks-win | 14:20:08 clang-cmake-aarch64-quick | 13:02:25 lld-x86_64-win7| 12:40:35 sanitizer-x86_64-linux-fast| 12:17:19 llvm-clang-lld-x86_64-debian-fast | 08:06:40 aosp-O3-polly-before-vectorizer-unprofitable | 06:24:22 clang-x86_64-linux-selfhost-modules-2 | 06:13:09 clang-x86_64-linux-selfhost-modules| 05:59:40 clang-lld-x86_64-2stage| 05:38:46 sanitizer-x86_64-linux-bootstrap-msan | 05:31:44 clang-with-lto-ubuntu | 05:05:14 clang-cmake-aarch64-full | 04:46:23 clang-ppc64be-linux-multistage | 04:23:41 clang-cmake-armv7-a15-selfhost-neon| 04:18:29 clang-with-thin-lto-ubuntu | 04:03:58 llvm-mips-linux| 03:52:04 clang-ppc64be-linux-lnt| 03:41:32 clang-ppc64be-linux| 03:39:44 clang-x64-ninja-win7 | 03:35:48 clang-x86_64-linux-abi-test| 03:35:33 sanitizer-ppc64be-linux| 03:34:38 clang-with-thin-lto-windows| 03:02:41 clang-ppc64le-linux| 03:00:57 clang-cmake-x86_64-avx2-linux | 02:59:49 clang-cmake-x86_64-sde-avx512-linux| 02:58:28 clang-x86-windows-msvc2015 | 02:55:17 lldb-x86_64-ubuntu-14.04-android | 02:44:33 clang-ppc64le-linux-multistage | 02:38:59 clang-ppc64le-linux-lnt| 02:38:35 llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast | 02:38:26 clang-s390x-linux-lnt | 02:37:01 clang-s390x-linux | 02:35:07 clang-cmake-aarch64-global-isel| 02:33:22 clang-cmake-thumbv7-a15| 02:32:09 lldb-windows7-android | 02:15:37 clang-cuda-build | 02:09:15 clang-atom-d525-fedora-rel | 02:08:49 clang-s390x-linux-multistage | 02:06:21 libcxx-libcxxabi-libunwind-x86_64-linux-debian | 01:59:39 sanitizer-x86_64-linux-bootstrap-ubsan | 01:41:16 lldb-x86-windows-msvc2015 | 01:40:55 llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast | 01:39:13 sanitizer-x86_64-linux-bootstrap | 01:37:27 clang-cmake-x86_64-avx2-linux-perf | 01:30:57 lld-x86_64-freebsd | 01:19:21 sanitizer-x86_64-linux-fuzzer | 01:17:25 lld-x86_64-darwin13| 01:08:12 sanitizer-x86_64-linux-android | 01:02:16 lldb-amd64-ninja-netbsd8 | 00:58:21 clang-x86_64-debian-fast | 00:51:37 clang-cmake-armv7-a15-full | 00:50:39 llvm-hexagon-elf | 00:48:42 clang-cmake-armv7-a15 | 00:43:02 clang-hexagon-elf | 00:42:46 lldb-x86_64-ubuntu-14.04-buildserver | 00:40:54 sanitizer-x86_64-linux-autoconf| 00:36:48 polly-arm-linux| 00:32:57 polly-amd64-linux | 00:26:50 sanitizer-windows | 00:11:34 lldb-amd64-ninja-freebs
[Lldb-commits] Buildbot numbers for the last week of 11/5/2017 - 11/11/2017
Hello everyone, Below are some buildbot numbers for the last week of 11/5/2017 - 11/11/2017. Please see the same data in attached csv files: The longest time each builder was red during the week; "Status change ratio" by active builder (percent of builds that changed the builder status from greed to red or from red to green); Count of commits by project; Number of completed builds, failed builds and average build time for successful builds per active builder; Average waiting time for a revision to get build result per active builder (response time). Thanks Galina The longest time each builder was red during the week: buildername | was_red ---+-- clang-ppc64le-linux | 105:44:38 libcxx-libcxxabi-x86_64-linux-ubuntu-gcc-tot-cxx1z| 70:10:09 clang-cmake-thumbv7-a15-full-sh | 52:37:11 clang-cmake-armv7-a15-selfhost| 50:02:47 clang-cmake-x86_64-sde-avx512-linux | 49:10:11 clang-cmake-x86_64-avx2-linux-perf| 48:34:50 clang-cmake-x86_64-avx2-linux | 48:34:19 clang-x86-windows-msvc2015| 46:49:23 llvm-mips-linux | 46:43:58 llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast | 46:24:03 clang-cmake-aarch64-full | 46:20:52 clang-cmake-armv7-a15-full| 45:23:59 clang-x64-ninja-win7 | 45:20:58 clang-cmake-aarch64-global-isel | 44:00:13 clang-cmake-aarch64-quick | 42:51:07 clang-cmake-armv7-a15-selfhost-neon | 41:20:46 clang-cmake-thumbv7-a15 | 40:45:23 clang-cmake-armv7-a15 | 40:22:08 polly-amd64-linux | 30:29:53 polly-arm-linux | 30:18:22 aosp-O3-polly-before-vectorizer-unprofitable | 24:07:02 clang-atom-d525-fedora-rel| 10:47:23 clang-x86_64-linux-abi-test | 10:36:23 ubuntu-gcc7.1-werror | 10:20:34 clang-s390x-linux-multistage | 09:58:03 libcxx-libcxxabi-libunwind-aarch64-linux-noexceptions | 09:43:35 clang-x86_64-linux-selfhost-modules-2 | 08:45:51 clang-x86_64-linux-selfhost-modules | 08:36:15 clang-s390x-linux-lnt | 07:37:46 clang-with-thin-lto-ubuntu| 07:01:54 clang-lld-x86_64-2stage | 06:53:14 sanitizer-x86_64-linux| 06:11:38 clang-with-lto-ubuntu | 06:11:03 lld-x86_64-darwin13 | 05:57:04 libcxx-libcxxabi-x86_64-linux-debian-noexceptions | 05:50:31 clang-cmake-aarch64-lld | 05:43:42 sanitizer-ppc64be-linux | 05:39:57 clang-s390x-linux | 05:38:52 clang-ppc64le-linux-multistage| 05:38:18 lldb-windows7-android | 05:36:08 libcxx-libcxxabi-libunwind-x86_64-linux-debian| 05:33:10 clang-x86_64-debian-fast | 04:58:16 clang-ppc64be-linux-lnt | 04:57:46 llvm-clang-lld-x86_64-debian-fast | 04:33:10 lldb-x86_64-ubuntu-14.04-android | 04:19:54 clang-ppc64le-linux-lnt | 04:19:07 llvm-clang-x86_64-expensive-checks-win| 04:17:34 clang-with-thin-lto-windows | 04:05:12 sanitizer-x86_64-linux-fuzzer | 04:03:04 sanitizer-x86_64-linux-bootstrap-msan | 03:32:52 clang-ppc64be-linux | 03:19:18 clang-cuda-build | 03:14:22 clang-native-arm-lnt | 03:04:31 llvm-hexagon-elf | 03:01:38 clang-hexagon-elf | 03:00:48 clang-ppc64be-linux-multistage| 02:55:48 llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast| 02:53:52 sanitizer-x86_64-linux-android| 02:51:35 libcxx-libcxxabi-x86_64-linux-ubuntu-msan | 02:48:16 perf-x86_64-penryn-O3-polly-parallel-fast | 02:46:43 sanitizer-x86_64-linux-bootstrap-ubsan| 02:46:36 libcxx-libcxxabi-libunwind-x86_64-linux-ubuntu| 02:44:48 libcxx-libcxxabi-libunwind-arm-linux | 02:43:10 libcxx-libcxxabi-x86_64-linux-ubuntu-cxx11| 02:40:29 sanitiz