Make `libart(d)-disassembler` a requirement of `libart(d)-compiler`.
The constructor of `art::HGraphVisualizerDisassembler` (which is part
of `libart(d)-compiler.so`) may dynamically load
`libart(d)-disassembler.so`; add `libart(d)-disassembler` to the
`runtime_libs` property of module `libart(d)-compiler` to make sure
the former can be found.
Also promote the failure to dynamically load
`libart(s)-disassembler.so` in
`art::HGraphVisualizerDisassembler::HGraphVisualizerDisassembler` from
`WARNING` to `ERROR`.
Test: art/tools/buildbot-build.sh --host \
&& art/test/testrunner/testrunner.py --host --optimizing \
-t 640-checker-integer-valueof
Bug: 149749169
Change-Id: I307bdf8b71e47ed8da1d6d62ab688c500b3f9c80
diff --git a/build/apex/art_apex_test.py b/build/apex/art_apex_test.py
index b86abf3..e0b28bd 100755
--- a/build/apex/art_apex_test.py
+++ b/build/apex/art_apex_test.py
@@ -500,6 +500,7 @@
self._checker.check_native_library('libart')
self._checker.check_native_library('libart-compiler')
self._checker.check_native_library('libart-dexlayout')
+ self._checker.check_native_library('libart-disassembler')
self._checker.check_native_library('libartbase')
self._checker.check_native_library('libartpalette')
self._checker.check_native_library('libdexfile')
diff --git a/compiler/Android.bp b/compiler/Android.bp
index c7a6ec2..cbfff89 100644
--- a/compiler/Android.bp
+++ b/compiler/Android.bp
@@ -234,6 +234,11 @@
"libdexfile",
],
whole_static_libs: ["libelffile"],
+ runtime_libs: [
+ // `art::HGraphVisualizerDisassembler::HGraphVisualizerDisassembler` may dynamically load
+ // `libart-disassembler.so`.
+ "libart-disassembler",
+ ],
target: {
android: {
@@ -310,6 +315,12 @@
"libdexfiled",
],
whole_static_libs: ["libelffiled"],
+ runtime_libs: [
+ // `art::HGraphVisualizerDisassembler::HGraphVisualizerDisassembler` may dynamically load
+ // `libartd-disassembler.so`.
+ "libartd-disassembler",
+ ],
+
apex_available: [
"com.android.art.debug",
],
diff --git a/compiler/optimizing/graph_visualizer.cc b/compiler/optimizing/graph_visualizer.cc
index 9419c8d..d94c1fa 100644
--- a/compiler/optimizing/graph_visualizer.cc
+++ b/compiler/optimizing/graph_visualizer.cc
@@ -113,16 +113,19 @@
const uint8_t* base_address,
const uint8_t* end_address)
: instruction_set_(instruction_set), disassembler_(nullptr) {
- libart_disassembler_handle_ =
- dlopen(kIsDebugBuild ? "libartd-disassembler.so" : "libart-disassembler.so", RTLD_NOW);
+ constexpr const char* libart_disassembler_so_name =
+ kIsDebugBuild ? "libartd-disassembler.so" : "libart-disassembler.so";
+ libart_disassembler_handle_ = dlopen(libart_disassembler_so_name, RTLD_NOW);
if (libart_disassembler_handle_ == nullptr) {
- LOG(WARNING) << "Failed to dlopen libart-disassembler: " << dlerror();
+ LOG(ERROR) << "Failed to dlopen " << libart_disassembler_so_name << ": " << dlerror();
return;
}
+ constexpr const char* create_disassembler_symbol = "create_disassembler";
create_disasm_prototype* create_disassembler = reinterpret_cast<create_disasm_prototype*>(
- dlsym(libart_disassembler_handle_, "create_disassembler"));
+ dlsym(libart_disassembler_handle_, create_disassembler_symbol));
if (create_disassembler == nullptr) {
- LOG(WARNING) << "Could not find create_disassembler entry: " << dlerror();
+ LOG(ERROR) << "Could not find " << create_disassembler_symbol << " entry in "
+ << libart_disassembler_so_name << ": " << dlerror();
return;
}
// Reading the disassembly from 0x0 is easier, so we print relative