diff options
author | Tamas Berghammer <tberghammer@google.com> | 2016-02-26 14:21:23 +0000 |
---|---|---|
committer | Tamas Berghammer <tberghammer@google.com> | 2016-02-26 14:21:23 +0000 |
commit | 87a9769e9b2106a2b5c94b70ed9fa3671a0f8b73 (patch) | |
tree | 7efe5a19551ee8f19eee4caab98fea3218e38285 /lldb/source/Plugins/Language/Java/JavaFormatterFunctions.cpp | |
parent | 5b42c7aa25b826747318824340ff229a60670b42 (diff) | |
download | bcm5719-llvm-87a9769e9b2106a2b5c94b70ed9fa3671a0f8b73.tar.gz bcm5719-llvm-87a9769e9b2106a2b5c94b70ed9fa3671a0f8b73.zip |
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
Diffstat (limited to 'lldb/source/Plugins/Language/Java/JavaFormatterFunctions.cpp')
-rw-r--r-- | lldb/source/Plugins/Language/Java/JavaFormatterFunctions.cpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/lldb/source/Plugins/Language/Java/JavaFormatterFunctions.cpp b/lldb/source/Plugins/Language/Java/JavaFormatterFunctions.cpp new file mode 100644 index 00000000000..ab368b33fbc --- /dev/null +++ b/lldb/source/Plugins/Language/Java/JavaFormatterFunctions.cpp @@ -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; +} |