Fix handling of libs with a ro map and a rx map.
When the linker was changed so that it put a read-only map and
read-execute map, this code incorrectly computed the relative pc and
offset. Modify to look for the actual start map in this case.
Also, change the load_base name to load_bias.
Bug: 120613266
Test: Dumped logcat while dumping backtraces.
Change-Id: I6628694c5222ea34d63217af3d138707d4900004
diff --git a/libc/malloc_debug/MapData.h b/libc/malloc_debug/MapData.h
index b9b697c..5b08b90 100644
--- a/libc/malloc_debug/MapData.h
+++ b/libc/malloc_debug/MapData.h
@@ -37,17 +37,20 @@
#include <private/bionic_macros.h>
struct MapEntry {
- MapEntry(uintptr_t start, uintptr_t end, uintptr_t offset, const char* name, size_t name_len)
- : start(start), end(end), offset(offset), name(name, name_len) {}
+ MapEntry(uintptr_t start, uintptr_t end, uintptr_t offset, const char* name, size_t name_len, int flags)
+ : start(start), end(end), offset(offset), name(name, name_len), flags(flags) {}
explicit MapEntry(uintptr_t pc) : start(pc), end(pc) {}
uintptr_t start;
uintptr_t end;
uintptr_t offset;
- uintptr_t load_base;
- bool load_base_read = false;
+ uintptr_t load_bias;
+ uintptr_t elf_start_offset = 0;
std::string name;
+ int flags;
+ bool init = false;
+ bool valid = false;
};
// Ordering comparator that returns equivalence for overlapping entries