Merge "Fix symbol resolution within a dex file." am: 0ce76f910b am: 4132278874
am: 6da71aaaee
Change-Id: If3c5628fec3cf1b47ceb9f51b1fdfe0d82c474e1
diff --git a/libunwindstack/DexFiles.cpp b/libunwindstack/DexFiles.cpp
index 3d67a6a..fe6d3c6 100644
--- a/libunwindstack/DexFiles.cpp
+++ b/libunwindstack/DexFiles.cpp
@@ -52,9 +52,9 @@
return dex_file;
}
-void DexFiles::GetMethodInformation(uint64_t dex_offset, MapInfo* info, std::string* method_name,
- uint64_t* method_offset) {
- DexFile* dex_file = GetDexFile(dex_offset, info);
+void DexFiles::GetMethodInformation(uint64_t dex_file_offset, uint64_t dex_offset, MapInfo* info,
+ std::string* method_name, uint64_t* method_offset) {
+ DexFile* dex_file = GetDexFile(dex_file_offset, info);
if (dex_file != nullptr) {
dex_file->GetMethodInformation(dex_offset, method_name, method_offset);
}
diff --git a/libunwindstack/Unwinder.cpp b/libunwindstack/Unwinder.cpp
index d22e1e8..db8278e 100644
--- a/libunwindstack/Unwinder.cpp
+++ b/libunwindstack/Unwinder.cpp
@@ -95,7 +95,8 @@
}
#if !defined(NO_LIBDEXFILE_SUPPORT)
- dex_files_->GetMethodInformation(dex_offset, info, &frame->function_name, &frame->function_offset);
+ dex_files_->GetMethodInformation(dex_pc - dex_offset, dex_offset, info, &frame->function_name,
+ &frame->function_offset);
#endif
}
diff --git a/libunwindstack/include/unwindstack/DexFiles.h b/libunwindstack/include/unwindstack/DexFiles.h
index d80e9b7..50c9c32 100644
--- a/libunwindstack/include/unwindstack/DexFiles.h
+++ b/libunwindstack/include/unwindstack/DexFiles.h
@@ -38,10 +38,10 @@
explicit DexFiles(std::shared_ptr<Memory>& memory);
~DexFiles();
- DexFile* GetDexFile(uint64_t dex_offset, MapInfo* info);
+ DexFile* GetDexFile(uint64_t dex_file_offset, MapInfo* info);
- void GetMethodInformation(uint64_t dex_offset, MapInfo* info, std::string* method_name,
- uint64_t* method_offset);
+ void GetMethodInformation(uint64_t dex_file_offset, uint64_t dex_offset, MapInfo* info,
+ std::string* method_name, uint64_t* method_offset);
void SetArch(ArchEnum arch);