From 87a9769e9b2106a2b5c94b70ed9fa3671a0f8b73 Mon Sep 17 00:00:00 2001 From: Tamas Berghammer Date: Fri, 26 Feb 2016 14:21:23 +0000 Subject: Add a set of new plugins to handle Java debugging The purpose of these plugins is to make LLDB capable of debugging java code JIT-ed by the android runtime. Differential revision: http://reviews.llvm.org/D17616 llvm-svn: 262015 --- lldb/source/Plugins/Language/Java/JavaLanguage.cpp | 99 ++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 lldb/source/Plugins/Language/Java/JavaLanguage.cpp (limited to 'lldb/source/Plugins/Language/Java/JavaLanguage.cpp') diff --git a/lldb/source/Plugins/Language/Java/JavaLanguage.cpp b/lldb/source/Plugins/Language/Java/JavaLanguage.cpp new file mode 100644 index 00000000000..eefc2efb718 --- /dev/null +++ b/lldb/source/Plugins/Language/Java/JavaLanguage.cpp @@ -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 +// C++ Includes +#include +#include + +// 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; +} -- cgit v1.2.3