Update for MapInfo objects in frame data.
The frame data no longer contains map_XXX fields which represent
the map data. Now there is only a shared pointer to the MapInfo
object with which this frame is associated.
Bug: 120606663
Test: Compiles.
Change-Id: I1faf83a1023fe8344c16807599397ecceba2ccd2
diff --git a/runtime/backtrace_helper.cc b/runtime/backtrace_helper.cc
index 74e6130..d76a501 100644
--- a/runtime/backtrace_helper.cc
+++ b/runtime/backtrace_helper.cc
@@ -99,12 +99,19 @@
if (kStrictUnwindChecks) {
std::vector<unwindstack::FrameData>& frames = unwinder->frames();
LOG(ERROR) << "Failed to unwind stack (error " << unwinder->LastErrorCodeString() << "):";
- for (auto it = frames.begin(); it != frames.end(); it++) {
- if (it == frames.begin() || std::prev(it)->map_name != it->map_name) {
- LOG(ERROR) << " in " << it->map_name.c_str();
+ std::string prev_name;
+ for (auto& frame : frames) {
+ if (frame.map_info != nullptr) {
+ std::string full_name = frame.map_info->GetFullName();
+ if (prev_name != full_name) {
+ LOG(ERROR) << " in " << full_name;
+ }
+ prev_name = full_name;
+ } else {
+ prev_name = "";
}
LOG(ERROR) << " pc " << std::setw(8) << std::setfill('0') << std::hex <<
- it->rel_pc << " " << it->function_name.c_str();
+ frame.rel_pc << " " << frame.function_name.c_str();
}
LOG(FATAL);
}