Add language option in -gdb-show command (MI)
authorIlia K <ki.stfu@gmail.com>
Tue, 28 Apr 2015 12:51:16 +0000 (12:51 +0000)
committerIlia K <ki.stfu@gmail.com>
Tue, 28 Apr 2015 12:51:16 +0000 (12:51 +0000)
Summary:
Add language option in -gdb-show command + test:
```
$ bin/lldb-mi ~/p/hello
[...]
b main
[...]
r
[...]
(gdb)
-gdb-show language
^done,value="c++"
(gdb)
quit
```

Test Plan: ./dotest.py -v --executable $BUILDDIR/bin/lldb tools/lldb-mi/

Reviewers: abidh, granata.enrico, jingham, clayborg

Reviewed By: clayborg

Subscribers: lldb-commits, jingham, granata.enrico, clayborg, abidh

Differential Revision: http://reviews.llvm.org/D9279

llvm-svn: 235983

lldb/include/lldb/API/SBDefines.h
lldb/include/lldb/API/SBLanguageRuntime.h [new file with mode: 0644]
lldb/scripts/Python/build-swig-Python.sh
lldb/scripts/Python/buildSwigPython.py
lldb/scripts/interface/SBLanguageRuntime.i [new file with mode: 0644]
lldb/scripts/lldb.swig
lldb/source/API/CMakeLists.txt
lldb/source/API/SBLanguageRuntime.cpp [new file with mode: 0644]
lldb/test/tools/lldb-mi/TestMiGdbSetShow.py
lldb/tools/lldb-mi/MICmdCmdGdbShow.cpp
lldb/tools/lldb-mi/MICmdCmdGdbShow.h

index aa87da9f554c59093263fb8b212285ebb583b71c..09bea502dd01e06a27e67d57fb62b9c78cd7b4f7 100644 (file)
@@ -55,6 +55,7 @@ class LLDB_API SBFunction;
 class LLDB_API SBHostOS;
 class LLDB_API SBInstruction;
 class LLDB_API SBInstructionList;
+class LLDB_API SBLanguageRuntime;
 class LLDB_API SBLaunchInfo;
 class LLDB_API SBLineEntry;
 class LLDB_API SBListener;
diff --git a/lldb/include/lldb/API/SBLanguageRuntime.h b/lldb/include/lldb/API/SBLanguageRuntime.h
new file mode 100644 (file)
index 0000000..898604c
--- /dev/null
@@ -0,0 +1,29 @@
+//===-- SBLanguageRuntime.h -------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_SBLanguageRuntime_h_
+#define LLDB_SBLanguageRuntime_h_
+
+#include "lldb/API/SBDefines.h"
+
+namespace lldb {
+
+class SBLanguageRuntime
+{
+public:
+    static lldb::LanguageType
+    GetLanguageTypeFromString (const char *string);
+    
+    static const char *
+    GetNameForLanguageType (lldb::LanguageType language);
+};
+
+} // namespace lldb
+
+#endif // LLDB_SBLanguageRuntime_h_
index bedd4def2999983897122777fc38c7ea4d877886..6603a626cd0f2e0c1bc51382c69c08629408ff86 100755 (executable)
@@ -100,6 +100,7 @@ HEADER_FILES="${SRC_ROOT}/include/lldb/lldb.h"\
 " ${SRC_ROOT}/include/lldb/API/SBHostOS.h"\
 " ${SRC_ROOT}/include/lldb/API/SBInstruction.h"\
 " ${SRC_ROOT}/include/lldb/API/SBInstructionList.h"\
+" ${SRC_ROOT}/include/lldb/API/SBLanguageRuntime.h"\
 " ${SRC_ROOT}/include/lldb/API/SBLaunchInfo.h"\
 " ${SRC_ROOT}/include/lldb/API/SBLineEntry.h"\
 " ${SRC_ROOT}/include/lldb/API/SBListener.h"\
@@ -154,6 +155,7 @@ INTERFACE_FILES="${SRC_ROOT}/scripts/interface/SBAddress.i"\
 " ${SRC_ROOT}/scripts/interface/SBHostOS.i"\
 " ${SRC_ROOT}/scripts/interface/SBInstruction.i"\
 " ${SRC_ROOT}/scripts/interface/SBInstructionList.i"\
+" ${SRC_ROOT}/scripts/interface/SBLanguageRuntime.i"\
 " ${SRC_ROOT}/scripts/interface/SBLaunchInfo.i"\
 " ${SRC_ROOT}/scripts/interface/SBLineEntry.i"\
 " ${SRC_ROOT}/scripts/interface/SBListener.i"\
index 9d9f1a4694eea65dcd75be16a1b91b231d50858a..b4623dbed1722af10f5a54f86a1fb0c07373f6cc 100644 (file)
@@ -97,6 +97,7 @@ def get_header_files( vDictArgs ):
                                                "/include/lldb/API/SBInputReader.h",
                                                "/include/lldb/API/SBInstruction.h",
                                                "/include/lldb/API/SBInstructionList.h",
+                                               "/include/lldb/API/SBLanguageRuntime.h",
                                                "/include/lldb/API/SBLaunchInfo.h",
                                                "/include/lldb/API/SBLineEntry.h",
                                                "/include/lldb/API/SBListener.h",
@@ -175,6 +176,7 @@ def get_interface_files( vDictArgs ):
                                                "/scripts/interface/SBInputReader.i",
                                                "/scripts/interface/SBInstruction.i",
                                                "/scripts/interface/SBInstructionList.i",
+                                               "/scripts/interface/SBLanguageRuntime.i",
                                                "/scripts/interface/SBLaunchInfo.i",
                                                "/scripts/interface/SBLineEntry.i",
                                                "/scripts/interface/SBListener.i",
diff --git a/lldb/scripts/interface/SBLanguageRuntime.i b/lldb/scripts/interface/SBLanguageRuntime.i
new file mode 100644 (file)
index 0000000..95153ba
--- /dev/null
@@ -0,0 +1,22 @@
+//===-- SWIG Interface for SBLanguageRuntime --------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+namespace lldb {
+
+class SBLanguageRuntime
+{
+public:
+    static lldb::LanguageType
+    GetLanguageTypeFromString (const char *string);
+    
+    static const char *
+    GetNameForLanguageType (lldb::LanguageType language);
+};
+
+} // namespace lldb
index 265e547a8664e72b670c28a18c0b5955a02acbd5..517c0b47cb2c41b23dbf66869778fb9e22ce56fb 100644 (file)
@@ -76,6 +76,7 @@ import os
 #include "lldb/API/SBHostOS.h"
 #include "lldb/API/SBInstruction.h"
 #include "lldb/API/SBInstructionList.h"
+#include "lldb/API/SBLanguageRuntime.h"
 #include "lldb/API/SBLaunchInfo.h"
 #include "lldb/API/SBLineEntry.h"
 #include "lldb/API/SBListener.h"
@@ -153,6 +154,7 @@ import os
 %include "./interface/SBHostOS.i"
 %include "./interface/SBInstruction.i"
 %include "./interface/SBInstructionList.i"
+%include "./interface/SBLanguageRuntime.i"
 %include "./interface/SBLaunchInfo.i"
 %include "./interface/SBLineEntry.i"
 %include "./interface/SBListener.i"
index e26413f759b70d842c41af7955d8bf4cf5d0c99c..121d742da915724ae618fea0272093ad1aacdd1e 100644 (file)
@@ -33,6 +33,7 @@ add_lldb_library(liblldb SHARED
   SBHostOS.cpp
   SBInstruction.cpp
   SBInstructionList.cpp
+  SBLanguageRuntime.cpp
   SBLaunchInfo.cpp
   SBLineEntry.cpp
   SBListener.cpp
diff --git a/lldb/source/API/SBLanguageRuntime.cpp b/lldb/source/API/SBLanguageRuntime.cpp
new file mode 100644 (file)
index 0000000..93a54cd
--- /dev/null
@@ -0,0 +1,26 @@
+//===-- SBLanguageRuntime.cpp -----------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "lldb/API/SBLanguageRuntime.h"
+#include "lldb/Target/LanguageRuntime.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+lldb::LanguageType
+SBLanguageRuntime::GetLanguageTypeFromString (const char *string)
+{
+    return LanguageRuntime::GetLanguageTypeFromString(string);
+}
+
+const char *
+SBLanguageRuntime::GetNameForLanguageType (lldb::LanguageType language)
+{
+    return LanguageRuntime::GetNameForLanguageType(language);
+}
index b7d1422081068088ca259f1e1e95f2fa8cb4054a..4c7df3feaf0582f44c7a2b85e515fc40e6fd41a1 100644 (file)
@@ -96,6 +96,29 @@ class MiGdbSetShowTestCase(lldbmi_testcase.MiTestCaseBase):
         self.runCmd("-gdb-show target-async")
         self.expect("\^done,value=\"on\"")
 
+    @lldbmi_test
+    @expectedFailureWindows("llvm.org/pr22274: need a pexpect replacement for windows")
+    @skipIfFreeBSD # llvm.org/pr22411: Failure presumably due to known thread races
+    def test_lldbmi_gdb_show_language(self):
+        """Test that 'lldb-mi --interpreter' can get current language."""
+
+        self.spawnLldbMi(args = None)
+
+        # Load executable
+        self.runCmd("-file-exec-and-symbols %s" % self.myexe)
+        self.expect("\^done")
+
+        # Run to main
+        self.runCmd("-break-insert -f main")
+        self.expect("\^done,bkpt={number=\"1\"")
+        self.runCmd("-exec-run")
+        self.expect("\^running")
+        self.expect("\*stopped,reason=\"breakpoint-hit\"")
+
+        # Test that -gdb-show language gets current language
+        self.runCmd("-gdb-show language")
+        self.expect("\^done,value=\"c\+\+\"")
+
     @lldbmi_test
     @expectedFailureWindows("llvm.org/pr22274: need a pexpect replacement for windows")
     @unittest2.expectedFailure("-gdb-set ignores unknown properties")
index dd7428851e117b46c20e8a008242c5d7d66fd872..f1f40ccbed1a4f30aae541b85b7ceb5c831305f3 100644 (file)
@@ -9,6 +9,12 @@
 
 // Overview:    CMICmdCmdGdbShow implementation.
 
+// Third party headers:
+#include "lldb/API/SBCompileUnit.h"
+#include "lldb/API/SBFrame.h"
+#include "lldb/API/SBLanguageRuntime.h"
+#include "lldb/API/SBThread.h"
+
 // In-house headers:
 #include "MICmdCmdGdbShow.h"
 #include "MICmnMIResultRecord.h"
@@ -22,6 +28,7 @@
 const CMICmdCmdGdbShow::MapGdbOptionNameToFnGdbOptionPtr_t CMICmdCmdGdbShow::ms_mapGdbOptionNameToFnGdbOptionPtr = {
     {"target-async", &CMICmdCmdGdbShow::OptionFnTargetAsync},
     {"print", &CMICmdCmdGdbShow::OptionFnPrint},
+    {"language", &CMICmdCmdGdbShow::OptionFnLanguage},
     {"fallback", &CMICmdCmdGdbShow::OptionFnFallback}};
 
 //++ ------------------------------------------------------------------------------------
@@ -286,6 +293,31 @@ CMICmdCmdGdbShow::OptionFnPrint(const CMIUtilString::VecString_t &vrWords)
     return MIstatus::success;
 }
 
+//++ ------------------------------------------------------------------------------------
+// Details: Carry out work to complete the GDB show option 'language' to prepare
+//          and send back the requested information.
+// Type:    Method.
+// Args:    vrWords - (R) List of additional parameters used by this option.
+// Return:  MIstatus::success - Function succeeded.
+//          MIstatus::failure - Function failed.
+// Throws:  None.
+//--
+bool
+CMICmdCmdGdbShow::OptionFnLanguage(const CMIUtilString::VecString_t &vrWords)
+{
+    MIunused(vrWords);
+
+    // Get current language
+    CMICmnLLDBDebugSessionInfo &rSessionInfo(CMICmnLLDBDebugSessionInfo::Instance());
+    lldb::SBThread sbThread = rSessionInfo.GetProcess().GetSelectedThread();
+    const lldb::SBFrame sbFrame = sbThread.GetSelectedFrame();
+    lldb::SBCompileUnit sbCompileUnit = sbFrame.GetCompileUnit();
+    const lldb::LanguageType eLanguageType = sbCompileUnit.GetLanguage();
+
+    m_strValue = lldb::SBLanguageRuntime::GetNameForLanguageType(eLanguageType);
+    return MIstatus::success;
+}
+
 //++ ------------------------------------------------------------------------------------
 // Details: Carry out work to complete the GDB show option to prepare and send back the
 //          requested information.
index 3935e24fe2658634bfa208cf2992d5977842a72a..5cb4cb58f8097ce8fe20f0ddbc29459302f5fa3f 100644 (file)
@@ -68,6 +68,7 @@ class CMICmdCmdGdbShow : public CMICmdBase
     bool GetOptionFn(const CMIUtilString &vrGdbOptionName, FnGdbOptionPtr &vrwpFn) const;
     bool OptionFnTargetAsync(const CMIUtilString::VecString_t &vrWords);
     bool OptionFnPrint(const CMIUtilString::VecString_t &vrWords);
+    bool OptionFnLanguage(const CMIUtilString::VecString_t &vrWords);
     bool OptionFnFallback(const CMIUtilString::VecString_t &vrWords);
 
     // Attributes: