Update for libunwindstack shared_ptr MapInfos.

Bug: 120606663

Test: Malloc debug unit tests pass.
Change-Id: Ic8fa25c770953ebc0a78d67e54bc0d7b8e0abd87
Merged-In: Ic8fa25c770953ebc0a78d67e54bc0d7b8e0abd87
(cherry picked from commit 04233539b49d699972ec16277764513cb170c912)
diff --git a/libc/malloc_debug/UnwindBacktrace.cpp b/libc/malloc_debug/UnwindBacktrace.cpp
index 128991b..dbaebb3 100644
--- a/libc/malloc_debug/UnwindBacktrace.cpp
+++ b/libc/malloc_debug/UnwindBacktrace.cpp
@@ -87,7 +87,7 @@
 void UnwindLog(const std::vector<unwindstack::LocalFrameData>& frame_info) {
   for (size_t i = 0; i < frame_info.size(); i++) {
     const unwindstack::LocalFrameData* info = &frame_info[i];
-    unwindstack::MapInfo* map_info = info->map_info;
+    std::shared_ptr<unwindstack::MapInfo> map_info = info->map_info;
 
     std::string line = android::base::StringPrintf("          #%0zd  pc %" PAD_PTR "  ", i, info->rel_pc);
     if (map_info->offset() != 0) {
diff --git a/libc/malloc_debug/tests/malloc_debug_unit_tests.cpp b/libc/malloc_debug/tests/malloc_debug_unit_tests.cpp
index 1298df7..7b58f31 100644
--- a/libc/malloc_debug/tests/malloc_debug_unit_tests.cpp
+++ b/libc/malloc_debug/tests/malloc_debug_unit_tests.cpp
@@ -1528,19 +1528,18 @@
 TEST_F(MallocDebugTest, backtrace_full_dump_on_exit) {
   pid_t pid;
   if ((pid = fork()) == 0) {
+    std::shared_ptr<unwindstack::MapInfo> empty_map;
     Init("backtrace=4 backtrace_full backtrace_dump_on_exit");
+    BacktraceUnwindFake(std::vector<unwindstack::LocalFrameData>{
+        {empty_map, 0x1100, 0x100, "fake1", 10}, {empty_map, 0x1200, 0x200, "fake2", 20}});
+    std::shared_ptr<unwindstack::MapInfo> map_info =
+        unwindstack::MapInfo::Create(0x10000, 0x20000, 0, PROT_READ | PROT_EXEC, "/data/fake.so");
+    BacktraceUnwindFake(std::vector<unwindstack::LocalFrameData>{
+        {map_info, 0x1a000, 0xa000, "level1", 0}, {map_info, 0x1b000, 0xb000, "level2", 10}});
     BacktraceUnwindFake(
-      std::vector<unwindstack::LocalFrameData>{{nullptr, 0x1100, 0x100, "fake1", 10},
-                                               {nullptr, 0x1200, 0x200, "fake2", 20}});
-    unwindstack::MapInfo map_info{nullptr, nullptr, 0x10000, 0x20000, 0,
-                                  PROT_READ | PROT_EXEC, "/data/fake.so"};
-    BacktraceUnwindFake(
-      std::vector<unwindstack::LocalFrameData>{{&map_info, 0x1a000, 0xa000, "level1", 0},
-                                               {&map_info, 0x1b000, 0xb000, "level2", 10}});
-    BacktraceUnwindFake(
-      std::vector<unwindstack::LocalFrameData>{{nullptr, 0x1a000, 0xa000, "func1", 0},
-                                               {nullptr, 0x1b000, 0xb000, "func2", 10},
-                                               {nullptr, 0x1c000, 0xc000, "", 30}});
+        std::vector<unwindstack::LocalFrameData>{{empty_map, 0x1a000, 0xa000, "func1", 0},
+                                                 {empty_map, 0x1b000, 0xb000, "func2", 10},
+                                                 {empty_map, 0x1c000, 0xc000, "", 30}});
 
     std::vector<void*> pointers;
     pointers.push_back(debug_malloc(300));