#include <limits>
#include <vector>
-#include <base/logging.h>
+#include <android-base/logging.h>
#include "environment.h"
+#include "read_apk.h"
#include "read_elf.h"
#include "utils.h"
case DSO_KERNEL_MODULE:
result = LoadKernelModule();
break;
- case DSO_ELF_FILE:
- result = LoadElfFile();
+ case DSO_ELF_FILE: {
+ if (std::get<0>(SplitUrlInApk(path_))) {
+ result = LoadEmbeddedElfFile();
+ } else {
+ result = LoadElfFile();
+ }
break;
+ }
}
if (result) {
std::sort(symbols_.begin(), symbols_.end(), SymbolComparator());
return loaded;
}
+bool Dso::LoadEmbeddedElfFile() {
+ std::string path = GetAccessiblePath();
+ BuildId build_id = GetExpectedBuildId(path);
+ auto tuple = SplitUrlInApk(path);
+ CHECK(std::get<0>(tuple));
+ return ParseSymbolsFromApkFile(std::get<1>(tuple), std::get<2>(tuple), build_id,
+ std::bind(ElfFileSymbolCallback, std::placeholders::_1,
+ this, SymbolFilterForDso));
+}
+
void Dso::InsertSymbol(const Symbol& symbol) {
symbols_.push_back(symbol);
}