diff options
| author | Tamas Berghammer <tberghammer@google.com> | 2016-08-02 11:15:55 +0000 |
|---|---|---|
| committer | Tamas Berghammer <tberghammer@google.com> | 2016-08-02 11:15:55 +0000 |
| commit | 00adc413702e0c7f1fef76ae2e3653b2c2b95b9c (patch) | |
| tree | fa15e5133ebdb92a4ba8e8ed3156393c537393a8 /lldb/source/Plugins/Language/OCaml | |
| parent | adedac68dc300cb87eccfb9735d00325727ac58a (diff) | |
| download | bcm5719-llvm-00adc413702e0c7f1fef76ae2e3653b2c2b95b9c.tar.gz bcm5719-llvm-00adc413702e0c7f1fef76ae2e3653b2c2b95b9c.zip | |
Support for OCaml native debugging
This introduces basic support for debugging OCaml binaries.
Use of the native compiler with DWARF emission support (see
https://github.com/ocaml/ocaml/pull/574) is required.
Available variables are considered as 64 bits unsigned integers,
their interpretation will be left to a OCaml-made debugging layer.
Differential revision: https://reviews.llvm.org/D22132
llvm-svn: 277443
Diffstat (limited to 'lldb/source/Plugins/Language/OCaml')
| -rw-r--r-- | lldb/source/Plugins/Language/OCaml/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | lldb/source/Plugins/Language/OCaml/OCamlLanguage.cpp | 78 | ||||
| -rw-r--r-- | lldb/source/Plugins/Language/OCaml/OCamlLanguage.h | 61 |
3 files changed, 143 insertions, 0 deletions
diff --git a/lldb/source/Plugins/Language/OCaml/CMakeLists.txt b/lldb/source/Plugins/Language/OCaml/CMakeLists.txt new file mode 100644 index 00000000000..e969618d5e0 --- /dev/null +++ b/lldb/source/Plugins/Language/OCaml/CMakeLists.txt @@ -0,0 +1,4 @@ +add_lldb_library(lldbPluginOCamlLanguage + OCamlLanguage.cpp +) + diff --git a/lldb/source/Plugins/Language/OCaml/OCamlLanguage.cpp b/lldb/source/Plugins/Language/OCaml/OCamlLanguage.cpp new file mode 100644 index 00000000000..abc6c8b53d7 --- /dev/null +++ b/lldb/source/Plugins/Language/OCaml/OCamlLanguage.cpp @@ -0,0 +1,78 @@ +//===-- OCamlLanguage.cpp ----------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// C Includes +#include <string.h> +// C++ Includes +#include <functional> +#include <mutex> + +// Other libraries and framework includes +#include "llvm/ADT/StringRef.h" + +// Project includes +#include "OCamlLanguage.h" +#include "lldb/Core/ConstString.h" +#include "lldb/Core/PluginManager.h" +#include "lldb/DataFormatters/DataVisualization.h" +#include "lldb/DataFormatters/FormattersHelpers.h" +#include "lldb/Symbol/OCamlASTContext.h" + +using namespace lldb; +using namespace lldb_private; + +void +OCamlLanguage::Initialize() +{ + PluginManager::RegisterPlugin(GetPluginNameStatic(), "OCaml Language", CreateInstance); +} + +void +OCamlLanguage::Terminate() +{ + PluginManager::UnregisterPlugin(CreateInstance); +} + +lldb_private::ConstString +OCamlLanguage::GetPluginNameStatic() +{ + static ConstString g_name("OCaml"); + return g_name; +} + +lldb_private::ConstString +OCamlLanguage::GetPluginName() +{ + return GetPluginNameStatic(); +} + +uint32_t +OCamlLanguage::GetPluginVersion() +{ + return 1; +} + +Language * +OCamlLanguage::CreateInstance(lldb::LanguageType language) +{ + if (language == eLanguageTypeOCaml) + return new OCamlLanguage(); + return nullptr; +} + +bool +OCamlLanguage::IsNilReference(ValueObject &valobj) +{ + if (!valobj.GetCompilerType().IsReferenceType()) + return false; + + // If we failed to read the value then it is not a nil reference. + return valobj.GetValueAsUnsigned(UINT64_MAX) == 0; +} + diff --git a/lldb/source/Plugins/Language/OCaml/OCamlLanguage.h b/lldb/source/Plugins/Language/OCaml/OCamlLanguage.h new file mode 100644 index 00000000000..33e3761e59a --- /dev/null +++ b/lldb/source/Plugins/Language/OCaml/OCamlLanguage.h @@ -0,0 +1,61 @@ +//===-- OCamlLanguage.h ------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef liblldb_OCamlLanguage_h_ +#define liblldb_OCamlLanguage_h_ + +// C Includes +// C++ Includes +#include <vector> + +// Other libraries and framework includes +#include "llvm/ADT/StringRef.h" + +// Project includes +#include "lldb/Core/ConstString.h" +#include "lldb/Target/Language.h" +#include "lldb/lldb-private.h" + +namespace lldb_private +{ + +class OCamlLanguage : public Language +{ +public: + lldb::LanguageType + GetLanguageType() const override + { + return lldb::eLanguageTypeOCaml; + } + + static void + Initialize(); + + static void + Terminate(); + + static lldb_private::Language * + CreateInstance(lldb::LanguageType language); + + static lldb_private::ConstString + GetPluginNameStatic(); + + ConstString + GetPluginName() override; + + uint32_t + GetPluginVersion() override; + + bool + IsNilReference(ValueObject &valobj) override; +}; + +} // namespace lldb_private + +#endif // liblldb_OCamlLanguage_h_ |

