summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/include/lldb/Core/StringList.h3
-rw-r--r--lldb/source/Core/StringList.cpp19
-rw-r--r--lldb/source/Interpreter/CommandObject.cpp14
-rw-r--r--lldb/test/help/TestHelp.py5
4 files changed, 40 insertions, 1 deletions
diff --git a/lldb/include/lldb/Core/StringList.h b/lldb/include/lldb/Core/StringList.h
index c4edb82ba8c..ec482f696b6 100644
--- a/lldb/include/lldb/Core/StringList.h
+++ b/lldb/include/lldb/Core/StringList.h
@@ -51,6 +51,9 @@ public:
const char *
GetStringAtIndex (size_t idx) const;
+ const char *
+ Join (const char *seperator);
+
void
Clear ();
diff --git a/lldb/source/Core/StringList.cpp b/lldb/source/Core/StringList.cpp
index 1df8b7b9a64..88dd2edb3f8 100644
--- a/lldb/source/Core/StringList.cpp
+++ b/lldb/source/Core/StringList.cpp
@@ -95,6 +95,25 @@ StringList::GetStringAtIndex (size_t idx) const
return NULL;
}
+const char *
+StringList::Join (const char *separator)
+{
+ uint32_t size = GetSize();
+ if (size == 0)
+ return "";
+ if (size == 1)
+ return GetStringAtIndex(0);
+
+ std::string buf;
+ for (uint32_t i = 0; i < size; ++i)
+ {
+ if (i > 0)
+ buf.append(separator);
+ buf.append(GetStringAtIndex(i));
+ }
+ return buf.c_str();;
+}
+
void
StringList::Clear ()
{
diff --git a/lldb/source/Interpreter/CommandObject.cpp b/lldb/source/Interpreter/CommandObject.cpp
index a087eca1eec..c86bb5e9f7e 100644
--- a/lldb/source/Interpreter/CommandObject.cpp
+++ b/lldb/source/Interpreter/CommandObject.cpp
@@ -17,6 +17,7 @@
#include <ctype.h>
#include "lldb/Core/Address.h"
+#include "lldb/Core/ArchSpec.h"
#include "lldb/Interpreter/Options.h"
// These are for the Sourcename completers.
@@ -845,13 +846,24 @@ CommandObject::GetArgumentDescriptionAsCString (const lldb::CommandArgumentType
return NULL;
}
+static
+const char *arch_helper()
+{
+ StringList archs;
+ ArchSpec::AutoComplete(NULL, archs);
+ StreamString ss;
+ ss.Printf("These are the supported architecture names:\n");
+ ss.Printf("%s\n", archs.Join("\n"));
+ return ss.GetData();
+}
+
CommandObject::ArgumentTableEntry
CommandObject::g_arguments_data[] =
{
{ eArgTypeAddress, "address", CommandCompletions::eNoCompletion, { NULL, false }, "A valid address in the target program's execution space." },
{ eArgTypeAliasName, "alias-name", CommandCompletions::eNoCompletion, { NULL, false }, "The name of an abbreviation (alias) for a debugger command." },
{ eArgTypeAliasOptions, "options-for-aliased-command", CommandCompletions::eNoCompletion, { NULL, false }, "Command options to be used as part of an alias (abbreviation) definition. (See 'help commands alias' for more information.)" },
- { eArgTypeArchitecture, "arch", CommandCompletions::eArchitectureCompletion, { NULL, false }, "The architecture name, e.g. i386 or x86_64." },
+ { eArgTypeArchitecture, "arch", CommandCompletions::eArchitectureCompletion, { arch_helper, true }, "The architecture name, e.g. i386 or x86_64." },
{ eArgTypeBoolean, "boolean", CommandCompletions::eNoCompletion, { NULL, false }, "A Boolean value: 'true' or 'false'" },
{ eArgTypeBreakpointID, "breakpt-id", CommandCompletions::eNoCompletion, { BreakpointIDHelpTextCallback, false }, NULL },
{ eArgTypeBreakpointIDRange, "breakpt-id-list", CommandCompletions::eNoCompletion, { BreakpointIDRangeHelpTextCallback, false }, NULL },
diff --git a/lldb/test/help/TestHelp.py b/lldb/test/help/TestHelp.py
index 6ad976ceb81..736a92f1f82 100644
--- a/lldb/test/help/TestHelp.py
+++ b/lldb/test/help/TestHelp.py
@@ -65,6 +65,11 @@ class HelpCommandTestCase(TestBase):
return None
+ def test_help_arch(self):
+ """Test 'help arch' which should list of supported architectures."""
+ self.expect("help arch",
+ substrs = ['arm', 'x86_64', 'i386'])
+
def test_help_version(self):
"""Test 'help version' and 'version' commands."""
self.expect("help version",
OpenPOWER on IntegriCloud