1 change: 1 addition & 0 deletions lldb/include/lldb/Symbol/TypeSystem.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ class TypeSystem : public PluginInterface
eKindClang,
eKindSwift,
eKindGo,
eKindJava,
kNumKinds
};

Expand Down
9 changes: 9 additions & 0 deletions lldb/source/API/SystemInitializerFull.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include "lldb/Interpreter/CommandInterpreter.h"
#include "lldb/Symbol/ClangASTContext.h"
#include "lldb/Symbol/GoASTContext.h"
#include "lldb/Symbol/JavaASTContext.h"

#include "Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.h"
#include "Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.h"
Expand All @@ -46,12 +47,14 @@
#include "Plugins/JITLoader/GDB/JITLoaderGDB.h"
#include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h"
#include "Plugins/Language/Go/GoLanguage.h"
#include "Plugins/Language/Java/JavaLanguage.h"
#include "Plugins/Language/ObjC/ObjCLanguage.h"
#include "Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h"
#include "Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h"
#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h"
#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h"
#include "Plugins/LanguageRuntime/Go/GoLanguageRuntime.h"
#include "Plugins/LanguageRuntime/Java/JavaLanguageRuntime.h"
#include "Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h"
#include "Plugins/MemoryHistory/asan/MemoryHistoryASan.h"
#include "Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h"
Expand Down Expand Up @@ -272,6 +275,7 @@ SystemInitializerFull::Initialize()

ClangASTContext::Initialize();
GoASTContext::Initialize();
JavaASTContext::Initialize();

ABIMacOSX_i386::Initialize();
ABIMacOSX_arm::Initialize();
Expand Down Expand Up @@ -308,9 +312,11 @@ SystemInitializerFull::Initialize()
SystemRuntimeMacOSX::Initialize();
RenderScriptRuntime::Initialize();
GoLanguageRuntime::Initialize();
JavaLanguageRuntime::Initialize();

CPlusPlusLanguage::Initialize();
GoLanguage::Initialize();
JavaLanguage::Initialize();
ObjCLanguage::Initialize();
ObjCPlusPlusLanguage::Initialize();

Expand Down Expand Up @@ -391,6 +397,7 @@ SystemInitializerFull::Terminate()

ClangASTContext::Terminate();
GoASTContext::Terminate();
JavaASTContext::Terminate();

ABIMacOSX_i386::Terminate();
ABIMacOSX_arm::Terminate();
Expand Down Expand Up @@ -425,9 +432,11 @@ SystemInitializerFull::Terminate()
AppleObjCRuntimeV1::Terminate();
SystemRuntimeMacOSX::Terminate();
RenderScriptRuntime::Terminate();
JavaLanguageRuntime::Terminate();

CPlusPlusLanguage::Terminate();
GoLanguage::Terminate();
JavaLanguage::Terminate();
ObjCLanguage::Terminate();
ObjCPlusPlusLanguage::Terminate();

Expand Down
1 change: 1 addition & 0 deletions lldb/source/Plugins/Language/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
add_subdirectory(CPlusPlus)
add_subdirectory(Go)
add_subdirectory(Java)
add_subdirectory(ObjC)
add_subdirectory(ObjCPlusPlus)
4 changes: 4 additions & 0 deletions lldb/source/Plugins/Language/Java/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
add_lldb_library(lldbPluginJavaLanguage
JavaFormatterFunctions.cpp
JavaLanguage.cpp
)
71 changes: 71 additions & 0 deletions lldb/source/Plugins/Language/Java/JavaFormatterFunctions.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
//===-- JavaFormatterFunctions.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
// C++ Includes
// Other libraries and framework includes
// Project includes
#include "JavaFormatterFunctions.h"
#include "lldb/DataFormatters/FormattersHelpers.h"
#include "lldb/DataFormatters/StringPrinter.h"

using namespace lldb;
using namespace lldb_private;
using namespace lldb_private::formatters;

bool
lldb_private::formatters::JavaStringSummaryProvider(ValueObject &valobj, Stream &stream, const TypeSummaryOptions &opts)
{
if (valobj.IsPointerOrReferenceType())
{
Error error;
ValueObjectSP deref = valobj.Dereference(error);
if (error.Fail())
return false;
return JavaStringSummaryProvider(*deref, stream, opts);
}

ProcessSP process_sp = valobj.GetProcessSP();
if (!process_sp)
return false;

ConstString data_name("value");
ConstString length_name("count");

ValueObjectSP length_sp = valobj.GetChildMemberWithName(length_name, true);
ValueObjectSP data_sp = valobj.GetChildMemberWithName(data_name, true);
if (!data_sp || !length_sp)
return false;

bool success = false;
uint64_t length = length_sp->GetValueAsUnsigned(0, &success);
if (!success)
return false;

if (length == 0)
{
stream.Printf("\"\"");
return true;
}
lldb::addr_t valobj_addr = data_sp->GetAddressOf();

StringPrinter::ReadStringAndDumpToStreamOptions options(valobj);
options.SetLocation(valobj_addr);
options.SetProcessSP(process_sp);
options.SetStream(&stream);
options.SetSourceSize(length);
options.SetNeedsZeroTermination(false);
options.SetLanguage(eLanguageTypeJava);

if (StringPrinter::ReadStringAndDumpToStream<StringPrinter::StringElementType::UTF16>(options))
return true;

stream.Printf("Summary Unavailable");
return true;
}
30 changes: 30 additions & 0 deletions lldb/source/Plugins/Language/Java/JavaFormatterFunctions.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
//===-- JavaFormatterFunctions.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_JavaFormatterFunctions_h_
#define liblldb_JavaFormatterFunctions_h_

// C Includes
// C++ Includes
// Other libraries and framework includes
// Project includes
#include "lldb/lldb-forward.h"

namespace lldb_private
{
namespace formatters
{

bool
JavaStringSummaryProvider(ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options);

} // namespace formatters
} // namespace lldb_private

#endif // liblldb_JavaFormatterFunctions_h_
99 changes: 99 additions & 0 deletions lldb/source/Plugins/Language/Java/JavaLanguage.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
//===-- JavaLanguage.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 "JavaFormatterFunctions.h"
#include "JavaLanguage.h"
#include "lldb/Core/ConstString.h"
#include "lldb/Core/PluginManager.h"
#include "lldb/DataFormatters/DataVisualization.h"
#include "lldb/DataFormatters/FormattersHelpers.h"
#include "lldb/Symbol/JavaASTContext.h"

using namespace lldb;
using namespace lldb_private;
using namespace lldb_private::formatters;

void
JavaLanguage::Initialize()
{
PluginManager::RegisterPlugin(GetPluginNameStatic(), "Java Language", CreateInstance);
}

void
JavaLanguage::Terminate()
{
PluginManager::UnregisterPlugin(CreateInstance);
}

lldb_private::ConstString
JavaLanguage::GetPluginNameStatic()
{
static ConstString g_name("Java");
return g_name;
}

lldb_private::ConstString
JavaLanguage::GetPluginName()
{
return GetPluginNameStatic();
}

uint32_t
JavaLanguage::GetPluginVersion()
{
return 1;
}

Language *
JavaLanguage::CreateInstance(lldb::LanguageType language)
{
if (language == eLanguageTypeJava)
return new JavaLanguage();
return nullptr;
}

bool
JavaLanguage::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;
}

lldb::TypeCategoryImplSP
JavaLanguage::GetFormatters()
{
static std::once_flag g_initialize;
static TypeCategoryImplSP g_category;

std::call_once(g_initialize, [this]() -> void {
DataVisualization::Categories::GetCategory(GetPluginName(), g_category);
if (g_category)
{
lldb::TypeSummaryImplSP string_summary_sp(new CXXFunctionSummaryFormat(
TypeSummaryImpl::Flags().SetDontShowChildren(true), lldb_private::formatters::JavaStringSummaryProvider,
"java.lang.String summary provider"));

g_category->GetTypeSummariesContainer()->Add(ConstString("java::lang::String"), string_summary_sp);
}
});
return g_category;
}
64 changes: 64 additions & 0 deletions lldb/source/Plugins/Language/Java/JavaLanguage.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
//===-- JavaLanguage.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_JavaLanguage_h_
#define liblldb_JavaLanguage_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 JavaLanguage : public Language
{
public:
lldb::LanguageType
GetLanguageType() const override
{
return lldb::eLanguageTypeJava;
}

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;

lldb::TypeCategoryImplSP
GetFormatters();
};

} // namespace lldb_private

#endif // liblldb_JavaLanguage_h_
1 change: 1 addition & 0 deletions lldb/source/Plugins/LanguageRuntime/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
add_subdirectory(CPlusPlus)
add_subdirectory(ObjC)
add_subdirectory(Go)
add_subdirectory(Java)
add_subdirectory(RenderScript)
3 changes: 3 additions & 0 deletions lldb/source/Plugins/LanguageRuntime/Java/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
add_lldb_library(lldbPluginLanguageRuntimeJava
JavaLanguageRuntime.cpp
)
176 changes: 176 additions & 0 deletions lldb/source/Plugins/LanguageRuntime/Java/JavaLanguageRuntime.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
//===-- JavaLanguageRuntime.cpp ---------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#include "JavaLanguageRuntime.h"

#include "lldb/Core/PluginManager.h"
#include "lldb/Symbol/JavaASTContext.h"
#include "lldb/Symbol/Symbol.h"
#include "lldb/Symbol/SymbolContext.h"
#include "lldb/Symbol/SymbolFile.h"
#include "lldb/Symbol/Type.h"
#include "lldb/Symbol/TypeList.h"
#include "lldb/Target/SectionLoadList.h"
#include "lldb/Target/Target.h"
#include "llvm/ADT/StringRef.h"

using namespace lldb;
using namespace lldb_private;

JavaLanguageRuntime::JavaLanguageRuntime(Process *process) : LanguageRuntime(process)
{
}

LanguageRuntime *
JavaLanguageRuntime::CreateInstance(Process *process, lldb::LanguageType language)
{
if (language == eLanguageTypeJava)
return new JavaLanguageRuntime(process);
return nullptr;
}

void
JavaLanguageRuntime::Initialize()
{
PluginManager::RegisterPlugin(GetPluginNameStatic(), "Java language runtime", CreateInstance);
}

void
JavaLanguageRuntime::Terminate()
{
PluginManager::UnregisterPlugin(CreateInstance);
}

lldb_private::ConstString
JavaLanguageRuntime::GetPluginNameStatic()
{
static ConstString g_name("java");
return g_name;
}

lldb_private::ConstString
JavaLanguageRuntime::GetPluginName()
{
return GetPluginNameStatic();
}

uint32_t
JavaLanguageRuntime::GetPluginVersion()
{
return 1;
}

bool
JavaLanguageRuntime::CouldHaveDynamicValue(ValueObject &in_value)
{
return true;
}

static ConstString
GetDynamicTypeId(ExecutionContext *exe_ctx, Target *target, ValueObject &in_value)
{
SymbolContext sc;
TypeList class_types;
llvm::DenseSet<SymbolFile *> searched_symbol_files;
size_t num_matches = target->GetImages().FindTypes(sc, ConstString("Object"),
true, // name_is_fully_qualified
UINT32_MAX, searched_symbol_files, class_types);
for (size_t i = 0; i < num_matches; ++i)
{
TypeSP type_sp = class_types.GetTypeAtIndex(i);
CompilerType compiler_type = type_sp->GetFullCompilerType();

if (compiler_type.GetMinimumLanguage() != eLanguageTypeJava ||
compiler_type.GetTypeName() != ConstString("java::lang::Object"))
continue;

if (compiler_type.GetCompleteType() && compiler_type.IsCompleteType())
{
uint64_t type_id = JavaASTContext::CalculateDynamicTypeId(exe_ctx, compiler_type, in_value);
if (type_id != UINT64_MAX)
{
char id[32];
snprintf(id, sizeof(id), "0x%" PRIX64, type_id);
return ConstString(id);
}
}
}
return ConstString();
}

bool
JavaLanguageRuntime::GetDynamicTypeAndAddress(ValueObject &in_value, lldb::DynamicValueType use_dynamic,
TypeAndOrName &class_type_or_name, Address &dynamic_address,
Value::ValueType &value_type)
{
class_type_or_name.Clear();

// null references don't have a dynamic type
if (in_value.IsNilReference())
return false;

ExecutionContext exe_ctx(in_value.GetExecutionContextRef());
Target *target = exe_ctx.GetTargetPtr();
if (!target)
return false;

ConstString linkage_name;
CompilerType in_type = in_value.GetCompilerType();
if (in_type.IsPossibleDynamicType(nullptr, false, false))
linkage_name = GetDynamicTypeId(&exe_ctx, target, in_value);
else
linkage_name = JavaASTContext::GetLinkageName(in_type);

if (!linkage_name)
return false;

class_type_or_name.SetName(in_type.GetNonReferenceType().GetTypeName());

SymbolContext sc;
TypeList class_types;
llvm::DenseSet<SymbolFile *> searched_symbol_files;
size_t num_matches = target->GetImages().FindTypes(sc, linkage_name,
true, // name_is_fully_qualified
UINT32_MAX, searched_symbol_files, class_types);

for (size_t i = 0; i < num_matches; ++i)
{
TypeSP type_sp = class_types.GetTypeAtIndex(i);
CompilerType compiler_type = type_sp->GetFullCompilerType();

if (compiler_type.GetMinimumLanguage() != eLanguageTypeJava)
continue;

if (compiler_type.GetCompleteType() && compiler_type.IsCompleteType())
{
class_type_or_name.SetTypeSP(type_sp);

Value &value = in_value.GetValue();
value_type = value.GetValueType();
dynamic_address.SetRawAddress(value.GetScalar().ULongLong(0));
return true;
}
}
return false;
}

TypeAndOrName
JavaLanguageRuntime::FixUpDynamicType(const TypeAndOrName &type_and_or_name, ValueObject &static_value)
{
CompilerType static_type(static_value.GetCompilerType());

TypeAndOrName ret(type_and_or_name);
if (type_and_or_name.HasType())
{
CompilerType orig_type = type_and_or_name.GetCompilerType();
if (static_type.IsReferenceType())
ret.SetCompilerType(orig_type.GetLValueReferenceType());
}
return ret;
}
90 changes: 90 additions & 0 deletions lldb/source/Plugins/LanguageRuntime/Java/JavaLanguageRuntime.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
//===-- JavaLanguageRuntime.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_JavaLanguageRuntime_h_
#define liblldb_JavaLanguageRuntime_h_

// C Includes
// C++ Includes
#include <vector>
// Other libraries and framework includes
// Project includes
#include "lldb/Core/PluginInterface.h"
#include "lldb/Target/LanguageRuntime.h"
#include "lldb/lldb-private.h"

namespace lldb_private
{

class JavaLanguageRuntime : public LanguageRuntime
{
public:
static void
Initialize();

static void
Terminate();

static lldb_private::LanguageRuntime *
CreateInstance(Process *process, lldb::LanguageType language);

static lldb_private::ConstString
GetPluginNameStatic();

lldb_private::ConstString
GetPluginName() override;

uint32_t
GetPluginVersion() override;

lldb::LanguageType
GetLanguageType() const override
{
return lldb::eLanguageTypeJava;
}

bool
GetObjectDescription(Stream &str, ValueObject &object) override
{
return false;
}

bool
GetObjectDescription(Stream &str, Value &value, ExecutionContextScope *exe_scope) override
{
return false;
}

lldb::BreakpointResolverSP
CreateExceptionResolver(Breakpoint *bkpt, bool catch_bp, bool throw_bp) override
{
return nullptr;
}

TypeAndOrName
FixUpDynamicType(const TypeAndOrName &type_and_or_name, ValueObject &static_value) override;

bool
CouldHaveDynamicValue(ValueObject &in_value) override;

bool
GetDynamicTypeAndAddress(ValueObject &in_value, lldb::DynamicValueType use_dynamic,
TypeAndOrName &class_type_or_name, Address &address,
Value::ValueType &value_type) override;

protected:
JavaLanguageRuntime(Process *process);

private:
DISALLOW_COPY_AND_ASSIGN(JavaLanguageRuntime);
};

} // namespace lldb_private

#endif // liblldb_JavaLanguageRuntime_h_
1 change: 1 addition & 0 deletions lldb/source/Plugins/SymbolFile/DWARF/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ add_lldb_library(lldbPluginSymbolFileDWARF
DWARFAbbreviationDeclaration.cpp
DWARFASTParserClang.cpp
DWARFASTParserGo.cpp
DWARFASTParserJava.cpp
DWARFAttribute.cpp
DWARFCompileUnit.cpp
DWARFDataExtractor.cpp
Expand Down
553 changes: 553 additions & 0 deletions lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserJava.cpp

Large diffs are not rendered by default.

90 changes: 90 additions & 0 deletions lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserJava.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
//===-- DWARFASTParserJava.h ------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef SymbolFileDWARF_DWARFASTParserJava_h_
#define SymbolFileDWARF_DWARFASTParserJava_h_

// C Includes
// C++ Includes
// Other libraries and framework includes
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallVector.h"

// Project includes
#include "DWARFASTParser.h"
#include "DWARFDIE.h"
#include "DWARFDefines.h"
#include "lldb/Core/PluginInterface.h"
#include "lldb/Symbol/JavaASTContext.h"

class DWARFDebugInfoEntry;
class DWARFDIECollection;

class DWARFASTParserJava : public DWARFASTParser
{
public:
DWARFASTParserJava(lldb_private::JavaASTContext &ast);
~DWARFASTParserJava() override;

lldb::TypeSP
ParseTypeFromDWARF(const lldb_private::SymbolContext &sc, const DWARFDIE &die, lldb_private::Log *log,
bool *type_is_new_ptr) override;

lldb_private::Function *
ParseFunctionFromDWARF(const lldb_private::SymbolContext &sc, const DWARFDIE &die) override;

bool
CompleteTypeFromDWARF(const DWARFDIE &die, lldb_private::Type *type,
lldb_private::CompilerType &java_type) override;

lldb_private::CompilerDeclContext
GetDeclContextForUIDFromDWARF(const DWARFDIE &die) override
{
return lldb_private::CompilerDeclContext();
}

lldb_private::CompilerDeclContext
GetDeclContextContainingUIDFromDWARF(const DWARFDIE &die) override
{
return lldb_private::CompilerDeclContext();
}

lldb_private::CompilerDecl
GetDeclForUIDFromDWARF(const DWARFDIE &die) override
{
return lldb_private::CompilerDecl();
}

std::vector<DWARFDIE>
GetDIEForDeclContext(lldb_private::CompilerDeclContext decl_context) override
{
return std::vector<DWARFDIE>();
}

void
ParseChildMembers(const DWARFDIE &parent_die, lldb_private::CompilerType &class_compiler_type);

private:
lldb_private::JavaASTContext &m_ast;

lldb::TypeSP
ParseBaseTypeFromDIE(const DWARFDIE &die);

lldb::TypeSP
ParseArrayTypeFromDIE(const DWARFDIE &die);

lldb::TypeSP
ParseReferenceTypeFromDIE(const DWARFDIE &die);

lldb::TypeSP
ParseClassTypeFromDIE(const DWARFDIE &die, bool &is_new_type);
};

#endif // SymbolFileDWARF_DWARFASTParserJava_h_
12 changes: 9 additions & 3 deletions lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1024,10 +1024,10 @@ DWARFCompileUnit::IndexPrivate (DWARFCompileUnit* dwarf_cu,
case DW_TAG_union_type:
case DW_TAG_typedef:
case DW_TAG_unspecified_type:
if (name && is_declaration == false)
{
if (name && !is_declaration)
types.Insert (ConstString(name), DIERef(cu_offset, die.GetOffset()));
}
if (mangled_cstr && !is_declaration)
types.Insert (ConstString(mangled_cstr), DIERef(cu_offset, die.GetOffset()));
break;

case DW_TAG_namespace:
Expand Down Expand Up @@ -1259,3 +1259,9 @@ DWARFCompileUnit::SetAddrBase(dw_addr_t addr_base, dw_offset_t base_obj_offset)
m_addr_base = addr_base;
m_base_obj_offset = base_obj_offset;
}

lldb::ByteOrder
DWARFCompileUnit::GetByteOrder() const
{
return m_dwarf2Data->GetObjectFile()->GetByteOrder();
}
2 changes: 2 additions & 0 deletions lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ class DWARFCompileUnit
void BuildAddressRangeTable (SymbolFileDWARF* dwarf2Data,
DWARFDebugAranges* debug_aranges);

lldb::ByteOrder
GetByteOrder() const;

lldb_private::TypeSystem *
GetTypeSystem();
Expand Down
1 change: 1 addition & 0 deletions lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ class SymbolFileDWARF : public lldb_private::SymbolFile, public lldb_private::Us
friend class DWARFCompileUnit;
friend class DWARFASTParserClang;
friend class DWARFASTParserGo;
friend class DWARFASTParserJava;

//------------------------------------------------------------------
// Static Functions
Expand Down
1 change: 1 addition & 0 deletions lldb/source/Symbol/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ add_lldb_library(lldbSymbol
Function.cpp
FuncUnwinders.cpp
GoASTContext.cpp
JavaASTContext.cpp
LineEntry.cpp
LineTable.cpp
ObjectFile.cpp
Expand Down
1,520 changes: 1,520 additions & 0 deletions lldb/source/Symbol/JavaASTContext.cpp

Large diffs are not rendered by default.