Add SBDebugger::GetBuildConfiguration and use it to skip an XML test

Summary:
This adds a SBDebugger::GetBuildConfiguration static function, which
returns a SBStructuredData describing the the build parameters of
liblldb. Right now, it just contains one entry: whether we were built
with XML support.

I use the new functionality to skip a test which requires XML support,
but concievably the new function could be useful to other liblldb
clients as well (making sure the library supports the feature they are
about to use).

Reviewers: zturner, jingham, clayborg, davide

Subscribers: lldb-commits

Differential Revision: https://reviews.llvm.org/D43333

llvm-svn: 325504
This commit is contained in:
Pavel Labath 2018-02-19 15:06:28 +00:00
parent 07ea77e3bc
commit f1389e9201
5 changed files with 34 additions and 1 deletions

View File

@ -181,6 +181,8 @@ public:
static const char *StateAsCString(lldb::StateType state); static const char *StateAsCString(lldb::StateType state);
static SBStructuredData GetBuildConfiguration();
static bool StateIsRunningState(lldb::StateType state); static bool StateIsRunningState(lldb::StateType state);
static bool StateIsStoppedState(lldb::StateType state); static bool StateIsStoppedState(lldb::StateType state);

View File

@ -763,3 +763,11 @@ def skipUnlessAddressSanitizer(func):
return "Compiler cannot compile with -fsanitize=address" return "Compiler cannot compile with -fsanitize=address"
return None return None
return skipTestIfFn(is_compiler_with_address_sanitizer)(func) return skipTestIfFn(is_compiler_with_address_sanitizer)(func)
def skipIfXmlSupportMissing(func):
config = lldb.SBDebugger.GetBuildConfiguration()
xml = config.GetValueForKey("xml")
fail_value = True # More likely to notice if something goes wrong
have_xml = xml.GetValueForKey("value").GetBooleanValue(fail_value)
return unittest2.skipIf(not have_xml, "requires xml support")(func)

View File

@ -6,7 +6,7 @@ from gdbclientutils import *
class TestTargetXMLArch(GDBRemoteTestBase): class TestTargetXMLArch(GDBRemoteTestBase):
@skipIf(hostoslist=no_match(lldbplatformutil.getDarwinOSTriples())) @skipIfXmlSupportMissing
@expectedFailureAll(archs=["i386"]) @expectedFailureAll(archs=["i386"])
@skipIfRemote @skipIfRemote
def test(self): def test(self):

View File

@ -320,6 +320,8 @@ public:
static const char * static const char *
StateAsCString (lldb::StateType state); StateAsCString (lldb::StateType state);
static SBStructuredData GetBuildConfiguration();
static bool static bool
StateIsRunningState (lldb::StateType state); StateIsRunningState (lldb::StateType state);

View File

@ -43,6 +43,7 @@
#include "lldb/Core/StreamFile.h" #include "lldb/Core/StreamFile.h"
#include "lldb/Core/StructuredDataImpl.h" #include "lldb/Core/StructuredDataImpl.h"
#include "lldb/DataFormatters/DataVisualization.h" #include "lldb/DataFormatters/DataVisualization.h"
#include "lldb/Host/XML.h"
#include "lldb/Initialization/SystemLifetimeManager.h" #include "lldb/Initialization/SystemLifetimeManager.h"
#include "lldb/Interpreter/Args.h" #include "lldb/Interpreter/Args.h"
#include "lldb/Interpreter/CommandInterpreter.h" #include "lldb/Interpreter/CommandInterpreter.h"
@ -491,6 +492,26 @@ const char *SBDebugger::StateAsCString(StateType state) {
return lldb_private::StateAsCString(state); return lldb_private::StateAsCString(state);
} }
static void AddBoolConfigEntry(StructuredData::Dictionary &dict,
llvm::StringRef name, bool value,
llvm::StringRef description) {
auto entry_up = llvm::make_unique<StructuredData::Dictionary>();
entry_up->AddBooleanItem("value", value);
entry_up->AddStringItem("description", description);
dict.AddItem(name, std::move(entry_up));
}
SBStructuredData SBDebugger::GetBuildConfiguration() {
auto config_up = llvm::make_unique<StructuredData::Dictionary>();
AddBoolConfigEntry(
*config_up, "xml", XMLDocument::XMLEnabled(),
"A boolean value that indicates if XML support is enabled in LLDB");
SBStructuredData data;
data.m_impl_up->SetObjectSP(std::move(config_up));
return data;
}
bool SBDebugger::StateIsRunningState(StateType state) { bool SBDebugger::StateIsRunningState(StateType state) {
Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));