summaryrefslogtreecommitdiff
path: root/compiler/optimizing/graph_visualizer.cc
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2021-01-04 12:39:00 -0800
committerLinux Build Service Account <lnxbuild@localhost>2021-01-04 12:39:00 -0800
commiteacda6029afc6c588d35db50f87b3cd8c3e94397 (patch)
treed115b52e97c3af0f635f4f77782582b40f784d6a /compiler/optimizing/graph_visualizer.cc
parent116fbc6ed70876411ed8bb0e5b45d53dd1c68376 (diff)
parentbe2232e2e69d2f40313eaca3bc6f42122c767997 (diff)
Merge be2232e2e69d2f40313eaca3bc6f42122c767997 on remote branch
Change-Id: I8d7a261e5f72e9f33dff4dc4c26139d3a9ebc1ee
Diffstat (limited to 'compiler/optimizing/graph_visualizer.cc')
-rw-r--r--compiler/optimizing/graph_visualizer.cc19
1 files changed, 16 insertions, 3 deletions
diff --git a/compiler/optimizing/graph_visualizer.cc b/compiler/optimizing/graph_visualizer.cc
index 922a6f6700..f9c63c4486 100644
--- a/compiler/optimizing/graph_visualizer.cc
+++ b/compiler/optimizing/graph_visualizer.cc
@@ -23,6 +23,7 @@
#include "android-base/stringprintf.h"
#include "art_method.h"
+#include "art_method-inl.h"
#include "base/intrusive_forward_list.h"
#include "bounds_check_elimination.h"
#include "builder.h"
@@ -109,13 +110,17 @@ std::ostream& operator<<(std::ostream& os, const StringList& list) {
}
}
+#ifndef ART_STATIC_LIBART_COMPILER
using create_disasm_prototype = Disassembler*(InstructionSet, DisassemblerOptions*);
+#endif
+
class HGraphVisualizerDisassembler {
public:
HGraphVisualizerDisassembler(InstructionSet instruction_set,
const uint8_t* base_address,
const uint8_t* end_address)
: instruction_set_(instruction_set), disassembler_(nullptr) {
+#ifndef ART_STATIC_LIBART_COMPILER
constexpr const char* libart_disassembler_so_name =
kIsDebugBuild ? "libartd-disassembler.so" : "libart-disassembler.so";
libart_disassembler_handle_ = dlopen(libart_disassembler_so_name, RTLD_NOW);
@@ -131,10 +136,11 @@ class HGraphVisualizerDisassembler {
<< libart_disassembler_so_name << ": " << dlerror();
return;
}
+#endif
// Reading the disassembly from 0x0 is easier, so we print relative
// addresses. We will only disassemble the code once everything has
// been generated, so we can read data in literal pools.
- disassembler_ = std::unique_ptr<Disassembler>((*create_disassembler)(
+ disassembler_ = std::unique_ptr<Disassembler>(create_disassembler(
instruction_set,
new DisassemblerOptions(/* absolute_addresses= */ false,
base_address,
@@ -148,9 +154,11 @@ class HGraphVisualizerDisassembler {
~HGraphVisualizerDisassembler() {
// We need to call ~Disassembler() before we close the library.
disassembler_.reset();
+#ifndef ART_STATIC_LIBART_COMPILER
if (libart_disassembler_handle_ != nullptr) {
dlclose(libart_disassembler_handle_);
}
+#endif
}
void Disassemble(std::ostream& output, size_t start, size_t end) const {
@@ -171,7 +179,9 @@ class HGraphVisualizerDisassembler {
InstructionSet instruction_set_;
std::unique_ptr<Disassembler> disassembler_;
+#ifndef ART_STATIC_LIBART_COMPILER
void* libart_disassembler_handle_;
+#endif
};
@@ -456,7 +466,7 @@ class HGraphVisualizerPrinter : public HGraphDelegateVisitor {
}
void VisitInvoke(HInvoke* invoke) override {
- StartAttributeStream("dex_file_index") << invoke->GetDexMethodIndex();
+ StartAttributeStream("dex_file_index") << invoke->GetMethodReference().index;
ArtMethod* method = invoke->GetResolvedMethod();
// We don't print signatures, which conflict with c1visualizer format.
static constexpr bool kWithSignature = false;
@@ -464,12 +474,15 @@ class HGraphVisualizerPrinter : public HGraphDelegateVisitor {
// other invokes might be coming from inlined methods.
ScopedObjectAccess soa(Thread::Current());
std::string method_name = (method == nullptr)
- ? GetGraph()->GetDexFile().PrettyMethod(invoke->GetDexMethodIndex(), kWithSignature)
+ ? invoke->GetMethodReference().PrettyMethod(kWithSignature)
: method->PrettyMethod(kWithSignature);
StartAttributeStream("method_name") << method_name;
StartAttributeStream("always_throws") << std::boolalpha
<< invoke->AlwaysThrows()
<< std::noboolalpha;
+ if (method != nullptr) {
+ StartAttributeStream("method_index") << method->GetMethodIndex();
+ }
}
void VisitInvokeUnresolved(HInvokeUnresolved* invoke) override {