wallace created this revision.
wallace added reviewers: labath, clayborg.
Herald added a project: LLDB.
Herald added a subscriber: lldb-commits.
wallace updated this revision to Diff 254990.
wallace edited the summary of this revision.
wallace added a comment.
improve description
@labath raised a concern on the way I was skipping this test. I think that was
fair and I found a better way.
Now I'm skipping if the Intel features library is not present and if the
processor-trace command doesn't exist.
It's worth mentioning that the Intel library is a collection of two features:
intel-mpx and intel-pt. Intel PT is optional and has to be enabled at
configuration step.
I had to add ExistsUserCommand to the CommandInterpreter API.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D77452
Files:
lldb/bindings/interface/SBCommandInterpreter.i
lldb/include/lldb/API/SBCommandInterpreter.h
lldb/source/API/SBCommandInterpreter.cpp
lldb/test/API/tools/intel-features/intel-pt/test/TestIntelPTSimpleBinary.py
Index: lldb/test/API/tools/intel-features/intel-pt/test/TestIntelPTSimpleBinary.py
===================================================================
--- lldb/test/API/tools/intel-features/intel-pt/test/TestIntelPTSimpleBinary.py
+++ lldb/test/API/tools/intel-features/intel-pt/test/TestIntelPTSimpleBinary.py
@@ -14,22 +14,26 @@
mydir = TestBase.compute_mydir(__file__)
NO_DEBUG_INFO_TESTCASE = True
+ def setUp(self):
+ TestBase.setUp(self)
+
+ plugin_so = "liblldbIntelFeatures.so"
+ plugin_path = os.path.join(os.environ["LLDB_IMPLIB_DIR"], plugin_so)
+ if not os.path.exists(plugin_path):
+ self.skipTest("Intel PT plugin %s missing." % (plugin_so))
+
+ self.runCmd("plugin load " + plugin_path)
+ if not self.dbg.GetCommandInterpreter().UserCommandExists("processor-trace"):
+ self.skipTest("%s was built without Intel PT support" % (plugin_so))
+ # This could happen if the user has intel-mpx support but not intel-pt.
+
@skipIf(oslist=no_match(['linux']))
@skipIf(archs=no_match(['i386', 'x86_64']))
@skipIfRemote
def test_basic_flow(self):
"""Test collection, decoding, and dumping instructions"""
- if os.environ.get('TEST_INTEL_PT') != '1':
- self.skipTest("The environment variable TEST_INTEL_PT=1 is needed to run this test.")
-
- lldb_exec_dir = os.environ["LLDB_IMPLIB_DIR"]
- lldb_lib_dir = os.path.join(lldb_exec_dir, os.pardir, "lib")
- plugin_file = os.path.join(lldb_lib_dir, "liblldbIntelFeatures.so")
self.build()
-
- self.runCmd("plugin load " + plugin_file)
-
exe = self.getBuildArtifact("a.out")
lldbutil.run_to_name_breakpoint(self, "main", exe_name=exe)
# We start tracing from main
Index: lldb/source/API/SBCommandInterpreter.cpp
===================================================================
--- lldb/source/API/SBCommandInterpreter.cpp
+++ lldb/source/API/SBCommandInterpreter.cpp
@@ -216,6 +216,14 @@
: false);
}
+bool SBCommandInterpreter::UserCommandExists(const char *cmd) {
+ LLDB_RECORD_METHOD(bool, SBCommandInterpreter, UserCommandExists,
+ (const char *), cmd);
+
+ return (((cmd != nullptr) && IsValid()) ? m_opaque_ptr->UserCommandExists(cmd)
+ : false);
+}
+
bool SBCommandInterpreter::AliasExists(const char *cmd) {
LLDB_RECORD_METHOD(bool, SBCommandInterpreter, AliasExists, (const char *),
cmd);
@@ -874,6 +882,8 @@
LLDB_REGISTER_METHOD_CONST(bool, SBCommandInterpreter, operator bool, ());
LLDB_REGISTER_METHOD(bool, SBCommandInterpreter, CommandExists,
(const char *));
+ LLDB_REGISTER_METHOD(bool, SBCommandInterpreter, UserCommandExists,
+ (const char *));
LLDB_REGISTER_METHOD(bool, SBCommandInterpreter, AliasExists,
(const char *));
LLDB_REGISTER_METHOD(bool, SBCommandInterpreter, IsActive, ());
Index: lldb/include/lldb/API/SBCommandInterpreter.h
===================================================================
--- lldb/include/lldb/API/SBCommandInterpreter.h
+++ lldb/include/lldb/API/SBCommandInterpreter.h
@@ -91,8 +91,28 @@
bool IsValid() const;
+ /// Determine whether a command exists in this CommandInterpreter.
+ ///
+ /// For commands registered using the LLDB API, see UserCommandExists
+ ///
+ /// \param[in] cmd
+ /// The command to look up.
+ ///
+ /// \return
+ /// \b true if the provided command exists, \b false otherwise.
bool CommandExists(const char *cmd);
+ /// Determine whether a user command exists in this CommandInterpreter.
+ /// Users commands are the ones registered using the LLDB API and are not
+ /// provided by default in LLDB.
+ ///
+ /// \param[in] cmd
+ /// The command to look up.
+ ///
+ /// \return
+ /// \b true if the provided command exists, \b false otherwise.
+ bool UserCommandExists(const char *cmd);
+
bool AliasExists(const char *cmd);
lldb::SBBroadcaster GetBroadcaster();
Index: lldb/bindings/interface/SBCommandInterpreter.i
===================================================================
--- lldb/bindings/interface/SBCommandInterpreter.i
+++ lldb/bindings/interface/SBCommandInterpreter.i
@@ -169,6 +169,9 @@
bool
CommandExists (const char *cmd);
+ bool
+ UserCommandExists (const char *cmd);
+
bool
AliasExists (const char *cmd);
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits