Files
clang-p2996/lldb/source/Plugins/Language/OCaml/OCamlLanguage.cpp
Tamas Berghammer 00adc41370 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
2016-08-02 11:15:55 +00:00

79 lines
1.7 KiB
C++

//===-- 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;
}