It is failing because the new files have to be added to the xcode project. Currently I don't have a Mac around to do it but if nobody fixes it then I will try to find one.<div><br></div><div>Tamás<br><br><div class="gmail_quote"><div dir="ltr">On Wed, 3 Aug 2016, 21:17 Tim Hammerquist, <<a href="mailto:penryu@gmail.com">penryu@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Tamas,<div><br></div><div>It looks like the LLDB Build and Check job started failing around the time of this commit. You can see the error at this link:</div><div><br></div><div><a href="http://lab.llvm.org:8080/green/job/lldb_build_test/19751/consoleFull#-1586822805dd1929ea-7054-4089-b7ef-4624c3781fa4" target="_blank">http://lab.llvm.org:8080/green/job/lldb_build_test/19751/consoleFull#-1586822805dd1929ea-7054-4089-b7ef-4624c3781fa4</a><br></div><div><br></div><div>Could you take a look?</div><div><br></div><div>Thanks,</div><div>-Tim</div><div><br></div></div><div class="gmail_extra"></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Aug 2, 2016 at 4:15 AM, Tamas Berghammer via lldb-commits <span dir="ltr"><<a href="mailto:lldb-commits@lists.llvm.org" target="_blank">lldb-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: tberghammer<br>
Date: Tue Aug 2 06:15:55 2016<br>
New Revision: 277443<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=277443&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=277443&view=rev</a><br>
Log:<br>
Support for OCaml native debugging<br>
<br>
This introduces basic support for debugging OCaml binaries.<br>
Use of the native compiler with DWARF emission support (see<br>
<a href="https://github.com/ocaml/ocaml/pull/574" rel="noreferrer" target="_blank">https://github.com/ocaml/ocaml/pull/574</a>) is required.<br>
<br>
Available variables are considered as 64 bits unsigned integers,<br>
their interpretation will be left to a OCaml-made debugging layer.<br>
<br>
Differential revision: <a href="https://reviews.llvm.org/D22132" rel="noreferrer" target="_blank">https://reviews.llvm.org/D22132</a><br>
<br>
Added:<br>
lldb/trunk/include/lldb/Symbol/OCamlASTContext.h<br>
lldb/trunk/source/Plugins/Language/OCaml/<br>
lldb/trunk/source/Plugins/Language/OCaml/CMakeLists.txt<br>
lldb/trunk/source/Plugins/Language/OCaml/OCamlLanguage.cpp<br>
lldb/trunk/source/Plugins/Language/OCaml/OCamlLanguage.h<br>
lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserOCaml.cpp<br>
lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserOCaml.h<br>
lldb/trunk/source/Symbol/OCamlASTContext.cpp<br>
Modified:<br>
lldb/trunk/cmake/LLDBDependencies.cmake<br>
lldb/trunk/include/lldb/Symbol/TypeSystem.h<br>
lldb/trunk/source/API/SystemInitializerFull.cpp<br>
lldb/trunk/source/Plugins/Language/CMakeLists.txt<br>
lldb/trunk/source/Plugins/SymbolFile/DWARF/CMakeLists.txt<br>
lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h<br>
lldb/trunk/source/Symbol/CMakeLists.txt<br>
<br>
Modified: lldb/trunk/cmake/LLDBDependencies.cmake<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/cmake/LLDBDependencies.cmake?rev=277443&r1=277442&r2=277443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/cmake/LLDBDependencies.cmake?rev=277443&r1=277442&r2=277443&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/cmake/LLDBDependencies.cmake (original)<br>
+++ lldb/trunk/cmake/LLDBDependencies.cmake Tue Aug 2 06:15:55 2016<br>
@@ -27,6 +27,7 @@ set( LLDB_USED_LIBS<br>
lldbPluginJavaLanguage<br>
lldbPluginObjCLanguage<br>
lldbPluginObjCPlusPlusLanguage<br>
+ lldbPluginOCamlLanguage<br>
<br>
lldbPluginObjectFileELF<br>
lldbPluginObjectFileJIT<br>
<br>
Added: lldb/trunk/include/lldb/Symbol/OCamlASTContext.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/OCamlASTContext.h?rev=277443&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/OCamlASTContext.h?rev=277443&view=auto</a><br>
==============================================================================<br>
--- lldb/trunk/include/lldb/Symbol/OCamlASTContext.h (added)<br>
+++ lldb/trunk/include/lldb/Symbol/OCamlASTContext.h Tue Aug 2 06:15:55 2016<br>
@@ -0,0 +1,355 @@<br>
+//===-- OCamlASTContext.h ------------------------------------------*- C++ -*-===//<br>
+//<br>
+// The LLVM Compiler Infrastructure<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===----------------------------------------------------------------------===//<br>
+<br>
+#ifndef liblldb_OCamlASTContext_h_<br>
+#define liblldb_OCamlASTContext_h_<br>
+<br>
+// C Includes<br>
+// C++ Includes<br>
+#include <map><br>
+#include <memory><br>
+#include <set><br>
+#include <string><br>
+#include <vector><br>
+<br>
+// Other libraries and framework includes<br>
+// Project includes<br>
+#include "lldb/Core/ConstString.h"<br>
+#include "lldb/Symbol/TypeSystem.h"<br>
+#include "lldb/Symbol/CompilerType.h"<br>
+<br>
+namespace lldb_private<br>
+{<br>
+<br>
+class OCamlASTContext : public TypeSystem<br>
+{<br>
+ public:<br>
+ class OCamlType;<br>
+ typedef std::map<ConstString, std::unique_ptr<OCamlType>> OCamlTypeMap;<br>
+<br>
+ OCamlASTContext();<br>
+ ~OCamlASTContext() override;<br>
+<br>
+ ConstString<br>
+ GetPluginName() override;<br>
+<br>
+ uint32_t<br>
+ GetPluginVersion() override;<br>
+<br>
+ static ConstString<br>
+ GetPluginNameStatic ();<br>
+<br>
+ static lldb::TypeSystemSP<br>
+ CreateInstance (lldb::LanguageType language, Module *module, Target *target);<br>
+<br>
+ static void<br>
+ EnumerateSupportedLanguages(std::set<lldb::LanguageType> &languages_for_types,<br>
+ std::set<lldb::LanguageType> &languages_for_expressions);<br>
+<br>
+ static void<br>
+ Initialize ();<br>
+<br>
+ static void<br>
+ Terminate ();<br>
+<br>
+ DWARFASTParser *GetDWARFParser() override;<br>
+<br>
+ void<br>
+ SetAddressByteSize(int byte_size)<br>
+ {<br>
+ m_pointer_byte_size = byte_size;<br>
+ }<br>
+<br>
+ static bool classof(const TypeSystem *ts)<br>
+ {<br>
+ return ts->getKind() == TypeSystem::eKindOCaml;<br>
+ }<br>
+<br>
+ ConstString<br>
+ DeclGetName (void *opaque_decl) override<br>
+ {<br>
+ return ConstString();<br>
+ }<br>
+<br>
+ bool<br>
+ DeclContextIsStructUnionOrClass(void *opaque_decl_ctx) override<br>
+ {<br>
+ return false;<br>
+ }<br>
+<br>
+ ConstString<br>
+ DeclContextGetName(void *opaque_decl_ctx) override<br>
+ {<br>
+ return ConstString();<br>
+ }<br>
+<br>
+ ConstString<br>
+ DeclContextGetScopeQualifiedName(void *opaque_decl_ctx) override<br>
+ {<br>
+ return ConstString();<br>
+ }<br>
+<br>
+ bool<br>
+ DeclContextIsClassMethod(void *opaque_decl_ctx, lldb::LanguageType *language_ptr,<br>
+ bool *is_instance_method_ptr,<br>
+ ConstString *language_object_name_ptr) override<br>
+ {<br>
+ return false;<br>
+ }<br>
+<br>
+ bool SupportsLanguage (lldb::LanguageType language) override;<br>
+ uint32_t GetPointerByteSize() override;<br>
+<br>
+ bool<br>
+ IsArrayType(lldb::opaque_compiler_type_t type, CompilerType *element_type,<br>
+ uint64_t *size, bool *is_incomplete) override;<br>
+<br>
+ bool IsAggregateType(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ bool IsCharType(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ bool IsCompleteType(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ bool IsDefined(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ bool IsFloatingPointType(lldb::opaque_compiler_type_t type, uint32_t &count, bool &is_complex) override;<br>
+<br>
+ bool IsFunctionType(lldb::opaque_compiler_type_t type, bool *is_variadic_ptr = nullptr) override;<br>
+<br>
+ size_t GetNumberOfFunctionArguments(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ CompilerType GetFunctionArgumentAtIndex(lldb::opaque_compiler_type_t type, const size_t index) override;<br>
+<br>
+ bool IsFunctionPointerType(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ bool IsBlockPointerType (lldb::opaque_compiler_type_t type,<br>
+ CompilerType *function_pointer_type_ptr) override;<br>
+<br>
+ bool<br>
+ IsIntegerType(lldb::opaque_compiler_type_t type, bool &is_signed) override;<br>
+<br>
+ bool<br>
+ IsPossibleDynamicType(lldb::opaque_compiler_type_t type,<br>
+ CompilerType *target_type,<br>
+ bool check_cplusplus, bool check_objc) override;<br>
+<br>
+ bool IsPointerType(lldb::opaque_compiler_type_t type, CompilerType *pointee_type = nullptr) override;<br>
+<br>
+ bool IsScalarType(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ bool IsVoidType(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ bool GetCompleteType(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ ConstString GetTypeName(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ uint32_t<br>
+ GetTypeInfo(lldb::opaque_compiler_type_t type,<br>
+ CompilerType *pointee_or_element_compiler_type = nullptr) override;<br>
+<br>
+ lldb::LanguageType GetMinimumLanguage(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ lldb::TypeClass GetTypeClass(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ CompilerType<br>
+ GetArrayElementType(lldb::opaque_compiler_type_t type, uint64_t *stride = nullptr) override;<br>
+<br>
+ CompilerType GetCanonicalType(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ int GetFunctionArgumentCount(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ CompilerType<br>
+ GetFunctionArgumentTypeAtIndex(lldb::opaque_compiler_type_t type, size_t idx) override;<br>
+<br>
+ CompilerType<br>
+ GetFunctionReturnType(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ size_t<br>
+ GetNumMemberFunctions(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ TypeMemberFunctionImpl<br>
+ GetMemberFunctionAtIndex(lldb::opaque_compiler_type_t type, size_t idx) override;<br>
+<br>
+ CompilerType<br>
+ GetPointeeType(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ CompilerType<br>
+ GetPointerType(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ uint64_t<br>
+ GetBitSize(lldb::opaque_compiler_type_t type, ExecutionContextScope *exe_scope) override;<br>
+<br>
+ lldb::Encoding<br>
+ GetEncoding(lldb::opaque_compiler_type_t type, uint64_t &count) override;<br>
+<br>
+ lldb::Format<br>
+ GetFormat(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ uint32_t<br>
+ GetNumChildren(lldb::opaque_compiler_type_t type, bool omit_empty_base_classes) override;<br>
+<br>
+ lldb::BasicType<br>
+ GetBasicTypeEnumeration(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ CompilerType<br>
+ GetBuiltinTypeForEncodingAndBitSize(lldb::Encoding encoding, size_t bit_size) override;<br>
+<br>
+ uint32_t<br>
+ GetNumFields(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ CompilerType<br>
+ GetFieldAtIndex(lldb::opaque_compiler_type_t type, size_t idx, std::string &name, uint64_t *bit_offset_ptr,<br>
+ uint32_t *bitfield_bit_size_ptr, bool *is_bitfield_ptr) override;<br>
+<br>
+ uint32_t<br>
+ GetNumDirectBaseClasses(lldb::opaque_compiler_type_t type) override<br>
+ {<br>
+ return 0;<br>
+ }<br>
+<br>
+ uint32_t<br>
+ GetNumVirtualBaseClasses(lldb::opaque_compiler_type_t type) override<br>
+ {<br>
+ return 0;<br>
+ }<br>
+<br>
+ CompilerType<br>
+ GetDirectBaseClassAtIndex(lldb::opaque_compiler_type_t type, size_t idx, uint32_t *bit_offset_ptr) override<br>
+ {<br>
+ return CompilerType();<br>
+ }<br>
+<br>
+ CompilerType<br>
+ GetVirtualBaseClassAtIndex(lldb::opaque_compiler_type_t type, size_t idx, uint32_t *bit_offset_ptr) override<br>
+ {<br>
+ return CompilerType();<br>
+ }<br>
+<br>
+ CompilerType<br>
+ GetChildCompilerTypeAtIndex(lldb::opaque_compiler_type_t type,<br>
+ ExecutionContext *exe_ctx, size_t idx,<br>
+ bool transparent_pointers, bool omit_empty_base_classes,<br>
+ bool ignore_array_bounds, std::string &child_name,<br>
+ uint32_t &child_byte_size, int32_t &child_byte_offset,<br>
+ uint32_t &child_bitfield_bit_size,<br>
+ uint32_t &child_bitfield_bit_offset, bool &child_is_base_class,<br>
+ bool &child_is_deref_of_parent, ValueObject *valobj,<br>
+ uint64_t &language_flags) override;<br>
+<br>
+ uint32_t<br>
+ GetIndexOfChildWithName(lldb::opaque_compiler_type_t type, const char *name, bool omit_empty_base_classes) override;<br>
+<br>
+ size_t<br>
+ GetIndexOfChildMemberWithName(lldb::opaque_compiler_type_t type,<br>
+ const char *name, bool omit_empty_base_classes,<br>
+ std::vector<uint32_t> &child_indexes) override;<br>
+<br>
+ size_t<br>
+ GetNumTemplateArguments(lldb::opaque_compiler_type_t type) override<br>
+ {<br>
+ return 0;<br>
+ }<br>
+<br>
+ CompilerType<br>
+ GetTemplateArgument(lldb::opaque_compiler_type_t type,<br>
+ size_t idx, lldb::TemplateArgumentKind &kind) override<br>
+ {<br>
+ return CompilerType();<br>
+ }<br>
+<br>
+ void DumpValue(lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx,<br>
+ Stream *s, lldb::Format format, const DataExtractor &data,<br>
+ lldb::offset_t data_offset, size_t data_byte_size,<br>
+ uint32_t bitfield_bit_size, uint32_t bitfield_bit_offset,<br>
+ bool show_types, bool show_summary,<br>
+ bool verbose, uint32_t depth) override;<br>
+<br>
+ bool DumpTypeValue(lldb::opaque_compiler_type_t type, Stream *s,<br>
+ lldb::Format format, const DataExtractor &data,<br>
+ lldb::offset_t data_offset, size_t data_byte_size,<br>
+ uint32_t bitfield_bit_size, uint32_t bitfield_bit_offset,<br>
+ ExecutionContextScope *exe_scope) override;<br>
+<br>
+ void<br>
+ DumpTypeDescription(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ void<br>
+ DumpTypeDescription(lldb::opaque_compiler_type_t type, Stream *s) override;<br>
+<br>
+ bool IsRuntimeGeneratedType(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ void<br>
+ DumpSummary(lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx,<br>
+ Stream *s, const DataExtractor &data,<br>
+ lldb::offset_t data_offset, size_t data_byte_size) override;<br>
+<br>
+ size_t<br>
+ ConvertStringToFloatValue(lldb::opaque_compiler_type_t type, const char *s,<br>
+ uint8_t *dst, size_t dst_size) override;<br>
+<br>
+ bool IsPointerOrReferenceType(lldb::opaque_compiler_type_t type,<br>
+ CompilerType *pointee_type = nullptr) override;<br>
+<br>
+ unsigned GetTypeQualifiers(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ bool IsCStringType(lldb::opaque_compiler_type_t type, uint32_t &length) override;<br>
+<br>
+ size_t GetTypeBitAlign(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ CompilerType GetBasicTypeFromAST(lldb::BasicType basic_type) override;<br>
+<br>
+ bool IsBeingDefined(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ bool IsConst(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ uint32_t<br>
+ IsHomogeneousAggregate(lldb::opaque_compiler_type_t type, CompilerType *base_type_ptr) override;<br>
+<br>
+ bool IsPolymorphicClass(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ bool IsTypedefType(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ CompilerType GetTypedefedType(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ bool<br>
+ IsVectorType(lldb::opaque_compiler_type_t type, CompilerType *element_type,<br>
+ uint64_t *size) override;<br>
+<br>
+ CompilerType GetFullyUnqualifiedType(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ CompilerType GetNonReferenceType(lldb::opaque_compiler_type_t type) override;<br>
+<br>
+ bool<br>
+ IsReferenceType(lldb::opaque_compiler_type_t type,<br>
+ CompilerType *pointee_type = nullptr,<br>
+ bool *is_rvalue = nullptr) override;<br>
+<br>
+ CompilerType CreateBaseType(const ConstString &name, uint64_t);<br>
+<br>
+ private:<br>
+ int m_pointer_byte_size;<br>
+ int m_int_byte_size;<br>
+ std::unique_ptr<DWARFASTParser> m_dwarf_ast_parser_ap;<br>
+ OCamlTypeMap m_base_type_map;<br>
+<br>
+ OCamlASTContext(const OCamlASTContext &) = delete;<br>
+ const OCamlASTContext &operator=(const OCamlASTContext &) = delete;<br>
+};<br>
+<br>
+class OCamlASTContextForExpr : public OCamlASTContext<br>
+{<br>
+ public:<br>
+ OCamlASTContextForExpr(lldb::TargetSP target) : m_target_wp(target) {}<br>
+<br>
+ private:<br>
+ lldb::TargetWP m_target_wp;<br>
+};<br>
+<br>
+}<br>
+#endif // liblldb_OCamlASTContext_h_<br>
<br>
Modified: lldb/trunk/include/lldb/Symbol/TypeSystem.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/TypeSystem.h?rev=277443&r1=277442&r2=277443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/TypeSystem.h?rev=277443&r1=277442&r2=277443&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/include/lldb/Symbol/TypeSystem.h (original)<br>
+++ lldb/trunk/include/lldb/Symbol/TypeSystem.h Tue Aug 2 06:15:55 2016<br>
@@ -75,6 +75,7 @@ public:<br>
eKindSwift,<br>
eKindGo,<br>
eKindJava,<br>
+ eKindOCaml,<br>
kNumKinds<br>
};<br>
<br>
<br>
Modified: lldb/trunk/source/API/SystemInitializerFull.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SystemInitializerFull.cpp?rev=277443&r1=277442&r2=277443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SystemInitializerFull.cpp?rev=277443&r1=277442&r2=277443&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/API/SystemInitializerFull.cpp (original)<br>
+++ lldb/trunk/source/API/SystemInitializerFull.cpp Tue Aug 2 06:15:55 2016<br>
@@ -27,6 +27,7 @@<br>
#include "lldb/Symbol/ClangASTContext.h"<br>
#include "lldb/Symbol/GoASTContext.h"<br>
#include "lldb/Symbol/JavaASTContext.h"<br>
+#include "lldb/Symbol/OCamlASTContext.h"<br>
<br>
#include "Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.h"<br>
#include "Plugins/ABI/MacOSX-arm64/ABIMacOSX_arm64.h"<br>
@@ -56,6 +57,7 @@<br>
#include "Plugins/Language/Java/JavaLanguage.h"<br>
#include "Plugins/Language/ObjC/ObjCLanguage.h"<br>
#include "Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h"<br>
+#include "Plugins/Language/OCaml/OCamlLanguage.h"<br>
#include "Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h"<br>
#include "Plugins/LanguageRuntime/Go/GoLanguageRuntime.h"<br>
#include "Plugins/LanguageRuntime/Java/JavaLanguageRuntime.h"<br>
@@ -314,6 +316,7 @@ SystemInitializerFull::Initialize()<br>
ClangASTContext::Initialize();<br>
GoASTContext::Initialize();<br>
JavaASTContext::Initialize();<br>
+ OCamlASTContext::Initialize();<br>
<br>
ABIMacOSX_i386::Initialize();<br>
ABIMacOSX_arm::Initialize();<br>
@@ -360,6 +363,7 @@ SystemInitializerFull::Initialize()<br>
JavaLanguage::Initialize();<br>
ObjCLanguage::Initialize();<br>
ObjCPlusPlusLanguage::Initialize();<br>
+ OCamlLanguage::Initialize();<br>
<br>
#if defined(_MSC_VER)<br>
ProcessWindowsLive::Initialize();<br>
@@ -444,6 +448,7 @@ SystemInitializerFull::Terminate()<br>
ClangASTContext::Terminate();<br>
GoASTContext::Terminate();<br>
JavaASTContext::Terminate();<br>
+ OCamlASTContext::Terminate();<br>
<br>
ABIMacOSX_i386::Terminate();<br>
ABIMacOSX_arm::Terminate();<br>
@@ -488,6 +493,7 @@ SystemInitializerFull::Terminate()<br>
JavaLanguage::Terminate();<br>
ObjCLanguage::Terminate();<br>
ObjCPlusPlusLanguage::Terminate();<br>
+ OCamlLanguage::Terminate();<br>
<br>
#if defined(__APPLE__)<br>
DynamicLoaderDarwinKernel::Terminate();<br>
<br>
Modified: lldb/trunk/source/Plugins/Language/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/CMakeLists.txt?rev=277443&r1=277442&r2=277443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/CMakeLists.txt?rev=277443&r1=277442&r2=277443&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Plugins/Language/CMakeLists.txt (original)<br>
+++ lldb/trunk/source/Plugins/Language/CMakeLists.txt Tue Aug 2 06:15:55 2016<br>
@@ -3,3 +3,4 @@ add_subdirectory(Go)<br>
add_subdirectory(Java)<br>
add_subdirectory(ObjC)<br>
add_subdirectory(ObjCPlusPlus)<br>
+add_subdirectory(OCaml)<br>
<br>
Added: lldb/trunk/source/Plugins/Language/OCaml/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/OCaml/CMakeLists.txt?rev=277443&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/OCaml/CMakeLists.txt?rev=277443&view=auto</a><br>
==============================================================================<br>
--- lldb/trunk/source/Plugins/Language/OCaml/CMakeLists.txt (added)<br>
+++ lldb/trunk/source/Plugins/Language/OCaml/CMakeLists.txt Tue Aug 2 06:15:55 2016<br>
@@ -0,0 +1,4 @@<br>
+add_lldb_library(lldbPluginOCamlLanguage<br>
+ OCamlLanguage.cpp<br>
+)<br>
+<br>
<br>
Added: lldb/trunk/source/Plugins/Language/OCaml/OCamlLanguage.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/OCaml/OCamlLanguage.cpp?rev=277443&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/OCaml/OCamlLanguage.cpp?rev=277443&view=auto</a><br>
==============================================================================<br>
--- lldb/trunk/source/Plugins/Language/OCaml/OCamlLanguage.cpp (added)<br>
+++ lldb/trunk/source/Plugins/Language/OCaml/OCamlLanguage.cpp Tue Aug 2 06:15:55 2016<br>
@@ -0,0 +1,78 @@<br>
+//===-- OCamlLanguage.cpp ----------------------------------------*- C++ -*-===//<br>
+//<br>
+// The LLVM Compiler Infrastructure<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===----------------------------------------------------------------------===//<br>
+<br>
+// C Includes<br>
+#include <string.h><br>
+// C++ Includes<br>
+#include <functional><br>
+#include <mutex><br>
+<br>
+// Other libraries and framework includes<br>
+#include "llvm/ADT/StringRef.h"<br>
+<br>
+// Project includes<br>
+#include "OCamlLanguage.h"<br>
+#include "lldb/Core/ConstString.h"<br>
+#include "lldb/Core/PluginManager.h"<br>
+#include "lldb/DataFormatters/DataVisualization.h"<br>
+#include "lldb/DataFormatters/FormattersHelpers.h"<br>
+#include "lldb/Symbol/OCamlASTContext.h"<br>
+<br>
+using namespace lldb;<br>
+using namespace lldb_private;<br>
+<br>
+void<br>
+OCamlLanguage::Initialize()<br>
+{<br>
+ PluginManager::RegisterPlugin(GetPluginNameStatic(), "OCaml Language", CreateInstance);<br>
+}<br>
+<br>
+void<br>
+OCamlLanguage::Terminate()<br>
+{<br>
+ PluginManager::UnregisterPlugin(CreateInstance);<br>
+}<br>
+<br>
+lldb_private::ConstString<br>
+OCamlLanguage::GetPluginNameStatic()<br>
+{<br>
+ static ConstString g_name("OCaml");<br>
+ return g_name;<br>
+}<br>
+<br>
+lldb_private::ConstString<br>
+OCamlLanguage::GetPluginName()<br>
+{<br>
+ return GetPluginNameStatic();<br>
+}<br>
+<br>
+uint32_t<br>
+OCamlLanguage::GetPluginVersion()<br>
+{<br>
+ return 1;<br>
+}<br>
+<br>
+Language *<br>
+OCamlLanguage::CreateInstance(lldb::LanguageType language)<br>
+{<br>
+ if (language == eLanguageTypeOCaml)<br>
+ return new OCamlLanguage();<br>
+ return nullptr;<br>
+}<br>
+<br>
+bool<br>
+OCamlLanguage::IsNilReference(ValueObject &valobj)<br>
+{<br>
+ if (!valobj.GetCompilerType().IsReferenceType())<br>
+ return false;<br>
+<br>
+ // If we failed to read the value then it is not a nil reference.<br>
+ return valobj.GetValueAsUnsigned(UINT64_MAX) == 0;<br>
+}<br>
+<br>
<br>
Added: lldb/trunk/source/Plugins/Language/OCaml/OCamlLanguage.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/OCaml/OCamlLanguage.h?rev=277443&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/OCaml/OCamlLanguage.h?rev=277443&view=auto</a><br>
==============================================================================<br>
--- lldb/trunk/source/Plugins/Language/OCaml/OCamlLanguage.h (added)<br>
+++ lldb/trunk/source/Plugins/Language/OCaml/OCamlLanguage.h Tue Aug 2 06:15:55 2016<br>
@@ -0,0 +1,61 @@<br>
+//===-- OCamlLanguage.h ------------------------------------------*- C++ -*-===//<br>
+//<br>
+// The LLVM Compiler Infrastructure<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===----------------------------------------------------------------------===//<br>
+<br>
+#ifndef liblldb_OCamlLanguage_h_<br>
+#define liblldb_OCamlLanguage_h_<br>
+<br>
+// C Includes<br>
+// C++ Includes<br>
+#include <vector><br>
+<br>
+// Other libraries and framework includes<br>
+#include "llvm/ADT/StringRef.h"<br>
+<br>
+// Project includes<br>
+#include "lldb/Core/ConstString.h"<br>
+#include "lldb/Target/Language.h"<br>
+#include "lldb/lldb-private.h"<br>
+<br>
+namespace lldb_private<br>
+{<br>
+<br>
+class OCamlLanguage : public Language<br>
+{<br>
+public:<br>
+ lldb::LanguageType<br>
+ GetLanguageType() const override<br>
+ {<br>
+ return lldb::eLanguageTypeOCaml;<br>
+ }<br>
+<br>
+ static void<br>
+ Initialize();<br>
+<br>
+ static void<br>
+ Terminate();<br>
+<br>
+ static lldb_private::Language *<br>
+ CreateInstance(lldb::LanguageType language);<br>
+<br>
+ static lldb_private::ConstString<br>
+ GetPluginNameStatic();<br>
+<br>
+ ConstString<br>
+ GetPluginName() override;<br>
+<br>
+ uint32_t<br>
+ GetPluginVersion() override;<br>
+<br>
+ bool<br>
+ IsNilReference(ValueObject &valobj) override;<br>
+};<br>
+<br>
+} // namespace lldb_private<br>
+<br>
+#endif // liblldb_OCamlLanguage_h_<br>
<br>
Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/CMakeLists.txt?rev=277443&r1=277442&r2=277443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/CMakeLists.txt?rev=277443&r1=277442&r2=277443&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/CMakeLists.txt (original)<br>
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/CMakeLists.txt Tue Aug 2 06:15:55 2016<br>
@@ -4,6 +4,7 @@ add_lldb_library(lldbPluginSymbolFileDWA<br>
DWARFASTParserClang.cpp<br>
DWARFASTParserGo.cpp<br>
DWARFASTParserJava.cpp<br>
+ DWARFASTParserOCaml.cpp<br>
DWARFAttribute.cpp<br>
DWARFCompileUnit.cpp<br>
DWARFDataExtractor.cpp<br>
<br>
Added: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserOCaml.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserOCaml.cpp?rev=277443&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserOCaml.cpp?rev=277443&view=auto</a><br>
==============================================================================<br>
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserOCaml.cpp (added)<br>
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserOCaml.cpp Tue Aug 2 06:15:55 2016<br>
@@ -0,0 +1,232 @@<br>
+//===-- DWARFASTParserOCaml.cpp ---------------------------------*- C++ -*-===//<br>
+<br>
+#include "DWARFASTParserOCaml.h"<br>
+<br>
+#include "lldb/Core/Error.h"<br>
+#include "lldb/Core/Log.h"<br>
+#include "lldb/Core/Module.h"<br>
+#include "lldb/Symbol/CompileUnit.h"<br>
+#include "lldb/Symbol/Function.h"<br>
+#include "lldb/Symbol/ObjectFile.h"<br>
+#include "lldb/Symbol/Type.h"<br>
+#include "lldb/Symbol/TypeList.h"<br>
+<br>
+using namespace lldb;<br>
+using namespace lldb_private;<br>
+<br>
+DWARFASTParserOCaml::DWARFASTParserOCaml (OCamlASTContext &ast) :<br>
+ m_ast (ast)<br>
+{}<br>
+<br>
+DWARFASTParserOCaml::~DWARFASTParserOCaml () {}<br>
+<br>
+TypeSP<br>
+DWARFASTParserOCaml::ParseBaseTypeFromDIE(const DWARFDIE &die)<br>
+{<br>
+ SymbolFileDWARF *dwarf = die.GetDWARF();<br>
+ dwarf->m_die_to_type[die.GetDIE()] = DIE_IS_BEING_PARSED;<br>
+<br>
+ ConstString type_name;<br>
+ uint64_t byte_size = 0;<br>
+<br>
+ DWARFAttributes attributes;<br>
+ const size_t num_attributes = die.GetAttributes(attributes);<br>
+ for (uint32_t i = 0; i < num_attributes; ++i)<br>
+ {<br>
+ DWARFFormValue form_value;<br>
+ dw_attr_t attr = attributes.AttributeAtIndex(i);<br>
+ if (attributes.ExtractFormValueAtIndex(i, form_value))<br>
+ {<br>
+ switch (attr)<br>
+ {<br>
+ case DW_AT_name:<br>
+ type_name.SetCString(form_value.AsCString());<br>
+ break;<br>
+ case DW_AT_byte_size:<br>
+ byte_size = form_value.Unsigned();<br>
+ break;<br>
+ case DW_AT_encoding:<br>
+ break;<br>
+ default:<br>
+ assert(false && "Unsupported attribute for DW_TAG_base_type");<br>
+ }<br>
+ }<br>
+ }<br>
+<br>
+ Declaration decl;<br>
+ CompilerType compiler_type = m_ast.CreateBaseType(type_name, byte_size);<br>
+ return std::make_shared<Type>(die.GetID(), dwarf, type_name, byte_size, nullptr, LLDB_INVALID_UID,<br>
+ Type::eEncodingIsUID, decl, compiler_type, Type::eResolveStateFull);<br>
+}<br>
+<br>
+lldb::TypeSP<br>
+DWARFASTParserOCaml::ParseTypeFromDWARF (const SymbolContext& sc,<br>
+ const DWARFDIE &die,<br>
+ Log *log,<br>
+ bool *type_is_new_ptr)<br>
+{<br>
+ if (type_is_new_ptr)<br>
+ *type_is_new_ptr = false;<br>
+<br>
+ if (!die)<br>
+ return nullptr;<br>
+<br>
+ SymbolFileDWARF *dwarf = die.GetDWARF();<br>
+<br>
+ Type *type_ptr = dwarf->m_die_to_type.lookup(die.GetDIE());<br>
+ if (type_ptr == DIE_IS_BEING_PARSED)<br>
+ return nullptr;<br>
+ if (type_ptr != nullptr)<br>
+ return type_ptr->shared_from_this();<br>
+<br>
+ TypeSP type_sp;<br>
+ if (type_is_new_ptr)<br>
+ *type_is_new_ptr = true;<br>
+<br>
+ switch (die.Tag())<br>
+ {<br>
+ case DW_TAG_base_type:<br>
+ {<br>
+ type_sp = ParseBaseTypeFromDIE(die);<br>
+ break;<br>
+ }<br>
+ case DW_TAG_array_type:<br>
+ {<br>
+ break;<br>
+ }<br>
+ case DW_TAG_class_type:<br>
+ {<br>
+ break;<br>
+ }<br>
+ case DW_TAG_reference_type:<br>
+ {<br>
+ break;<br>
+ }<br>
+ }<br>
+<br>
+ if (!type_sp)<br>
+ return nullptr;<br>
+<br>
+ DWARFDIE sc_parent_die = SymbolFileDWARF::GetParentSymbolContextDIE(die);<br>
+ dw_tag_t sc_parent_tag = sc_parent_die.Tag();<br>
+<br>
+ SymbolContextScope *symbol_context_scope = nullptr;<br>
+ if (sc_parent_tag == DW_TAG_compile_unit)<br>
+ {<br>
+ symbol_context_scope = sc.comp_unit;<br>
+ }<br>
+ else if (sc.function != nullptr && sc_parent_die)<br>
+ {<br>
+ symbol_context_scope = sc.function->GetBlock(true).FindBlockByID(sc_parent_die.GetID());<br>
+ if (symbol_context_scope == nullptr)<br>
+ symbol_context_scope = sc.function;<br>
+ }<br>
+<br>
+ if (symbol_context_scope != nullptr)<br>
+ type_sp->SetSymbolContextScope(symbol_context_scope);<br>
+<br>
+ dwarf->GetTypeList()->Insert(type_sp);<br>
+ dwarf->m_die_to_type[die.GetDIE()] = type_sp.get();<br>
+<br>
+ return type_sp;<br>
+}<br>
+<br>
+Function *<br>
+DWARFASTParserOCaml::ParseFunctionFromDWARF (const SymbolContext& sc,<br>
+ const DWARFDIE &die)<br>
+{<br>
+ DWARFRangeList func_ranges;<br>
+ const char *name = NULL;<br>
+ const char *mangled = NULL;<br>
+ int decl_file = 0;<br>
+ int decl_line = 0;<br>
+ int decl_column = 0;<br>
+ int call_file = 0;<br>
+ int call_line = 0;<br>
+ int call_column = 0;<br>
+ DWARFExpression frame_base(die.GetCU());<br>
+<br>
+ Log *log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_LANGUAGE));<br>
+<br>
+ if (die)<br>
+ {<br>
+ SymbolFileDWARF *dwarf = die.GetDWARF();<br>
+ if (log)<br>
+ {<br>
+ dwarf->GetObjectFile()->GetModule()->LogMessage(<br>
+ log, "DWARFASTParserOCaml::ParseFunctionFromDWARF (die = 0x%8.8x) %s name = '%s')", die.GetOffset(),<br>
+ DW_TAG_value_to_name(die.Tag()), die.GetName());<br>
+ }<br>
+ }<br>
+<br>
+ assert(die.Tag() == DW_TAG_subprogram);<br>
+<br>
+ if (die.Tag() != DW_TAG_subprogram)<br>
+ return NULL;<br>
+<br>
+ if (die.GetDIENamesAndRanges(name, mangled, func_ranges, decl_file, decl_line, decl_column, call_file, call_line,<br>
+ call_column, &frame_base))<br>
+ {<br>
+ AddressRange func_range;<br>
+ lldb::addr_t lowest_func_addr = func_ranges.GetMinRangeBase(0);<br>
+ lldb::addr_t highest_func_addr = func_ranges.GetMaxRangeEnd(0);<br>
+ if (lowest_func_addr != LLDB_INVALID_ADDRESS && lowest_func_addr <= highest_func_addr)<br>
+ {<br>
+ ModuleSP module_sp(die.GetModule());<br>
+ func_range.GetBaseAddress().ResolveAddressUsingFileSections(lowest_func_addr, module_sp->GetSectionList());<br>
+ if (func_range.GetBaseAddress().IsValid())<br>
+ func_range.SetByteSize(highest_func_addr - lowest_func_addr);<br>
+ }<br>
+<br>
+ if (func_range.GetBaseAddress().IsValid())<br>
+ {<br>
+ Mangled func_name;<br>
+<br>
+ func_name.SetValue(ConstString(name), true);<br>
+<br>
+ FunctionSP func_sp;<br>
+ std::unique_ptr<Declaration> decl_ap;<br>
+ if (decl_file != 0 || decl_line != 0 || decl_column != 0)<br>
+ decl_ap.reset(new Declaration(sc.comp_unit->GetSupportFiles().GetFileSpecAtIndex(decl_file), decl_line,<br>
+ decl_column));<br>
+<br>
+ SymbolFileDWARF *dwarf = die.GetDWARF();<br>
+ Type *func_type = dwarf->m_die_to_type.lookup(die.GetDIE());<br>
+<br>
+ assert(func_type == NULL || func_type != DIE_IS_BEING_PARSED);<br>
+<br>
+ if (dwarf->FixupAddress(func_range.GetBaseAddress()))<br>
+ {<br>
+ const user_id_t func_user_id = die.GetID();<br>
+ func_sp.reset(new Function(sc.comp_unit,<br>
+ func_user_id, // UserID is the DIE offset<br>
+ func_user_id,<br>
+ func_name,<br>
+ func_type,<br>
+ func_range)); // first address range<br>
+<br>
+ if (func_sp.get() != NULL)<br>
+ {<br>
+ if (frame_base.IsValid())<br>
+ func_sp->GetFrameBaseExpression() = frame_base;<br>
+ sc.comp_unit->AddFunction(func_sp);<br>
+ return func_sp.get();<br>
+ }<br>
+ }<br>
+ }<br>
+ }<br>
+<br>
+ return NULL;<br>
+}<br>
+<br>
+lldb_private::CompilerDeclContext<br>
+DWARFASTParserOCaml::GetDeclContextForUIDFromDWARF (const DWARFDIE &die)<br>
+{<br>
+ return CompilerDeclContext();<br>
+}<br>
+<br>
+lldb_private::CompilerDeclContext<br>
+DWARFASTParserOCaml::GetDeclContextContainingUIDFromDWARF (const DWARFDIE &die)<br>
+{<br>
+ return CompilerDeclContext();<br>
+}<br>
<br>
Added: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserOCaml.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserOCaml.h?rev=277443&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserOCaml.h?rev=277443&view=auto</a><br>
==============================================================================<br>
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserOCaml.h (added)<br>
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserOCaml.h Tue Aug 2 06:15:55 2016<br>
@@ -0,0 +1,60 @@<br>
+//===-- DWARFASTParserOCaml.h -----------------------------------*- C++ -*-===//<br>
+<br>
+#ifndef SymbolFileDWARF_DWARFASTParserOCaml_h_<br>
+#define SymbolFileDWARF_DWARFASTParserOCaml_h_<br>
+<br>
+#include "DWARFASTParser.h"<br>
+#include "DWARFCompileUnit.h"<br>
+#include "DWARFDebugInfo.h"<br>
+#include "DWARFDIE.h"<br>
+#include "DWARFDefines.h"<br>
+#include "SymbolFileDWARF.h"<br>
+<br>
+#include "lldb/Symbol/OCamlASTContext.h"<br>
+<br>
+class DWARFDebugInfoEntry;<br>
+class DWARFDIECollection;<br>
+<br>
+class DWARFASTParserOCaml : public DWARFASTParser<br>
+{<br>
+public:<br>
+ DWARFASTParserOCaml (lldb_private::OCamlASTContext &ast);<br>
+<br>
+ virtual ~DWARFASTParserOCaml ();<br>
+<br>
+ lldb::TypeSP<br>
+ ParseBaseTypeFromDIE(const DWARFDIE &die);<br>
+<br>
+ lldb::TypeSP<br>
+ ParseTypeFromDWARF (const lldb_private::SymbolContext& sc,<br>
+ const DWARFDIE &die,<br>
+ lldb_private::Log *log,<br>
+ bool *type_is_new_ptr) override;<br>
+<br>
+ lldb_private::Function *<br>
+ ParseFunctionFromDWARF (const lldb_private::SymbolContext& sc,<br>
+ const DWARFDIE &die) override;<br>
+<br>
+ bool<br>
+ CompleteTypeFromDWARF (const DWARFDIE &die,<br>
+ lldb_private::Type *type,<br>
+ lldb_private::CompilerType &compiler_type) override { return false; }<br>
+<br>
+ lldb_private::CompilerDecl<br>
+ GetDeclForUIDFromDWARF (const DWARFDIE &die) override { return lldb_private::CompilerDecl(); }<br>
+<br>
+ lldb_private::CompilerDeclContext<br>
+ GetDeclContextForUIDFromDWARF (const DWARFDIE &die) override;<br>
+<br>
+ lldb_private::CompilerDeclContext<br>
+ GetDeclContextContainingUIDFromDWARF (const DWARFDIE &die) override;<br>
+<br>
+ std::vector<DWARFDIE><br>
+ GetDIEForDeclContext (lldb_private::CompilerDeclContext decl_context) override { return {}; }<br>
+<br>
+protected:<br>
+<br>
+ lldb_private::OCamlASTContext &m_ast;<br>
+};<br>
+<br>
+#endif // SymbolFileDWARF_DWARFASTParserOCaml_h_<br>
<br>
Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h?rev=277443&r1=277442&r2=277443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h?rev=277443&r1=277442&r2=277443&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h (original)<br>
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h Tue Aug 2 06:15:55 2016<br>
@@ -74,6 +74,7 @@ public:<br>
friend class DWARFASTParserClang;<br>
friend class DWARFASTParserGo;<br>
friend class DWARFASTParserJava;<br>
+ friend class DWARFASTParserOCaml;<br>
<br>
//------------------------------------------------------------------<br>
// Static Functions<br>
<br>
Modified: lldb/trunk/source/Symbol/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/CMakeLists.txt?rev=277443&r1=277442&r2=277443&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/CMakeLists.txt?rev=277443&r1=277442&r2=277443&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Symbol/CMakeLists.txt (original)<br>
+++ lldb/trunk/source/Symbol/CMakeLists.txt Tue Aug 2 06:15:55 2016<br>
@@ -21,6 +21,7 @@ add_lldb_library(lldbSymbol<br>
LineEntry.cpp<br>
LineTable.cpp<br>
ObjectFile.cpp<br>
+ OCamlASTContext.cpp<br>
Symbol.cpp<br>
SymbolContext.cpp<br>
SymbolFile.cpp<br>
<br>
Added: lldb/trunk/source/Symbol/OCamlASTContext.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/OCamlASTContext.cpp?rev=277443&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/OCamlASTContext.cpp?rev=277443&view=auto</a><br>
==============================================================================<br>
--- lldb/trunk/source/Symbol/OCamlASTContext.cpp (added)<br>
+++ lldb/trunk/source/Symbol/OCamlASTContext.cpp Tue Aug 2 06:15:55 2016<br>
@@ -0,0 +1,798 @@<br>
+//===-- OCamlASTContext.cpp ----------------------------------------*- C++ -*-===//<br>
+//<br>
+// The LLVM Compiler Infrastructure<br>
+//<br>
+// This file is distributed under the University of Illinois Open Source<br>
+// License. See LICENSE.TXT for details.<br>
+//<br>
+//===----------------------------------------------------------------------===//<br>
+<br>
+#include "lldb/Core/Log.h"<br>
+#include "lldb/Core/Module.h"<br>
+#include "lldb/Core/PluginManager.h"<br>
+#include "lldb/Core/StreamFile.h"<br>
+#include "lldb/Core/ValueObject.h"<br>
+#include "lldb/Symbol/ObjectFile.h"<br>
+#include "lldb/Symbol/SymbolFile.h"<br>
+#include "lldb/Symbol/OCamlASTContext.h"<br>
+#include "lldb/Symbol/Type.h"<br>
+#include "lldb/Target/ExecutionContext.h"<br>
+#include "lldb/Target/Target.h"<br>
+<br>
+#include "Plugins/SymbolFile/DWARF/DWARFASTParserOCaml.h"<br>
+<br>
+using namespace lldb;<br>
+using namespace lldb_private;<br>
+<br>
+namespace lldb_private<br>
+{<br>
+ class OCamlASTContext::OCamlType<br>
+ {<br>
+ public:<br>
+ enum LLVMCastKind<br>
+ {<br>
+ eKindPrimitive,<br>
+ eKindObject,<br>
+ eKindReference,<br>
+ eKindArray,<br>
+ kNumKinds<br>
+ };<br>
+<br>
+ OCamlType(LLVMCastKind kind) : m_kind(kind) {}<br>
+<br>
+ virtual ~OCamlType() = default;<br>
+<br>
+ virtual ConstString<br>
+ GetName() = 0;<br>
+<br>
+ virtual void<br>
+ Dump(Stream *s) = 0;<br>
+<br>
+ virtual bool<br>
+ IsCompleteType() = 0;<br>
+<br>
+ LLVMCastKind<br>
+ getKind() const<br>
+ {<br>
+ return m_kind;<br>
+ }<br>
+<br>
+ private:<br>
+ LLVMCastKind m_kind;<br>
+ };<br>
+<br>
+} // end of namespace lldb_private<br>
+<br>
+namespace<br>
+{<br>
+<br>
+ class OCamlPrimitiveType : public OCamlASTContext::OCamlType<br>
+ {<br>
+ public:<br>
+ enum TypeKind<br>
+ {<br>
+ eTypeInt,<br>
+ };<br>
+<br>
+ OCamlPrimitiveType(TypeKind type_kind, uint32_t byte_size) : OCamlType(OCamlType::eKindPrimitive), m_type_kind(type_kind), m_type(ConstString()), m_byte_size(byte_size) {}<br>
+<br>
+ OCamlPrimitiveType(TypeKind type_kind, ConstString s, uint32_t byte_size) : OCamlType(OCamlType::eKindPrimitive), m_type_kind(type_kind), m_type(s), m_byte_size(byte_size) {}<br>
+<br>
+ ConstString<br>
+ GetName() override<br>
+ {<br>
+ switch (m_type_kind)<br>
+ {<br>
+ case eTypeInt:<br>
+ return m_type;<br>
+ }<br>
+ return ConstString();<br>
+ }<br>
+<br>
+ TypeKind<br>
+ GetTypeKind()<br>
+ {<br>
+ return m_type_kind;<br>
+ }<br>
+<br>
+ void<br>
+ Dump(Stream *s) override<br>
+ {<br>
+ s->Printf("%s\n", GetName().GetCString());<br>
+ }<br>
+<br>
+ bool<br>
+ IsCompleteType() override<br>
+ {<br>
+ return true;<br>
+ }<br>
+<br>
+ static bool<br>
+ classof(const OCamlType *ot)<br>
+ {<br>
+ return ot->getKind() == OCamlType::eKindPrimitive;<br>
+ }<br>
+<br>
+ uint64_t<br>
+ GetByteSize() const<br>
+ {<br>
+ return m_byte_size;<br>
+ }<br>
+<br>
+ private:<br>
+ const TypeKind m_type_kind;<br>
+ const ConstString m_type;<br>
+ uint64_t m_byte_size;<br>
+ };<br>
+}<br>
+<br>
+OCamlASTContext::OCamlASTContext()<br>
+ : TypeSystem(eKindOCaml),<br>
+ m_pointer_byte_size(0),<br>
+ m_int_byte_size(0)<br>
+{<br>
+}<br>
+<br>
+OCamlASTContext::~OCamlASTContext()<br>
+{<br>
+}<br>
+<br>
+ConstString<br>
+OCamlASTContext::GetPluginNameStatic()<br>
+{<br>
+ return ConstString("ocaml");<br>
+}<br>
+<br>
+ConstString<br>
+OCamlASTContext::GetPluginName()<br>
+{<br>
+ return OCamlASTContext::GetPluginNameStatic();<br>
+}<br>
+<br>
+uint32_t<br>
+OCamlASTContext::GetPluginVersion()<br>
+{<br>
+ return 1;<br>
+}<br>
+<br>
+lldb::TypeSystemSP<br>
+OCamlASTContext::CreateInstance (lldb::LanguageType language, Module *module, Target *target)<br>
+{<br>
+ Log *log(lldb_private::GetLogIfAnyCategoriesSet (LIBLLDB_LOG_LANGUAGE));<br>
+<br>
+ if (language == lldb::eLanguageTypeOCaml)<br>
+ {<br>
+ std::shared_ptr<OCamlASTContext> ocaml_ast_sp;<br>
+ ArchSpec arch;<br>
+<br>
+ if (module)<br>
+ {<br>
+ arch = module->GetArchitecture();<br>
+<br>
+ ObjectFile *objfile = module->GetObjectFile();<br>
+ ArchSpec object_arch;<br>
+<br>
+ if (!objfile || !objfile->GetArchitecture(object_arch))<br>
+ return lldb::TypeSystemSP();<br>
+<br>
+ ocaml_ast_sp = std::shared_ptr<OCamlASTContext>(new OCamlASTContext);<br>
+<br>
+ if (log) {<br>
+ log->Printf ("((Module*)%p) [%s]->GetOCamlASTContext() = %p",<br>
+ (void *)module,<br>
+ module->GetFileSpec().GetFilename().AsCString("<anonymous>"),<br>
+ (void *)ocaml_ast_sp.get());<br>
+ }<br>
+<br>
+ } else if (target) {<br>
+ arch = target->GetArchitecture();<br>
+ ocaml_ast_sp = std::shared_ptr<OCamlASTContextForExpr>(new OCamlASTContextForExpr(target->shared_from_this()));<br>
+<br>
+ if (log)<br>
+ {<br>
+ log->Printf ("((Target*)%p)->GetOCamlASTContext() = %p",<br>
+ (void *)target,<br>
+ (void *)ocaml_ast_sp.get());<br>
+ }<br>
+ }<br>
+<br>
+ if (arch.IsValid()) {<br>
+ ocaml_ast_sp->SetAddressByteSize(arch.GetAddressByteSize());<br>
+ return ocaml_ast_sp;<br>
+ }<br>
+ }<br>
+<br>
+ return lldb::TypeSystemSP();<br>
+}<br>
+<br>
+void<br>
+OCamlASTContext::EnumerateSupportedLanguages<br>
+(std::set<lldb::LanguageType> &languages_for_types,<br>
+ std::set<lldb::LanguageType> &languages_for_expressions)<br>
+{<br>
+ static std::vector<lldb::LanguageType> s_supported_languages_for_types({lldb::eLanguageTypeOCaml});<br>
+ static std::vector<lldb::LanguageType> s_supported_languages_for_expressions({});<br>
+<br>
+ languages_for_types.insert(s_supported_languages_for_types.begin(), s_supported_languages_for_types.end());<br>
+ languages_for_expressions.insert(s_supported_languages_for_expressions.begin(), s_supported_languages_for_expressions.end());<br>
+}<br>
+<br>
+void<br>
+OCamlASTContext::Initialize()<br>
+{<br>
+ PluginManager::RegisterPlugin (GetPluginNameStatic(),<br>
+ "OCaml AST context plug-in",<br>
+ CreateInstance,<br>
+ EnumerateSupportedLanguages);<br>
+}<br>
+<br>
+void<br>
+OCamlASTContext::Terminate()<br>
+{<br>
+ PluginManager::UnregisterPlugin (CreateInstance);<br>
+}<br>
+<br>
+DWARFASTParser *<br>
+OCamlASTContext::GetDWARFParser()<br>
+{<br>
+ if (!m_dwarf_ast_parser_ap) {<br>
+ m_dwarf_ast_parser_ap.reset(new DWARFASTParserOCaml(*this));<br>
+ }<br>
+<br>
+ return m_dwarf_ast_parser_ap.get();<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsArrayType(lldb::opaque_compiler_type_t type,<br>
+ CompilerType *element_type, uint64_t *size,<br>
+ bool *is_incomplete)<br>
+{<br>
+ return false;<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsVectorType(lldb::opaque_compiler_type_t type, CompilerType *element_type, uint64_t *size)<br>
+{<br>
+ return false;<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsAggregateType(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return false;<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsBeingDefined(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return false;<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsCharType(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return false;<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsCompleteType(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return static_cast<OCamlPrimitiveType *>(type)->IsCompleteType();<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsConst(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return false;<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsCStringType(lldb::opaque_compiler_type_t type, uint32_t &length)<br>
+{<br>
+ return false;<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsDefined(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return type != nullptr;<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsFloatingPointType(lldb::opaque_compiler_type_t type, uint32_t &count, bool &is_complex)<br>
+{<br>
+ return false;<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsFunctionType(lldb::opaque_compiler_type_t type, bool *is_variadic_ptr)<br>
+{<br>
+ return false;<br>
+}<br>
+<br>
+uint32_t<br>
+OCamlASTContext::IsHomogeneousAggregate(lldb::opaque_compiler_type_t type, CompilerType *base_type_ptr)<br>
+{<br>
+ return false;<br>
+}<br>
+<br>
+size_t<br>
+OCamlASTContext::GetNumberOfFunctionArguments(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return 0;<br>
+}<br>
+<br>
+CompilerType<br>
+OCamlASTContext::GetFunctionArgumentAtIndex(lldb::opaque_compiler_type_t type, const size_t index)<br>
+{<br>
+ return CompilerType();<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsFunctionPointerType(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return IsFunctionType(type);<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsBlockPointerType (lldb::opaque_compiler_type_t type, CompilerType *function_pointer_type_ptr)<br>
+{<br>
+ return false;<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsIntegerType(lldb::opaque_compiler_type_t type, bool &is_signed)<br>
+{<br>
+ if (OCamlPrimitiveType *ptype = llvm::dyn_cast<OCamlPrimitiveType>(static_cast<OCamlType *>(type)))<br>
+ {<br>
+ switch (ptype->GetTypeKind())<br>
+ {<br>
+ case OCamlPrimitiveType::eTypeInt:<br>
+ is_signed = true;<br>
+ return true;<br>
+ default:<br>
+ break;<br>
+ }<br>
+ }<br>
+<br>
+ is_signed = false;<br>
+ return false;<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsPolymorphicClass(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return false;<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsPossibleDynamicType(lldb::opaque_compiler_type_t type,<br>
+ CompilerType *target_type,<br>
+ bool check_cplusplus, bool check_objc)<br>
+{<br>
+ return false;<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsRuntimeGeneratedType(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return false;<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsPointerType(lldb::opaque_compiler_type_t type, CompilerType *pointee_type)<br>
+{<br>
+ if (pointee_type)<br>
+ pointee_type->Clear();<br>
+ return false;<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsPointerOrReferenceType(lldb::opaque_compiler_type_t type, CompilerType *pointee_type)<br>
+{<br>
+ return IsPointerType(type, pointee_type);<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsReferenceType(lldb::opaque_compiler_type_t type, CompilerType *pointee_type, bool *is_rvalue)<br>
+{<br>
+ return false;<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsScalarType(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return llvm::isa<OCamlPrimitiveType>(static_cast<OCamlType *>(type));<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsTypedefType(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return false;<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::IsVoidType(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return false;<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::SupportsLanguage (lldb::LanguageType language)<br>
+{<br>
+ return language == lldb::eLanguageTypeOCaml;<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::GetCompleteType(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ if (IsCompleteType(type))<br>
+ return true;<br>
+<br>
+ return false;<br>
+}<br>
+<br>
+uint32_t<br>
+OCamlASTContext::GetPointerByteSize()<br>
+{<br>
+ return m_pointer_byte_size;<br>
+}<br>
+<br>
+ConstString<br>
+OCamlASTContext::GetTypeName(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ if (type)<br>
+ return static_cast<OCamlPrimitiveType *>(type)->GetName();<br>
+<br>
+ return ConstString();<br>
+}<br>
+<br>
+uint32_t<br>
+OCamlASTContext::GetTypeInfo(lldb::opaque_compiler_type_t type, CompilerType *pointee_or_element_compiler_type)<br>
+{<br>
+ if (pointee_or_element_compiler_type)<br>
+ pointee_or_element_compiler_type->Clear();<br>
+ if (!type)<br>
+ return 0;<br>
+<br>
+ if (OCamlPrimitiveType *ptype = llvm::dyn_cast<OCamlPrimitiveType>(static_cast<OCamlType *>(type)))<br>
+ {<br>
+ switch (ptype->GetTypeKind())<br>
+ {<br>
+ case OCamlPrimitiveType::eTypeInt:<br>
+ return eTypeHasValue | eTypeIsBuiltIn | eTypeIsScalar | eTypeIsInteger | eTypeIsSigned;<br>
+ }<br>
+ }<br>
+<br>
+ return 0;<br>
+}<br>
+<br>
+lldb::TypeClass<br>
+OCamlASTContext::GetTypeClass(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ if (llvm::isa<OCamlPrimitiveType>(static_cast<OCamlType *>(type)))<br>
+ return eTypeClassBuiltin;<br>
+<br>
+ return lldb::eTypeClassInvalid;<br>
+}<br>
+<br>
+lldb::BasicType<br>
+OCamlASTContext::GetBasicTypeEnumeration(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return lldb::eBasicTypeInvalid;<br>
+}<br>
+<br>
+lldb::LanguageType<br>
+OCamlASTContext::GetMinimumLanguage(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return lldb::eLanguageTypeOCaml;<br>
+}<br>
+<br>
+unsigned<br>
+OCamlASTContext::GetTypeQualifiers(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return 0;<br>
+}<br>
+<br>
+//----------------------------------------------------------------------<br>
+// Creating related types<br>
+//----------------------------------------------------------------------<br>
+<br>
+CompilerType<br>
+OCamlASTContext::GetArrayElementType(lldb::opaque_compiler_type_t type, uint64_t *stride)<br>
+{<br>
+ return CompilerType();<br>
+}<br>
+<br>
+CompilerType<br>
+OCamlASTContext::GetCanonicalType(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return CompilerType(this, type);<br>
+}<br>
+<br>
+CompilerType<br>
+OCamlASTContext::GetFullyUnqualifiedType(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return CompilerType(this, type);<br>
+}<br>
+<br>
+int<br>
+OCamlASTContext::GetFunctionArgumentCount(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return GetNumberOfFunctionArguments(type);<br>
+}<br>
+<br>
+CompilerType<br>
+OCamlASTContext::GetFunctionArgumentTypeAtIndex(lldb::opaque_compiler_type_t type, size_t idx)<br>
+{<br>
+ return GetFunctionArgumentAtIndex(type, idx);<br>
+}<br>
+<br>
+CompilerType<br>
+OCamlASTContext::GetFunctionReturnType(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return CompilerType();<br>
+}<br>
+<br>
+size_t<br>
+OCamlASTContext::GetNumMemberFunctions(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return 0;<br>
+}<br>
+<br>
+TypeMemberFunctionImpl<br>
+OCamlASTContext::GetMemberFunctionAtIndex(lldb::opaque_compiler_type_t type, size_t idx)<br>
+{<br>
+ return TypeMemberFunctionImpl();<br>
+}<br>
+<br>
+CompilerType<br>
+OCamlASTContext::GetNonReferenceType(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return CompilerType(this, type);<br>
+}<br>
+<br>
+CompilerType<br>
+OCamlASTContext::GetPointeeType(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return CompilerType();<br>
+}<br>
+<br>
+CompilerType<br>
+OCamlASTContext::GetPointerType(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return CompilerType();<br>
+}<br>
+<br>
+CompilerType<br>
+OCamlASTContext::GetTypedefedType(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return CompilerType();<br>
+}<br>
+<br>
+CompilerType<br>
+OCamlASTContext::GetBasicTypeFromAST(lldb::BasicType basic_type)<br>
+{<br>
+ return CompilerType();<br>
+}<br>
+<br>
+CompilerType<br>
+OCamlASTContext::GetBuiltinTypeForEncodingAndBitSize (lldb::Encoding encoding,<br>
+ size_t bit_size)<br>
+{<br>
+ return CompilerType();<br>
+}<br>
+<br>
+uint64_t<br>
+OCamlASTContext::GetBitSize(lldb::opaque_compiler_type_t type, ExecutionContextScope *exe_scope)<br>
+{<br>
+ if (OCamlPrimitiveType *ptype = llvm::dyn_cast<OCamlPrimitiveType>(static_cast<OCamlType *>(type)))<br>
+ {<br>
+ switch (ptype->GetTypeKind())<br>
+ {<br>
+ case OCamlPrimitiveType::eTypeInt:<br>
+ return ptype->GetByteSize() * 8;<br>
+ }<br>
+ }<br>
+ return 0;<br>
+}<br>
+<br>
+lldb::Encoding<br>
+OCamlASTContext::GetEncoding(lldb::opaque_compiler_type_t type, uint64_t &count)<br>
+{<br>
+ count = 1;<br>
+ bool is_signed;<br>
+ if (IsIntegerType(type, is_signed))<br>
+ return is_signed ? lldb::eEncodingSint : lldb::eEncodingUint;<br>
+ bool is_complex;<br>
+ uint32_t complex_count;<br>
+ if (IsFloatingPointType(type, complex_count, is_complex))<br>
+ {<br>
+ count = complex_count;<br>
+ return lldb::eEncodingIEEE754;<br>
+ }<br>
+ if (IsPointerType(type))<br>
+ return lldb::eEncodingUint;<br>
+ return lldb::eEncodingInvalid;<br>
+}<br>
+<br>
+lldb::Format<br>
+OCamlASTContext::GetFormat(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ if (!type)<br>
+ return lldb::eFormatDefault;<br>
+ return lldb::eFormatBytes;<br>
+}<br>
+<br>
+size_t<br>
+OCamlASTContext::GetTypeBitAlign(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ return 0;<br>
+}<br>
+<br>
+uint32_t<br>
+OCamlASTContext::GetNumChildren(lldb::opaque_compiler_type_t type, bool omit_empty_base_classes)<br>
+{<br>
+ if (!type || !GetCompleteType(type))<br>
+ return 0;<br>
+<br>
+ return GetNumFields(type);<br>
+}<br>
+<br>
+uint32_t<br>
+OCamlASTContext::GetNumFields(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ if (!type || !GetCompleteType(type))<br>
+ return 0;<br>
+ return 0;<br>
+}<br>
+<br>
+CompilerType<br>
+OCamlASTContext::GetFieldAtIndex(lldb::opaque_compiler_type_t type, size_t idx,<br>
+ std::string &name, uint64_t *bit_offset_ptr,<br>
+ uint32_t *bitfield_bit_size_ptr, bool *is_bitfield_ptr)<br>
+{<br>
+ if (bit_offset_ptr)<br>
+ *bit_offset_ptr = 0;<br>
+ if (bitfield_bit_size_ptr)<br>
+ *bitfield_bit_size_ptr = 0;<br>
+ if (is_bitfield_ptr)<br>
+ *is_bitfield_ptr = false;<br>
+<br>
+ if (!type || !GetCompleteType(type))<br>
+ return CompilerType();<br>
+<br>
+ return CompilerType();<br>
+}<br>
+<br>
+CompilerType<br>
+OCamlASTContext::GetChildCompilerTypeAtIndex(lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx, size_t idx,<br>
+ bool transparent_pointers, bool omit_empty_base_classes,<br>
+ bool ignore_array_bounds, std::string &child_name,<br>
+ uint32_t &child_byte_size, int32_t &child_byte_offset,<br>
+ uint32_t &child_bitfield_bit_size, uint32_t &child_bitfield_bit_offset,<br>
+ bool &child_is_base_class, bool &child_is_deref_of_parent, ValueObject *valobj,<br>
+ uint64_t &language_flags)<br>
+{<br>
+ child_name.clear();<br>
+ child_byte_size = 0;<br>
+ child_byte_offset = 0;<br>
+ child_bitfield_bit_size = 0;<br>
+ child_bitfield_bit_offset = 0;<br>
+ child_is_base_class = false;<br>
+ child_is_deref_of_parent = false;<br>
+ language_flags = 0;<br>
+<br>
+ if (!type || !GetCompleteType(type))<br>
+ return CompilerType();<br>
+<br>
+ return CompilerType();<br>
+}<br>
+<br>
+uint32_t<br>
+OCamlASTContext::GetIndexOfChildWithName(lldb::opaque_compiler_type_t type, const char *name, bool omit_empty_base_classes)<br>
+{<br>
+ if (!type || !GetCompleteType(type))<br>
+ return UINT_MAX;<br>
+<br>
+ return UINT_MAX;<br>
+}<br>
+<br>
+size_t<br>
+OCamlASTContext::GetIndexOfChildMemberWithName(lldb::opaque_compiler_type_t type, const char *name,<br>
+ bool omit_empty_base_classes, std::vector<uint32_t> &child_indexes)<br>
+{<br>
+ uint32_t index = GetIndexOfChildWithName(type, name, omit_empty_base_classes);<br>
+ if (index == UINT_MAX)<br>
+ return 0;<br>
+ child_indexes.push_back(index);<br>
+ return 1;<br>
+}<br>
+<br>
+size_t<br>
+OCamlASTContext::ConvertStringToFloatValue(lldb::opaque_compiler_type_t type, const char *s, uint8_t *dst, size_t dst_size)<br>
+{<br>
+ assert(false);<br>
+ return 0;<br>
+}<br>
+//----------------------------------------------------------------------<br>
+// Dumping types<br>
+//----------------------------------------------------------------------<br>
+<br>
+void<br>
+OCamlASTContext::DumpValue(lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx, Stream *s, lldb::Format format,<br>
+ const DataExtractor &data, lldb::offset_t data_byte_offset, size_t data_byte_size,<br>
+ uint32_t bitfield_bit_size, uint32_t bitfield_bit_offset, bool show_types, bool show_summary,<br>
+ bool verbose, uint32_t depth)<br>
+{<br>
+ if (!type) {<br>
+ s->Printf("no type\n");<br>
+ return;<br>
+ }<br>
+<br>
+ s->Printf("no value\n");<br>
+<br>
+ if (show_summary)<br>
+ DumpSummary (type, exe_ctx, s, data, data_byte_offset, data_byte_size);<br>
+}<br>
+<br>
+bool<br>
+OCamlASTContext::DumpTypeValue(lldb::opaque_compiler_type_t type, Stream *s,<br>
+ lldb::Format format, const DataExtractor &data,<br>
+ lldb::offset_t byte_offset, size_t byte_size, uint32_t bitfield_bit_size,<br>
+ uint32_t bitfield_bit_offset, ExecutionContextScope *exe_scope)<br>
+{<br>
+ if (!type) {<br>
+ s->Printf("no type value\n");<br>
+ return false;<br>
+ }<br>
+<br>
+ if (IsScalarType(type))<br>
+ {<br>
+ return<br>
+ data.Dump(s, byte_offset, format, byte_size, 1, UINT64_MAX,<br>
+ LLDB_INVALID_ADDRESS, bitfield_bit_size, bitfield_bit_offset, exe_scope);<br>
+ }<br>
+<br>
+ return false;<br>
+}<br>
+<br>
+void<br>
+OCamlASTContext::DumpSummary(lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx, Stream *s,<br>
+ const DataExtractor &data, lldb::offset_t data_offset, size_t data_byte_size)<br>
+{<br>
+ s->Printf("no summary\n");<br>
+}<br>
+<br>
+void<br>
+OCamlASTContext::DumpTypeDescription(lldb::opaque_compiler_type_t type)<br>
+{<br>
+ StreamFile s(stdout, false);<br>
+ DumpTypeDescription(type, &s);<br>
+}<br>
+<br>
+void<br>
+OCamlASTContext::DumpTypeDescription(lldb::opaque_compiler_type_t type, Stream *s)<br>
+{<br>
+ static_cast<OCamlType *>(type)->Dump(s);<br>
+}<br>
+<br>
+CompilerType<br>
+OCamlASTContext::CreateBaseType(const ConstString &name, uint64_t byte_size)<br>
+{<br>
+ if (m_base_type_map.empty())<br>
+ {<br>
+ OCamlPrimitiveType *type = new OCamlPrimitiveType(OCamlPrimitiveType::eTypeInt, ConstString("ocaml_int"), byte_size);<br>
+ m_base_type_map.emplace(type->GetName(), std::unique_ptr<OCamlASTContext::OCamlType>(type));<br>
+ }<br>
+<br>
+ auto it = m_base_type_map.find(name);<br>
+ if (it == m_base_type_map.end())<br>
+ {<br>
+ OCamlPrimitiveType *type = new OCamlPrimitiveType(OCamlPrimitiveType::eTypeInt, name, byte_size);<br>
+ it = m_base_type_map.emplace(name, std::unique_ptr<OCamlASTContext::OCamlType>(type)).first;<br>
+ }<br>
+<br>
+ return CompilerType(this, it->second.get());<br>
+}<br>
+<br>
<br>
<br>
_______________________________________________<br>
lldb-commits mailing list<br>
<a href="mailto:lldb-commits@lists.llvm.org" target="_blank">lldb-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits</a><br>
</blockquote></div><br><br clear="all"><div><br></div></div><div class="gmail_extra">-- <br><div class="m_-7398942602147760848gmail_signature" data-smartmail="gmail_signature">Tim <<a href="mailto:penryu@gmail.com" target="_blank">penryu@gmail.com</a>></div>
</div></blockquote></div></div>