summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Srbecky <dsrbecky@google.com>2021-05-13 10:08:15 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-05-13 10:08:15 +0000
commit96809dad05354ef97798c30fa76551587a5e62ef (patch)
tree5689c81858d587a016b3b6fe4cabcb0f81fee753
parent3387c8d256383069f78b05a4dd7c09ad3854a2d0 (diff)
parent01372e33617b21f71b45dc843e6af0dd56df8a54 (diff)
downloadunwinding-96809dad05354ef97798c30fa76551587a5e62ef.tar.gz
MapInfo: Add get accessors for the fields am: 01372e3361
Original change: https://android-review.googlesource.com/c/platform/system/unwinding/+/1705381 Change-Id: I6ee73ed64ce57c263531574978b672e4bc436517
-rw-r--r--libbacktrace/UnwindStackMap.cpp12
-rw-r--r--libunwindstack/DexFile.cpp14
-rw-r--r--libunwindstack/Elf.cpp28
-rw-r--r--libunwindstack/Global.cpp14
-rw-r--r--libunwindstack/LocalUnwinder.cpp2
-rw-r--r--libunwindstack/MapInfo.cpp118
-rw-r--r--libunwindstack/Maps.cpp24
-rw-r--r--libunwindstack/Unwinder.cpp58
-rw-r--r--libunwindstack/benchmarks/ElfBenchmark.cpp6
-rw-r--r--libunwindstack/include/unwindstack/MapInfo.h15
-rw-r--r--libunwindstack/tests/DexFilesTest.cpp2
-rw-r--r--libunwindstack/tests/ElfCacheTest.cpp24
-rw-r--r--libunwindstack/tests/JitDebugTest.cpp2
-rw-r--r--libunwindstack/tests/LocalUnwinderTest.cpp12
-rw-r--r--libunwindstack/tests/LocalUpdatableMapsTest.cpp230
-rw-r--r--libunwindstack/tests/MapInfoCreateMemoryTest.cpp76
-rw-r--r--libunwindstack/tests/MapInfoGetBuildIDTest.cpp6
-rw-r--r--libunwindstack/tests/MapInfoGetElfTest.cpp28
-rw-r--r--libunwindstack/tests/MapInfoGetLoadBiasTest.cpp12
-rw-r--r--libunwindstack/tests/MapInfoTest.cpp38
-rw-r--r--libunwindstack/tests/MapsTest.cpp326
-rw-r--r--libunwindstack/tests/RegsTest.cpp2
-rw-r--r--libunwindstack/tests/UnwinderTest.cpp4
-rw-r--r--libunwindstack/tests/fuzz/UnwinderComponentCreator.cpp2
-rw-r--r--libunwindstack/tools/unwind_for_offline.cpp22
25 files changed, 546 insertions, 531 deletions
diff --git a/libbacktrace/UnwindStackMap.cpp b/libbacktrace/UnwindStackMap.cpp
index 478f6a5..7c15ed7 100644
--- a/libbacktrace/UnwindStackMap.cpp
+++ b/libbacktrace/UnwindStackMap.cpp
@@ -71,13 +71,13 @@ bool UnwindStackMap::Build() {
// Iterate through the maps and fill in the backtrace_map_t structure.
for (const auto& map_info : *stack_maps_) {
backtrace_map_t map;
- map.start = map_info->start_;
- map.end = map_info->end_;
- map.offset = map_info->offset_;
+ map.start = map_info->start();
+ map.end = map_info->end();
+ map.offset = map_info->offset();
// Set to -1 so that it is demand loaded.
map.load_bias = static_cast<uint64_t>(-1);
- map.flags = map_info->flags_;
- map.name = map_info->name_;
+ map.flags = map_info->flags();
+ map.name = map_info->name();
maps_.push_back(map);
}
@@ -117,7 +117,7 @@ std::string UnwindStackMap::GetFunctionName(uint64_t pc, uint64_t* offset) {
// Get the map for this
unwindstack::MapInfo* map_info = maps->Find(pc);
- if (map_info == nullptr || map_info->flags_ & PROT_DEVICE_MAP) {
+ if (map_info == nullptr || map_info->flags() & PROT_DEVICE_MAP) {
return "";
}
diff --git a/libunwindstack/DexFile.cpp b/libunwindstack/DexFile.cpp
index a66e6fd..c3e53c7 100644
--- a/libunwindstack/DexFile.cpp
+++ b/libunwindstack/DexFile.cpp
@@ -48,20 +48,20 @@ static bool CheckDexSupport() {
}
std::shared_ptr<DexFile> DexFile::CreateFromDisk(uint64_t addr, uint64_t size, MapInfo* map) {
- if (map == nullptr || map->name_.empty()) {
+ if (map == nullptr || map->name().empty()) {
return nullptr; // MapInfo not backed by file.
}
- if (!(map->start_ <= addr && addr < map->end_)) {
+ if (!(map->start() <= addr && addr < map->end())) {
return nullptr; // addr is not in MapInfo range.
}
- if (size > (map->end_ - addr)) {
+ if (size > (map->end() - addr)) {
return nullptr; // size is past the MapInfo end.
}
- uint64_t offset_in_file = (addr - map->start_) + map->offset_;
+ uint64_t offset_in_file = (addr - map->start()) + map->offset();
// Fast-path: Check if the dex file was already mapped from disk.
std::lock_guard<std::mutex> guard(g_lock);
- MappedFileKey cache_key(map->name_, offset_in_file, size);
+ MappedFileKey cache_key(map->name(), offset_in_file, size);
std::weak_ptr<DexFileApi>& cache_entry = g_mapped_dex_files[cache_key];
std::shared_ptr<DexFileApi> dex_api = cache_entry.lock();
if (dex_api != nullptr) {
@@ -69,12 +69,12 @@ std::shared_ptr<DexFile> DexFile::CreateFromDisk(uint64_t addr, uint64_t size, M
}
// Load the file from disk and cache it.
- std::unique_ptr<Memory> memory = Memory::CreateFileMemory(map->name_, offset_in_file, size);
+ std::unique_ptr<Memory> memory = Memory::CreateFileMemory(map->name(), offset_in_file, size);
if (memory == nullptr) {
return nullptr; // failed to map the file.
}
std::unique_ptr<art_api::dex::DexFile> dex;
- art_api::dex::DexFile::Create(memory->GetPtr(), size, nullptr, map->name_.c_str(), &dex);
+ art_api::dex::DexFile::Create(memory->GetPtr(), size, nullptr, map->name().c_str(), &dex);
if (dex == nullptr) {
return nullptr; // invalid DEX file.
}
diff --git a/libunwindstack/Elf.cpp b/libunwindstack/Elf.cpp
index 47373fd..4dec11e 100644
--- a/libunwindstack/Elf.cpp
+++ b/libunwindstack/Elf.cpp
@@ -102,7 +102,7 @@ std::string Elf::GetSoname() {
}
uint64_t Elf::GetRelPc(uint64_t pc, const MapInfo* map_info) {
- return pc - map_info->start_ + load_bias_ + map_info->elf_offset_;
+ return pc - map_info->start() + load_bias_ + map_info->elf_offset();
}
bool Elf::GetFunctionName(uint64_t addr, SharedString* name, uint64_t* func_offset) {
@@ -376,24 +376,24 @@ void Elf::CacheAdd(MapInfo* info) {
// where each reference the entire boot.odex, the cache will properly
// use the same cached elf object.
- if (info->offset_ == 0 || info->elf_offset_ != 0) {
- (*cache_)[info->name_] = std::make_pair(info->elf_, true);
+ if (info->offset() == 0 || info->elf_offset() != 0) {
+ (*cache_)[info->name()] = std::make_pair(info->elf(), true);
}
- if (info->offset_ != 0) {
+ if (info->offset() != 0) {
// The second element in the pair indicates whether elf_offset should
// be set to offset when getting out of the cache.
- std::string key = std::string(info->name_) + ':' + std::to_string(info->offset_);
- (*cache_)[key] = std::make_pair(info->elf_, info->elf_offset_ != 0);
+ std::string key = std::string(info->name()) + ':' + std::to_string(info->offset());
+ (*cache_)[key] = std::make_pair(info->elf(), info->elf_offset() != 0);
}
}
bool Elf::CacheAfterCreateMemory(MapInfo* info) {
- if (info->name_.empty() || info->offset_ == 0 || info->elf_offset_ == 0) {
+ if (info->name().empty() || info->offset() == 0 || info->elf_offset() == 0) {
return false;
}
- auto entry = cache_->find(info->name_);
+ auto entry = cache_->find(info->name());
if (entry == cache_->end()) {
return false;
}
@@ -402,21 +402,21 @@ bool Elf::CacheAfterCreateMemory(MapInfo* info) {
// been cached. Add an entry at name:offset to get this directly out
// of the cache next time.
info->elf_ = entry->second.first;
- std::string key = std::string(info->name_) + ':' + std::to_string(info->offset_);
- (*cache_)[key] = std::make_pair(info->elf_, true);
+ std::string key = std::string(info->name()) + ':' + std::to_string(info->offset());
+ (*cache_)[key] = std::make_pair(info->elf(), true);
return true;
}
bool Elf::CacheGet(MapInfo* info) {
- std::string name(info->name_);
- if (info->offset_ != 0) {
- name += ':' + std::to_string(info->offset_);
+ std::string name(info->name());
+ if (info->offset() != 0) {
+ name += ':' + std::to_string(info->offset());
}
auto entry = cache_->find(name);
if (entry != cache_->end()) {
info->elf_ = entry->second.first;
if (entry->second.second) {
- info->elf_offset_ = info->offset_;
+ info->elf_offset_ = info->offset();
}
return true;
}
diff --git a/libunwindstack/Global.cpp b/libunwindstack/Global.cpp
index 1b0b110..b8adc5c 100644
--- a/libunwindstack/Global.cpp
+++ b/libunwindstack/Global.cpp
@@ -77,21 +77,21 @@ void Global::FindAndReadVariable(Maps* maps, const char* var_str) {
// f3000-f4000 2000 rw- /system/lib/libc.so
MapInfo* map_zero = nullptr;
for (const auto& info : *maps) {
- if (info->offset_ != 0 &&
- (info->flags_ & (PROT_READ | PROT_WRITE)) == (PROT_READ | PROT_WRITE) &&
- map_zero != nullptr && Searchable(info->name_) && info->name_ == map_zero->name_) {
+ if (info->offset() != 0 &&
+ (info->flags() & (PROT_READ | PROT_WRITE)) == (PROT_READ | PROT_WRITE) &&
+ map_zero != nullptr && Searchable(info->name()) && info->name() == map_zero->name()) {
Elf* elf = map_zero->GetElf(memory_, arch());
uint64_t ptr;
if (elf->GetGlobalVariableOffset(variable, &ptr) && ptr != 0) {
- uint64_t offset_end = info->offset_ + info->end_ - info->start_;
- if (ptr >= info->offset_ && ptr < offset_end) {
- ptr = info->start_ + ptr - info->offset_;
+ uint64_t offset_end = info->offset() + info->end() - info->start();
+ if (ptr >= info->offset() && ptr < offset_end) {
+ ptr = info->start() + ptr - info->offset();
if (ReadVariableData(ptr)) {
break;
}
}
}
- } else if (info->offset_ == 0 && !info->name_.empty()) {
+ } else if (info->offset() == 0 && !info->name().empty()) {
map_zero = info.get();
}
}
diff --git a/libunwindstack/LocalUnwinder.cpp b/libunwindstack/LocalUnwinder.cpp
index 02ce6b2..466dd68 100644
--- a/libunwindstack/LocalUnwinder.cpp
+++ b/libunwindstack/LocalUnwinder.cpp
@@ -107,7 +107,7 @@ bool LocalUnwinder::Unwind(std::vector<LocalFrameData>* frame_info, size_t max_f
}
// Skip any locations that are within this library.
- if (num_frames != 0 || !ShouldSkipLibrary(map_info->name_)) {
+ if (num_frames != 0 || !ShouldSkipLibrary(map_info->name())) {
// Add frame information.
SharedString func_name;
uint64_t func_offset;
diff --git a/libunwindstack/MapInfo.cpp b/libunwindstack/MapInfo.cpp
index 3be81f6..e25c788 100644
--- a/libunwindstack/MapInfo.cpp
+++ b/libunwindstack/MapInfo.cpp
@@ -37,11 +37,11 @@ namespace unwindstack {
bool MapInfo::InitFileMemoryFromPreviousReadOnlyMap(MemoryFileAtOffset* memory) {
// One last attempt, see if the previous map is read-only with the
// same name and stretches across this map.
- if (prev_real_map_ == nullptr || prev_real_map_->flags_ != PROT_READ) {
+ if (prev_real_map() == nullptr || prev_real_map()->flags() != PROT_READ) {
return false;
}
- uint64_t map_size = end_ - prev_real_map_->end_;
+ uint64_t map_size = end() - prev_real_map_->end();
if (!memory->Init(name_, prev_real_map_->offset_, map_size)) {
return false;
}
@@ -51,19 +51,19 @@ bool MapInfo::InitFileMemoryFromPreviousReadOnlyMap(MemoryFileAtOffset* memory)
return false;
}
- if (!memory->Init(name_, prev_real_map_->offset_, max_size)) {
+ if (!memory->Init(name(), prev_real_map()->offset(), max_size)) {
return false;
}
- elf_offset_ = offset_ - prev_real_map_->offset_;
- elf_start_offset_ = prev_real_map_->offset_;
+ elf_offset_ = offset() - prev_real_map_->offset();
+ elf_start_offset_ = prev_real_map_->offset();
return true;
}
Memory* MapInfo::GetFileMemory() {
std::unique_ptr<MemoryFileAtOffset> memory(new MemoryFileAtOffset);
- if (offset_ == 0) {
- if (memory->Init(name_, 0)) {
+ if (offset() == 0) {
+ if (memory->Init(name(), 0)) {
return memory.release();
}
return nullptr;
@@ -83,7 +83,7 @@ Memory* MapInfo::GetFileMemory() {
// and reinit to that size. This is needed because the dynamic linker
// only maps in a portion of the original elf, and never the symbol
// file data.
- uint64_t map_size = end_ - start_;
+ uint64_t map_size = end_ - start();
if (!memory->Init(name_, offset_, map_size)) {
return nullptr;
}
@@ -91,9 +91,9 @@ Memory* MapInfo::GetFileMemory() {
// Check if the start of this map is an embedded elf.
uint64_t max_size = 0;
if (Elf::GetInfo(memory.get(), &max_size)) {
- elf_start_offset_ = offset_;
+ elf_start_offset_ = offset();
if (max_size > map_size) {
- if (memory->Init(name_, offset_, max_size)) {
+ if (memory->Init(name(), offset(), max_size)) {
return memory.release();
}
// Try to reinit using the default map_size.
@@ -107,14 +107,14 @@ Memory* MapInfo::GetFileMemory() {
}
// No elf at offset, try to init as if the whole file is an elf.
- if (memory->Init(name_, 0) && Elf::IsValidElf(memory.get())) {
- elf_offset_ = offset_;
+ if (memory->Init(name(), 0) && Elf::IsValidElf(memory.get())) {
+ elf_offset_ = offset();
// Need to check how to set the elf start offset. If this map is not
// the r-x map of a r-- map, then use the real offset value. Otherwise,
// use 0.
- if (prev_real_map_ == nullptr || prev_real_map_->offset_ != 0 ||
- prev_real_map_->flags_ != PROT_READ || prev_real_map_->name_ != name_) {
- elf_start_offset_ = offset_;
+ if (prev_real_map_ == nullptr || prev_real_map_->offset() != 0 ||
+ prev_real_map_->flags() != PROT_READ || prev_real_map_->name() != name()) {
+ elf_start_offset_ = offset();
}
return memory.release();
}
@@ -134,19 +134,19 @@ Memory* MapInfo::GetFileMemory() {
}
Memory* MapInfo::CreateMemory(const std::shared_ptr<Memory>& process_memory) {
- if (end_ <= start_) {
+ if (end() <= start()) {
return nullptr;
}
elf_offset_ = 0;
// Fail on device maps.
- if (flags_ & MAPS_FLAGS_DEVICE_MAP) {
+ if (flags() & MAPS_FLAGS_DEVICE_MAP) {
return nullptr;
}
// First try and use the file associated with the info.
- if (!name_.empty()) {
+ if (!name().empty()) {
Memory* memory = GetFileMemory();
if (memory != nullptr) {
return memory;
@@ -164,12 +164,12 @@ Memory* MapInfo::CreateMemory(const std::shared_ptr<Memory>& process_memory) {
// map. In this case, there will be another read-only map that includes the
// first part of the elf file. This is done if the linker rosegment
// option is used.
- std::unique_ptr<MemoryRange> memory(new MemoryRange(process_memory, start_, end_ - start_, 0));
+ std::unique_ptr<MemoryRange> memory(new MemoryRange(process_memory, start(), end_ - start(), 0));
if (Elf::IsValidElf(memory.get())) {
// Might need to peek at the next map to create a memory object that
// includes that map too.
- if (offset_ != 0 || name_.empty() || next_real_map_ == nullptr ||
- offset_ >= next_real_map_->offset_ || next_real_map_->name_ != name_) {
+ if (offset() != 0 || name_.empty() || next_real_map() == nullptr ||
+ offset() >= next_real_map()->offset() || next_real_map()->name_ != name_) {
return memory.release();
}
@@ -178,10 +178,10 @@ Memory* MapInfo::CreateMemory(const std::shared_ptr<Memory>& process_memory) {
// redo the work. If this happens, the elf for this map will eventually
// be discarded.
MemoryRanges* ranges = new MemoryRanges;
- ranges->Insert(new MemoryRange(process_memory, start_, end_ - start_, 0));
- ranges->Insert(new MemoryRange(process_memory, next_real_map_->start_,
- next_real_map_->end_ - next_real_map_->start_,
- next_real_map_->offset_ - offset_));
+ ranges->Insert(new MemoryRange(process_memory, start(), end() - start(), 0));
+ ranges->Insert(new MemoryRange(process_memory, next_real_map()->start(),
+ next_real_map()->end() - next_real_map()->start(),
+ next_real_map()->offset() - offset()));
return ranges;
}
@@ -190,22 +190,22 @@ Memory* MapInfo::CreateMemory(const std::shared_ptr<Memory>& process_memory) {
// doesn't guarantee that this invariant will always be true. However,
// if that changes, there is likely something else that will change and
// break something.
- if (offset_ == 0 || name_.empty() || prev_real_map_ == nullptr ||
- prev_real_map_->name_ != name_ || prev_real_map_->offset_ >= offset_) {
+ if (offset() == 0 || name_.empty() || prev_real_map_ == nullptr ||
+ prev_real_map_->name_ != name_ || prev_real_map_->offset() >= offset()) {
memory_backed_elf_ = false;
return nullptr;
}
// Make sure that relative pc values are corrected properly.
- elf_offset_ = offset_ - prev_real_map_->offset_;
+ elf_offset_ = offset() - prev_real_map_->offset();
// Use this as the elf start offset, otherwise, you always get offsets into
// the r-x section, which is not quite the right information.
- elf_start_offset_ = prev_real_map_->offset_;
+ elf_start_offset_ = prev_real_map_->offset();
MemoryRanges* ranges = new MemoryRanges;
- ranges->Insert(new MemoryRange(process_memory, prev_real_map_->start_,
- prev_real_map_->end_ - prev_real_map_->start_, 0));
- ranges->Insert(new MemoryRange(process_memory, start_, end_ - start_, elf_offset_));
+ ranges->Insert(new MemoryRange(process_memory, prev_real_map()->start(),
+ prev_real_map()->end() - prev_real_map()->start(), 0));
+ ranges->Insert(new MemoryRange(process_memory, start(), end() - start(), elf_offset_));
return ranges;
}
@@ -215,17 +215,17 @@ Elf* MapInfo::GetElf(const std::shared_ptr<Memory>& process_memory, ArchEnum exp
// Make sure no other thread is trying to add the elf to this map.
std::lock_guard<std::mutex> guard(mutex_);
- if (elf_.get() != nullptr) {
- return elf_.get();
+ if (elf().get() != nullptr) {
+ return elf().get();
}
bool locked = false;
- if (Elf::CachingEnabled() && !name_.empty()) {
+ if (Elf::CachingEnabled() && !name().empty()) {
Elf::CacheLock();
locked = true;
if (Elf::CacheGet(this)) {
Elf::CacheUnlock();
- return elf_.get();
+ return elf().get();
}
}
@@ -234,16 +234,16 @@ Elf* MapInfo::GetElf(const std::shared_ptr<Memory>& process_memory, ArchEnum exp
if (Elf::CacheAfterCreateMemory(this)) {
delete memory;
Elf::CacheUnlock();
- return elf_.get();
+ return elf().get();
}
}
- elf_.reset(new Elf(memory));
+ elf().reset(new Elf(memory));
// If the init fails, keep the elf around as an invalid object so we
// don't try to reinit the object.
- elf_->Init();
- if (elf_->valid() && expected_arch != elf_->arch()) {
+ elf()->Init();
+ if (elf()->valid() && expected_arch != elf()->arch()) {
// Make the elf invalid, mismatch between arch and expected arch.
- elf_->Invalidate();
+ elf()->Invalidate();
}
if (locked) {
@@ -252,40 +252,40 @@ Elf* MapInfo::GetElf(const std::shared_ptr<Memory>& process_memory, ArchEnum exp
}
}
- if (!elf_->valid()) {
- elf_start_offset_ = offset_;
- } else if (prev_real_map_ != nullptr && elf_start_offset_ != offset_ &&
- prev_real_map_->offset_ == elf_start_offset_ && prev_real_map_->name_ == name_) {
+ if (!elf()->valid()) {
+ elf_start_offset_ = offset();
+ } else if (prev_real_map_ != nullptr && elf_start_offset_ != offset() &&
+ prev_real_map_->offset() == elf_start_offset_ && prev_real_map_->name_ == name_) {
// If there is a read-only map then a read-execute map that represents the
// same elf object, make sure the previous map is using the same elf
// object if it hasn't already been set.
std::lock_guard<std::mutex> guard(prev_real_map_->mutex_);
- if (prev_real_map_->elf_.get() == nullptr) {
- prev_real_map_->elf_ = elf_;
- prev_real_map_->memory_backed_elf_ = memory_backed_elf_;
+ if (prev_real_map()->elf().get() == nullptr) {
+ prev_real_map_->elf_ = elf();
+ prev_real_map()->memory_backed_elf_ = memory_backed_elf_;
} else {
// Discard this elf, and use the elf from the previous map instead.
- elf_ = prev_real_map_->elf_;
+ elf_ = prev_real_map_->elf();
}
}
- return elf_.get();
+ return elf().get();
}
bool MapInfo::GetFunctionName(uint64_t addr, SharedString* name, uint64_t* func_offset) {
{
// Make sure no other thread is trying to update this elf object.
std::lock_guard<std::mutex> guard(mutex_);
- if (elf_ == nullptr) {
+ if (elf() == nullptr) {
return false;
}
}
// No longer need the lock, once the elf object is created, it is not deleted
// until this object is deleted.
- return elf_->GetFunctionName(addr, name, func_offset);
+ return elf()->GetFunctionName(addr, name, func_offset);
}
uint64_t MapInfo::GetLoadBias(const std::shared_ptr<Memory>& process_memory) {
- int64_t cur_load_bias = load_bias_.load();
+ int64_t cur_load_bias = load_bias().load();
if (cur_load_bias != INT64_MAX) {
return cur_load_bias;
}
@@ -293,9 +293,9 @@ uint64_t MapInfo::GetLoadBias(const std::shared_ptr<Memory>& process_memory) {
{
// Make sure no other thread is trying to add the elf to this map.
std::lock_guard<std::mutex> guard(mutex_);
- if (elf_ != nullptr) {
- if (elf_->valid()) {
- cur_load_bias = elf_->GetLoadBias();
+ if (elf() != nullptr) {
+ if (elf()->valid()) {
+ cur_load_bias = elf()->GetLoadBias();
load_bias_ = cur_load_bias;
return cur_load_bias;
} else {
@@ -314,11 +314,11 @@ uint64_t MapInfo::GetLoadBias(const std::shared_ptr<Memory>& process_memory) {
}
MapInfo::~MapInfo() {
- delete build_id_.load();
+ delete build_id().load();
}
SharedString MapInfo::GetBuildID() {
- SharedString* id = build_id_.load();
+ SharedString* id = build_id().load();
if (id != nullptr) {
return *id;
}
@@ -330,7 +330,7 @@ SharedString MapInfo::GetBuildID() {
// Now need to see if the elf object exists.
// Make sure no other thread is trying to add the elf to this map.
mutex_.lock();
- Elf* elf_obj = elf_.get();
+ Elf* elf_obj = elf().get();
mutex_.unlock();
std::string result;
if (elf_obj != nullptr) {
diff --git a/libunwindstack/Maps.cpp b/libunwindstack/Maps.cpp
index 2274c23..a1848b4 100644
--- a/libunwindstack/Maps.cpp
+++ b/libunwindstack/Maps.cpp
@@ -48,9 +48,9 @@ MapInfo* Maps::Find(uint64_t pc) {
while (first < last) {
size_t index = (first + last) / 2;
const auto& cur = maps_[index];
- if (pc >= cur->start_ && pc < cur->end_) {
+ if (pc >= cur->start() && pc < cur->end()) {
return cur.get();
- } else if (pc < cur->start_) {
+ } else if (pc < cur->start()) {
last = index;
} else {
first = index + 1;
@@ -84,7 +84,7 @@ void Maps::Add(uint64_t start, uint64_t end, uint64_t offset, uint64_t flags,
MapInfo* prev_map = maps_.empty() ? nullptr : maps_.back().get();
MapInfo* prev_real_map = prev_map;
while (prev_real_map != nullptr && prev_real_map->IsBlank()) {
- prev_real_map = prev_real_map->prev_map_;
+ prev_real_map = prev_real_map->prev_map();
}
auto map_info =
@@ -96,7 +96,7 @@ void Maps::Add(uint64_t start, uint64_t end, uint64_t offset, uint64_t flags,
void Maps::Sort() {
std::sort(maps_.begin(), maps_.end(),
[](const std::unique_ptr<MapInfo>& a, const std::unique_ptr<MapInfo>& b) {
- return a->start_ < b->start_;
+ return a->start() < b->start();
});
// Set the prev_map values on the info objects.
@@ -183,25 +183,25 @@ bool LocalUpdatableMaps::Reparse(/*out*/ bool* any_changed) {
size_t num_deleted_new_entries = 0;
for (size_t new_map_idx = last_map_idx; new_map_idx < maps_.size(); new_map_idx++) {
auto& new_map_info = maps_[new_map_idx];
- uint64_t start = new_map_info->start_;
- uint64_t end = new_map_info->end_;
- uint64_t flags = new_map_info->flags_;
- const std::string& name = new_map_info->name_;
+ uint64_t start = new_map_info->start();
+ uint64_t end = new_map_info->end();
+ uint64_t flags = new_map_info->flags();
+ const std::string& name = new_map_info->name();
for (size_t old_map_idx = search_map_idx; old_map_idx < last_map_idx; old_map_idx++) {
auto& info = maps_[old_map_idx];
- if (start == info->start_ && end == info->end_ && flags == info->flags_ &&
- name == info->name_) {
+ if (start == info->start() && end == info->end() && flags == info->flags() &&
+ name == info->name()) {
// No need to check
search_map_idx = old_map_idx + 1;
if (new_map_idx + 1 < maps_.size()) {
maps_[new_map_idx + 1]->prev_map_ = info.get();
maps_[new_map_idx + 1]->prev_real_map_ =
- info->IsBlank() ? info->prev_real_map_ : info.get();
+ info->IsBlank() ? info->prev_real_map() : info.get();
}
maps_[new_map_idx] = nullptr;
num_deleted_new_entries++;
break;
- } else if (info->start_ > start) {
+ } else if (info->start() > start) {
// Stop, there isn't going to be a match.
search_map_idx = old_map_idx;
break;
diff --git a/libunwindstack/Unwinder.cpp b/libunwindstack/Unwinder.cpp
index f655d9c..aae0fdb 100644
--- a/libunwindstack/Unwinder.cpp
+++ b/libunwindstack/Unwinder.cpp
@@ -62,19 +62,19 @@ void Unwinder::FillInDexFrame() {
MapInfo* info = maps_->Find(dex_pc);
if (info != nullptr) {
- frame->map_start = info->start_;
- frame->map_end = info->end_;
+ frame->map_start = info->start();
+ frame->map_end = info->end();
// Since this is a dex file frame, the elf_start_offset is not set
// by any of the normal code paths. Use the offset of the map since
// that matches the actual offset.
- frame->map_elf_start_offset = info->offset_;
- frame->map_exact_offset = info->offset_;
- frame->map_load_bias = info->load_bias_;
- frame->map_flags = info->flags_;
+ frame->map_elf_start_offset = info->offset();
+ frame->map_exact_offset = info->offset();
+ frame->map_load_bias = info->load_bias();
+ frame->map_flags = info->flags();
if (resolve_names_) {
- frame->map_name = info->name_;
+ frame->map_name = info->name();
}
- frame->rel_pc = dex_pc - info->start_;
+ frame->rel_pc = dex_pc - info->start();
} else {
frame->rel_pc = dex_pc;
warnings_ |= WARNING_DEX_PC_NOT_IN_MAP;
@@ -110,8 +110,8 @@ FrameData* Unwinder::FillInFrame(MapInfo* map_info, Elf* elf, uint64_t rel_pc,
}
if (resolve_names_) {
- frame->map_name = map_info->name_;
- if (embedded_soname_ && map_info->elf_start_offset_ != 0 && !frame->map_name.empty()) {
+ frame->map_name = map_info->name();
+ if (embedded_soname_ && map_info->elf_start_offset() != 0 && !frame->map_name.empty()) {
std::string soname = elf->GetSoname();
if (!soname.empty()) {
std::string map_with_soname;
@@ -122,11 +122,11 @@ FrameData* Unwinder::FillInFrame(MapInfo* map_info, Elf* elf, uint64_t rel_pc,
}
}
}
- frame->map_elf_start_offset = map_info->elf_start_offset_;
- frame->map_exact_offset = map_info->offset_;
- frame->map_start = map_info->start_;
- frame->map_end = map_info->end_;
- frame->map_flags = map_info->flags_;
+ frame->map_elf_start_offset = map_info->elf_start_offset();
+ frame->map_exact_offset = map_info->offset();
+ frame->map_start = map_info->start();
+ frame->map_end = map_info->end();
+ frame->map_flags = map_info->flags();
frame->map_load_bias = elf->GetLoadBias();
return frame;
}
@@ -177,21 +177,21 @@ void Unwinder::Unwind(const std::vector<std::string>* initial_map_names_to_skip,
last_error_.code = ERROR_INVALID_MAP;
elf = nullptr;
} else {
- if (ShouldStop(map_suffixes_to_ignore, map_info->name_)) {
+ if (ShouldStop(map_suffixes_to_ignore, map_info->name())) {
break;
}
elf = map_info->GetElf(process_memory_, arch_);
// If this elf is memory backed, and there is a valid file, then set
// an indicator that we couldn't open the file.
- const std::string& map_name = map_info->name_;
- if (!elf_from_memory_not_file_ && map_info->memory_backed_elf_ && !map_name.empty() &&
+ const std::string& map_name = map_info->name();
+ if (!elf_from_memory_not_file_ && map_info->memory_backed_elf() && !map_name.empty() &&
map_name[0] != '[' && !android::base::StartsWith(map_name, "/memfd:")) {
elf_from_memory_not_file_ = true;
}
step_pc = regs_->pc();
rel_pc = elf->GetRelPc(step_pc, map_info);
// Everyone except elf data in gdb jit debug maps uses the relative pc.
- if (!(map_info->flags_ & MAPS_FLAGS_JIT_SYMFILE_MAP)) {
+ if (!(map_info->flags() & MAPS_FLAGS_JIT_SYMFILE_MAP)) {
step_pc = rel_pc;
}
if (adjust_pc) {
@@ -203,7 +203,7 @@ void Unwinder::Unwind(const std::vector<std::string>* initial_map_names_to_skip,
// If the pc is in an invalid elf file, try and get an Elf object
// using the jit debug information.
- if (!elf->valid() && jit_debug_ != nullptr && (map_info->flags_ & PROT_EXEC)) {
+ if (!elf->valid() && jit_debug_ != nullptr && (map_info->flags() & PROT_EXEC)) {
uint64_t adjusted_jit_pc = regs_->pc() - pc_adjustment;
Elf* jit_elf = jit_debug_->Find(maps_, adjusted_jit_pc);
if (jit_elf != nullptr) {
@@ -217,7 +217,7 @@ void Unwinder::Unwind(const std::vector<std::string>* initial_map_names_to_skip,
FrameData* frame = nullptr;
if (map_info == nullptr || initial_map_names_to_skip == nullptr ||
std::find(initial_map_names_to_skip->begin(), initial_map_names_to_skip->end(),
- basename(map_info->name_.c_str())) == initial_map_names_to_skip->end()) {
+ basename(map_info->name().c_str())) == initial_map_names_to_skip->end()) {
if (regs_->dex_pc() != 0) {
// Add a frame to represent the dex file.
FillInDexFrame();
@@ -242,14 +242,14 @@ void Unwinder::Unwind(const std::vector<std::string>* initial_map_names_to_skip,
bool in_device_map = false;
bool finished = false;
if (map_info != nullptr) {
- if (map_info->flags_ & MAPS_FLAGS_DEVICE_MAP) {
+ if (map_info->flags() & MAPS_FLAGS_DEVICE_MAP) {
// Do not stop here, fall through in case we are
// in the speculative unwind path and need to remove
// some of the speculative frames.
in_device_map = true;
} else {
MapInfo* sp_info = maps_->Find(regs_->sp());
- if (sp_info != nullptr && sp_info->flags_ & MAPS_FLAGS_DEVICE_MAP) {
+ if (sp_info != nullptr && sp_info->flags() & MAPS_FLAGS_DEVICE_MAP) {
// Do not stop here, fall through in case we are
// in the speculative unwind path and need to remove
// some of the speculative frames.
@@ -473,12 +473,12 @@ FrameData Unwinder::BuildFrameFromPcOnly(uint64_t pc, ArchEnum arch, Maps* maps,
// Copy all the things we need into the frame for symbolization.
frame.rel_pc = relative_pc;
frame.pc = pc - pc_adjustment;
- frame.map_name = map_info->name_;
- frame.map_elf_start_offset = map_info->elf_start_offset_;
- frame.map_exact_offset = map_info->offset_;
- frame.map_start = map_info->start_;
- frame.map_end = map_info->end_;
- frame.map_flags = map_info->flags_;
+ frame.map_name = map_info->name();
+ frame.map_elf_start_offset = map_info->elf_start_offset();
+ frame.map_exact_offset = map_info->offset();
+ frame.map_start = map_info->start();
+ frame.map_end = map_info->end();
+ frame.map_flags = map_info->flags();
frame.map_load_bias = elf->GetLoadBias();
if (!resolve_names ||
diff --git a/libunwindstack/benchmarks/ElfBenchmark.cpp b/libunwindstack/benchmarks/ElfBenchmark.cpp
index ec347b4..4a004dc 100644
--- a/libunwindstack/benchmarks/ElfBenchmark.cpp
+++ b/libunwindstack/benchmarks/ElfBenchmark.cpp
@@ -88,7 +88,7 @@ static void InitializeBuildId(benchmark::State& state, unwindstack::Maps& maps,
// Find the libc.so share library and use that for benchmark purposes.
*build_id_map_info = nullptr;
for (auto& map_info : maps) {
- if (map_info->offset_ == 0 && map_info->GetBuildID() != "") {
+ if (map_info->offset() == 0 && map_info->GetBuildID() != "") {
*build_id_map_info = map_info.get();
break;
}
@@ -112,7 +112,7 @@ static void BM_elf_get_build_id_from_object(benchmark::State& state) {
for (auto _ : state) {
state.PauseTiming();
- unwindstack::SharedString* id = build_id_map_info->build_id_;
+ unwindstack::SharedString* id = build_id_map_info->build_id();
if (id != nullptr) {
delete id;
build_id_map_info->build_id_ = nullptr;
@@ -130,7 +130,7 @@ static void BM_elf_get_build_id_from_file(benchmark::State& state) {
for (auto _ : state) {
state.PauseTiming();
- unwindstack::SharedString* id = build_id_map_info->build_id_;
+ unwindstack::SharedString* id = build_id_map_info->build_id();
if (id != nullptr) {
delete id;
build_id_map_info->build_id_ = nullptr;
diff --git a/libunwindstack/include/unwindstack/MapInfo.h b/libunwindstack/include/unwindstack/MapInfo.h
index c1f6683..026bda1 100644
--- a/libunwindstack/include/unwindstack/MapInfo.h
+++ b/libunwindstack/include/unwindstack/MapInfo.h
@@ -60,6 +60,21 @@ struct MapInfo {
}
~MapInfo();
+ inline uint64_t start() const { return start_; }
+ inline uint64_t end() const { return end_; }
+ inline uint64_t offset() const { return offset_; }
+ inline uint16_t flags() const { return flags_; }
+ inline SharedString& name() { return name_; }
+ inline std::shared_ptr<Elf>& elf() { return elf_; }
+ inline uint64_t elf_offset() const { return elf_offset_; }
+ inline uint64_t elf_start_offset() const { return elf_start_offset_; }
+ inline MapInfo* prev_map() const { return prev_map_; }
+ inline MapInfo* prev_real_map() const { return prev_real_map_; }
+ inline MapInfo* next_real_map() const { return next_real_map_; }
+ inline std::atomic_int64_t& load_bias() { return load_bias_; }
+ inline std::atomic<SharedString*>& build_id() { return build_id_; }
+ inline bool memory_backed_elf() const { return memory_backed_elf_; }
+
uint64_t start_ = 0;
uint64_t end_ = 0;
uint64_t offset_ = 0;
diff --git a/libunwindstack/tests/DexFilesTest.cpp b/libunwindstack/tests/DexFilesTest.cpp
index 2546cfe..cfb4a43 100644
--- a/libunwindstack/tests/DexFilesTest.cpp
+++ b/libunwindstack/tests/DexFilesTest.cpp
@@ -49,7 +49,7 @@ class DexFilesTest : public ::testing::Test {
interface->FakeSetDataOffset(data_offset);
interface->FakeSetDataVaddrStart(data_vaddr);
interface->FakeSetDataVaddrEnd(data_vaddr + data_size);
- map_info->elf_.reset(elf);
+ map_info->elf().reset(elf);
}
void Init(ArchEnum arch) {
diff --git a/libunwindstack/tests/ElfCacheTest.cpp b/libunwindstack/tests/ElfCacheTest.cpp
index 94ec356..65eef20 100644
--- a/libunwindstack/tests/ElfCacheTest.cpp
+++ b/libunwindstack/tests/ElfCacheTest.cpp
@@ -137,8 +137,8 @@ void ElfCacheTest::VerifyWithinSameMap(bool cache_enabled) {
Elf* elf0_2 = info0_2.GetElf(memory_, ARCH_ARM);
ASSERT_TRUE(elf0_2->valid());
EXPECT_EQ(ARCH_ARM, elf0_2->arch());
- EXPECT_EQ(0U, info0_1.elf_offset_);
- EXPECT_EQ(0U, info0_2.elf_offset_);
+ EXPECT_EQ(0U, info0_1.elf_offset());
+ EXPECT_EQ(0U, info0_2.elf_offset());
if (cache_enabled) {
EXPECT_EQ(elf0_1, elf0_2);
} else {
@@ -151,8 +151,8 @@ void ElfCacheTest::VerifyWithinSameMap(bool cache_enabled) {
Elf* elf100_2 = info100_2.GetElf(memory_, ARCH_X86);
ASSERT_TRUE(elf100_2->valid());
EXPECT_EQ(ARCH_X86, elf100_2->arch());
- EXPECT_EQ(0U, info100_1.elf_offset_);
- EXPECT_EQ(0U, info100_2.elf_offset_);
+ EXPECT_EQ(0U, info100_1.elf_offset());
+ EXPECT_EQ(0U, info100_2.elf_offset());
if (cache_enabled) {
EXPECT_EQ(elf100_1, elf100_2);
} else {
@@ -165,8 +165,8 @@ void ElfCacheTest::VerifyWithinSameMap(bool cache_enabled) {
Elf* elf200_2 = info200_2.GetElf(memory_, ARCH_X86_64);
ASSERT_TRUE(elf200_2->valid());
EXPECT_EQ(ARCH_X86_64, elf200_2->arch());
- EXPECT_EQ(0U, info200_1.elf_offset_);
- EXPECT_EQ(0U, info200_2.elf_offset_);
+ EXPECT_EQ(0U, info200_1.elf_offset());
+ EXPECT_EQ(0U, info200_2.elf_offset());
if (cache_enabled) {
EXPECT_EQ(elf200_1, elf200_2);
} else {
@@ -179,8 +179,8 @@ void ElfCacheTest::VerifyWithinSameMap(bool cache_enabled) {
Elf* elf300_2 = info300_2.GetElf(memory_, ARCH_ARM);
ASSERT_TRUE(elf300_2->valid());
EXPECT_EQ(ARCH_ARM, elf300_2->arch());
- EXPECT_EQ(0x300U, info300_1.elf_offset_);
- EXPECT_EQ(0x300U, info300_2.elf_offset_);
+ EXPECT_EQ(0x300U, info300_1.elf_offset());
+ EXPECT_EQ(0x300U, info300_2.elf_offset());
if (cache_enabled) {
EXPECT_EQ(elf300_1, elf300_2);
EXPECT_EQ(elf0_1, elf300_1);
@@ -227,8 +227,8 @@ void ElfCacheTest::VerifyWithinSameMapNeverReadAtZero(bool cache_enabled) {
Elf* elf300_2 = info300_2.GetElf(memory_, ARCH_ARM);
ASSERT_TRUE(elf300_2->valid());
EXPECT_EQ(ARCH_ARM, elf300_2->arch());
- EXPECT_EQ(0x300U, info300_1.elf_offset_);
- EXPECT_EQ(0x300U, info300_2.elf_offset_);
+ EXPECT_EQ(0x300U, info300_1.elf_offset());
+ EXPECT_EQ(0x300U, info300_2.elf_offset());
if (cache_enabled) {
EXPECT_EQ(elf300_1, elf300_2);
} else {
@@ -241,8 +241,8 @@ void ElfCacheTest::VerifyWithinSameMapNeverReadAtZero(bool cache_enabled) {
Elf* elf400_2 = info400_2.GetElf(memory_, ARCH_ARM);
ASSERT_TRUE(elf400_2->valid());
EXPECT_EQ(ARCH_ARM, elf400_2->arch());
- EXPECT_EQ(0x400U, info400_1.elf_offset_);
- EXPECT_EQ(0x400U, info400_2.elf_offset_);
+ EXPECT_EQ(0x400U, info400_1.elf_offset());
+ EXPECT_EQ(0x400U, info400_2.elf_offset());
if (cache_enabled) {
EXPECT_EQ(elf400_1, elf400_2);
EXPECT_EQ(elf300_1, elf400_1);
diff --git a/libunwindstack/tests/JitDebugTest.cpp b/libunwindstack/tests/JitDebugTest.cpp
index b6e9f10..f829629 100644
--- a/libunwindstack/tests/JitDebugTest.cpp
+++ b/libunwindstack/tests/JitDebugTest.cpp
@@ -46,7 +46,7 @@ class JitDebugTest : public ::testing::Test {
interface->FakeSetDataOffset(data_offset);
interface->FakeSetDataVaddrStart(data_vaddr);
interface->FakeSetDataVaddrEnd(data_vaddr + data_size);
- map_info->elf_.reset(elf);
+ map_info->elf().reset(elf);
}
void Init(ArchEnum arch) {
diff --git a/libunwindstack/tests/LocalUnwinderTest.cpp b/libunwindstack/tests/LocalUnwinderTest.cpp
index 7579fb6..5658aa3 100644
--- a/libunwindstack/tests/LocalUnwinderTest.cpp
+++ b/libunwindstack/tests/LocalUnwinderTest.cpp
@@ -58,15 +58,15 @@ static std::string ErrorMsg(const std::vector<const char*>& function_names,
unwind += android::base::StringPrintf("#%02zu pc 0x%" PRIx64 " rel_pc 0x%" PRIx64, i++,
frame.pc, frame.rel_pc);
if (frame.map_info != nullptr) {
- if (!frame.map_info->name_.empty()) {
+ if (!frame.map_info->name().empty()) {
unwind += " ";
- unwind += frame.map_info->name_;
+ unwind += frame.map_info->name();
} else {
- unwind += android::base::StringPrintf(" 0x%" PRIx64 "-0x%" PRIx64, frame.map_info->start_,
- frame.map_info->end_);
+ unwind += android::base::StringPrintf(" 0x%" PRIx64 "-0x%" PRIx64, frame.map_info->start(),
+ frame.map_info->end());
}
- if (frame.map_info->offset_ != 0) {
- unwind += android::base::StringPrintf(" offset 0x%" PRIx64, frame.map_info->offset_);
+ if (frame.map_info->offset() != 0) {
+ unwind += android::base::StringPrintf(" offset 0x%" PRIx64, frame.map_info->offset());
}
}
if (!frame.function_name.empty()) {
diff --git a/libunwindstack/tests/LocalUpdatableMapsTest.cpp b/libunwindstack/tests/LocalUpdatableMapsTest.cpp
index 66246b9..07a3dba 100644
--- a/libunwindstack/tests/LocalUpdatableMapsTest.cpp
+++ b/libunwindstack/tests/LocalUpdatableMapsTest.cpp
@@ -58,19 +58,19 @@ class LocalUpdatableMapsTest : public ::testing::Test {
MapInfo* map_info = maps_.Get(0);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x3000U, map_info->start_);
- EXPECT_EQ(0x4000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
- EXPECT_TRUE(map_info->name_.empty());
+ EXPECT_EQ(0x3000U, map_info->start());
+ EXPECT_EQ(0x4000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
+ EXPECT_TRUE(map_info->name().empty());
map_info = maps_.Get(1);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x8000U, map_info->start_);
- EXPECT_EQ(0x9000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
- EXPECT_TRUE(map_info->name_.empty());
+ EXPECT_EQ(0x8000U, map_info->start());
+ EXPECT_EQ(0x9000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
+ EXPECT_TRUE(map_info->name().empty());
}
TestUpdatableMaps maps_;
@@ -87,19 +87,19 @@ TEST_F(LocalUpdatableMapsTest, same_map) {
MapInfo* map_info = maps_.Get(0);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x3000U, map_info->start_);
- EXPECT_EQ(0x4000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
- EXPECT_TRUE(map_info->name_.empty());
+ EXPECT_EQ(0x3000U, map_info->start());
+ EXPECT_EQ(0x4000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
+ EXPECT_TRUE(map_info->name().empty());
map_info = maps_.Get(1);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x8000U, map_info->start_);
- EXPECT_EQ(0x9000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
- EXPECT_TRUE(map_info->name_.empty());
+ EXPECT_EQ(0x8000U, map_info->start());
+ EXPECT_EQ(0x9000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
+ EXPECT_TRUE(map_info->name().empty());
}
TEST_F(LocalUpdatableMapsTest, same_map_new_perms) {
@@ -115,28 +115,28 @@ TEST_F(LocalUpdatableMapsTest, same_map_new_perms) {
MapInfo* map_info = maps_.Get(0);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x3000U, map_info->start_);
- EXPECT_EQ(0x4000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_WRITE | PROT_EXEC, map_info->flags_);
+ EXPECT_EQ(0x3000U, map_info->start());
+ EXPECT_EQ(0x4000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_WRITE | PROT_EXEC, map_info->flags());
EXPECT_TRUE(map_info->name_.empty());
map_info = maps_.Get(1);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x8000U, map_info->start_);
- EXPECT_EQ(0x9000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
+ EXPECT_EQ(0x8000U, map_info->start());
+ EXPECT_EQ(0x9000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
EXPECT_TRUE(map_info->name_.empty());
auto& saved_maps = maps_.TestGetSavedMaps();
ASSERT_EQ(1U, saved_maps.size());
map_info = saved_maps[0].get();
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x3000U, map_info->start_);
- EXPECT_EQ(0x4000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
+ EXPECT_EQ(0x3000U, map_info->start());
+ EXPECT_EQ(0x4000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
EXPECT_TRUE(map_info->name_.empty());
}
@@ -153,28 +153,28 @@ TEST_F(LocalUpdatableMapsTest, same_map_new_name) {
MapInfo* map_info = maps_.Get(0);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x3000U, map_info->start_);
- EXPECT_EQ(0x4000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
- EXPECT_EQ("/fake/lib.so", map_info->name_);
+ EXPECT_EQ(0x3000U, map_info->start());
+ EXPECT_EQ(0x4000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
+ EXPECT_EQ("/fake/lib.so", map_info->name());
map_info = maps_.Get(1);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x8000U, map_info->start_);
- EXPECT_EQ(0x9000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
+ EXPECT_EQ(0x8000U, map_info->start());
+ EXPECT_EQ(0x9000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
EXPECT_TRUE(map_info->name_.empty());
auto& saved_maps = maps_.TestGetSavedMaps();
ASSERT_EQ(1U, saved_maps.size());
map_info = saved_maps[0].get();
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x3000U, map_info->start_);
- EXPECT_EQ(0x4000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
+ EXPECT_EQ(0x3000U, map_info->start());
+ EXPECT_EQ(0x4000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
EXPECT_TRUE(map_info->name_.empty());
}
@@ -194,34 +194,34 @@ TEST_F(LocalUpdatableMapsTest, only_add_maps) {
MapInfo* map_info = maps_.Get(0);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x1000U, map_info->start_);
- EXPECT_EQ(0x2000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
+ EXPECT_EQ(0x1000U, map_info->start());
+ EXPECT_EQ(0x2000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
EXPECT_TRUE(map_info->name_.empty());
map_info = maps_.Get(1);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x3000U, map_info->start_);
- EXPECT_EQ(0x4000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
+ EXPECT_EQ(0x3000U, map_info->start());
+ EXPECT_EQ(0x4000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
EXPECT_TRUE(map_info->name_.empty());
map_info = maps_.Get(2);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x8000U, map_info->start_);
- EXPECT_EQ(0x9000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
+ EXPECT_EQ(0x8000U, map_info->start());
+ EXPECT_EQ(0x9000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
EXPECT_TRUE(map_info->name_.empty());
map_info = maps_.Get(3);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0xa000U, map_info->start_);
- EXPECT_EQ(0xf000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
+ EXPECT_EQ(0xa000U, map_info->start());
+ EXPECT_EQ(0xf000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
EXPECT_TRUE(map_info->name_.empty());
}
@@ -238,36 +238,36 @@ TEST_F(LocalUpdatableMapsTest, all_new_maps) {
MapInfo* map_info = maps_.Get(0);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x1000U, map_info->start_);
- EXPECT_EQ(0x2000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
+ EXPECT_EQ(0x1000U, map_info->start());
+ EXPECT_EQ(0x2000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
EXPECT_TRUE(map_info->name_.empty());
map_info = maps_.Get(1);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0xa000U, map_info->start_);
- EXPECT_EQ(0xf000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
+ EXPECT_EQ(0xa000U, map_info->start());
+ EXPECT_EQ(0xf000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
EXPECT_TRUE(map_info->name_.empty());
auto& saved_maps = maps_.TestGetSavedMaps();
ASSERT_EQ(2U, saved_maps.size());
map_info = saved_maps[0].get();
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x3000U, map_info->start_);
- EXPECT_EQ(0x4000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
+ EXPECT_EQ(0x3000U, map_info->start());
+ EXPECT_EQ(0x4000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
EXPECT_TRUE(map_info->name_.empty());
map_info = saved_maps[1].get();
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x8000U, map_info->start_);
- EXPECT_EQ(0x9000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
+ EXPECT_EQ(0x8000U, map_info->start());
+ EXPECT_EQ(0x9000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
EXPECT_TRUE(map_info->name_.empty());
}
@@ -285,12 +285,12 @@ TEST_F(LocalUpdatableMapsTest, add_map_prev_name_updated) {
MapInfo* map_info = maps_.Get(2);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x9000U, map_info->start_);
- EXPECT_EQ(0xA000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
+ EXPECT_EQ(0x9000U, map_info->start());
+ EXPECT_EQ(0xA000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
EXPECT_TRUE(map_info->name_.empty());
- EXPECT_EQ(maps_.Get(1), map_info->prev_map_);
+ EXPECT_EQ(maps_.Get(1), map_info->prev_map());
}
TEST_F(LocalUpdatableMapsTest, add_map_prev_real_name_updated) {
@@ -315,22 +315,22 @@ TEST_F(LocalUpdatableMapsTest, add_map_prev_real_name_updated) {
MapInfo* map_info = maps_.Get(2);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x7000U, map_info->start_);
- EXPECT_EQ(0x8000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
- EXPECT_EQ(maps_.Get(0), map_info->prev_real_map_);
- EXPECT_EQ(maps_.Get(1), map_info->prev_map_);
- EXPECT_EQ("/fake/lib1.so", map_info->name_);
+ EXPECT_EQ(0x7000U, map_info->start());
+ EXPECT_EQ(0x8000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
+ EXPECT_EQ(maps_.Get(0), map_info->prev_real_map());
+ EXPECT_EQ(maps_.Get(1), map_info->prev_map());
+ EXPECT_EQ("/fake/lib1.so", map_info->name());
map_info = maps_.Get(3);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x8000U, map_info->start_);
- EXPECT_EQ(0x9000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
+ EXPECT_EQ(0x8000U, map_info->start());
+ EXPECT_EQ(0x9000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
EXPECT_TRUE(map_info->IsBlank());
- EXPECT_EQ(maps_.Get(2), map_info->prev_real_map_);
- EXPECT_EQ(maps_.Get(2), map_info->prev_map_);
+ EXPECT_EQ(maps_.Get(2), map_info->prev_real_map());
+ EXPECT_EQ(maps_.Get(2), map_info->prev_map());
EXPECT_TRUE(map_info->name_.empty());
ASSERT_TRUE(
@@ -354,33 +354,33 @@ TEST_F(LocalUpdatableMapsTest, add_map_prev_real_name_updated) {
map_info = maps_.Get(2);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x7000U, map_info->start_);
- EXPECT_EQ(0x8000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
- EXPECT_EQ("/fake/lib1.so", map_info->name_);
- EXPECT_EQ(maps_.Get(1), map_info->prev_map_);
- EXPECT_EQ(maps_.Get(0), map_info->prev_real_map_);
+ EXPECT_EQ(0x7000U, map_info->start());
+ EXPECT_EQ(0x8000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
+ EXPECT_EQ("/fake/lib1.so", map_info->name());
+ EXPECT_EQ(maps_.Get(1), map_info->prev_map());
+ EXPECT_EQ(maps_.Get(0), map_info->prev_real_map());
map_info = maps_.Get(4);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0x9000U, map_info->start_);
- EXPECT_EQ(0xA000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
- EXPECT_EQ("/fake/lib2.so", map_info->name_);
- EXPECT_EQ(maps_.Get(3), map_info->prev_map_);
- EXPECT_EQ(maps_.Get(2), map_info->prev_real_map_);
+ EXPECT_EQ(0x9000U, map_info->start());
+ EXPECT_EQ(0xA000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
+ EXPECT_EQ("/fake/lib2.so", map_info->name());
+ EXPECT_EQ(maps_.Get(3), map_info->prev_map());
+ EXPECT_EQ(maps_.Get(2), map_info->prev_real_map());
map_info = maps_.Get(5);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_EQ(0xA000U, map_info->start_);
- EXPECT_EQ(0xB000U, map_info->end_);
- EXPECT_EQ(0U, map_info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags_);
- EXPECT_EQ("/fake/lib3.so", map_info->name_);
- EXPECT_EQ(maps_.Get(4), map_info->prev_map_);
- EXPECT_EQ(maps_.Get(4), map_info->prev_real_map_);
+ EXPECT_EQ(0xA000U, map_info->start());
+ EXPECT_EQ(0xB000U, map_info->end());
+ EXPECT_EQ(0U, map_info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, map_info->flags());
+ EXPECT_EQ("/fake/lib3.so", map_info->name());
+ EXPECT_EQ(maps_.Get(4), map_info->prev_map());
+ EXPECT_EQ(maps_.Get(4), map_info->prev_real_map());
}
} // namespace unwindstack
diff --git a/libunwindstack/tests/MapInfoCreateMemoryTest.cpp b/libunwindstack/tests/MapInfoCreateMemoryTest.cpp
index f2c6dce..53b56a6 100644
--- a/libunwindstack/tests/MapInfoCreateMemoryTest.cpp
+++ b/libunwindstack/tests/MapInfoCreateMemoryTest.cpp
@@ -102,7 +102,7 @@ TEST_F(MapInfoCreateMemoryTest, end_le_start) {
info.end_ = 0x101;
memory.reset(info.CreateMemory(process_memory_));
ASSERT_TRUE(memory.get() != nullptr);
- EXPECT_FALSE(info.memory_backed_elf_);
+ EXPECT_FALSE(info.memory_backed_elf());
}
// Verify that if the offset is non-zero but there is no elf at the offset,
@@ -112,9 +112,9 @@ TEST_F(MapInfoCreateMemoryTest, file_backed_non_zero_offset_full_file) {
std::unique_ptr<Memory> memory(info.CreateMemory(process_memory_));
ASSERT_TRUE(memory.get() != nullptr);
- EXPECT_FALSE(info.memory_backed_elf_);
- ASSERT_EQ(0x100U, info.elf_offset_);
- EXPECT_EQ(0x100U, info.elf_start_offset_);
+ EXPECT_FALSE(info.memory_backed_elf());
+ ASSERT_EQ(0x100U, info.elf_offset());
+ EXPECT_EQ(0x100U, info.elf_start_offset());
// Read the entire file.
std::vector<uint8_t> buffer(1024);
@@ -140,9 +140,9 @@ TEST_F(MapInfoCreateMemoryTest, file_backed_non_zero_offset_full_file) {
info.memory_backed_elf_ = false;
memory.reset(info.CreateMemory(process_memory_));
ASSERT_TRUE(memory.get() != nullptr);
- EXPECT_FALSE(info.memory_backed_elf_);
- ASSERT_EQ(0x100U, info.elf_offset_);
- EXPECT_EQ(0x100U, info.elf_start_offset_);
+ EXPECT_FALSE(info.memory_backed_elf());
+ ASSERT_EQ(0x100U, info.elf_offset());
+ EXPECT_EQ(0x100U, info.elf_start_offset());
prev_info.offset_ = 0;
info.elf_offset_ = 0;
@@ -150,9 +150,9 @@ TEST_F(MapInfoCreateMemoryTest, file_backed_non_zero_offset_full_file) {
info.memory_backed_elf_ = false;
memory.reset(info.CreateMemory(process_memory_));
ASSERT_TRUE(memory.get() != nullptr);
- EXPECT_FALSE(info.memory_backed_elf_);
- ASSERT_EQ(0x100U, info.elf_offset_);
- EXPECT_EQ(0x100U, info.elf_start_offset_);
+ EXPECT_FALSE(info.memory_backed_elf());
+ ASSERT_EQ(0x100U, info.elf_offset());
+ EXPECT_EQ(0x100U, info.elf_start_offset());
prev_info.flags_ = PROT_READ;
info.elf_offset_ = 0;
@@ -160,19 +160,19 @@ TEST_F(MapInfoCreateMemoryTest, file_backed_non_zero_offset_full_file) {
info.memory_backed_elf_ = false;
memory.reset(info.CreateMemory(process_memory_));
ASSERT_TRUE(memory.get() != nullptr);
- EXPECT_FALSE(info.memory_backed_elf_);
- ASSERT_EQ(0x100U, info.elf_offset_);
- EXPECT_EQ(0x100U, info.elf_start_offset_);
+ EXPECT_FALSE(info.memory_backed_elf());
+ ASSERT_EQ(0x100U, info.elf_offset());
+ EXPECT_EQ(0x100U, info.elf_start_offset());
- prev_info.name_ = info.name_;
+ prev_info.name_ = info.name();
info.elf_offset_ = 0;
info.elf_start_offset_ = 0;
info.memory_backed_elf_ = false;
memory.reset(info.CreateMemory(process_memory_));
ASSERT_TRUE(memory.get() != nullptr);
EXPECT_FALSE(info.memory_backed_elf_);
- ASSERT_EQ(0x100U, info.elf_offset_);
- EXPECT_EQ(0U, info.elf_start_offset_);
+ ASSERT_EQ(0x100U, info.elf_offset());
+ EXPECT_EQ(0U, info.elf_start_offset());
}
// Verify that if the offset is non-zero and there is an elf at that
@@ -183,8 +183,8 @@ TEST_F(MapInfoCreateMemoryTest, file_backed_non_zero_offset_partial_file) {
std::unique_ptr<Memory> memory(info.CreateMemory(process_memory_));
ASSERT_TRUE(memory.get() != nullptr);
EXPECT_FALSE(info.memory_backed_elf_);
- ASSERT_EQ(0U, info.elf_offset_);
- EXPECT_EQ(0x1000U, info.elf_start_offset_);
+ ASSERT_EQ(0U, info.elf_offset());
+ EXPECT_EQ(0x1000U, info.elf_start_offset());
// Read the valid part of the file.
std::vector<uint8_t> buffer(0x100);
@@ -208,8 +208,8 @@ TEST_F(MapInfoCreateMemoryTest, file_backed_non_zero_offset_partial_file_whole_e
std::unique_ptr<Memory> memory(info.CreateMemory(process_memory_));
ASSERT_TRUE(memory.get() != nullptr);
EXPECT_FALSE(info.memory_backed_elf_);
- ASSERT_EQ(0U, info.elf_offset_);
- EXPECT_EQ(0x1000U, info.elf_start_offset_);
+ ASSERT_EQ(0U, info.elf_offset());
+ EXPECT_EQ(0x1000U, info.elf_start_offset());
// Verify the memory is a valid elf.
uint8_t e_ident[SELFMAG + 1];
@@ -226,8 +226,8 @@ TEST_F(MapInfoCreateMemoryTest, file_backed_non_zero_offset_partial_file_whole_e
std::unique_ptr<Memory> memory(info.CreateMemory(process_memory_));
ASSERT_TRUE(memory.get() != nullptr);
EXPECT_FALSE(info.memory_backed_elf_);
- ASSERT_EQ(0U, info.elf_offset_);
- EXPECT_EQ(0x2000U, info.elf_start_offset_);
+ ASSERT_EQ(0U, info.elf_offset());
+ EXPECT_EQ(0x2000U, info.elf_start_offset());
// Verify the memory is a valid elf.
uint8_t e_ident[SELFMAG + 1];
@@ -263,7 +263,7 @@ TEST_F(MapInfoCreateMemoryTest, process_memory) {
for (size_t i = sizeof(ehdr); i < buffer.size(); i++) {
buffer[i] = i % 256;
}
- memory_->SetMemory(info.start_, buffer.data(), buffer.size());
+ memory_->SetMemory(info.start(), buffer.data(), buffer.size());
std::unique_ptr<Memory> memory(info.CreateMemory(process_memory_));
ASSERT_TRUE(memory.get() != nullptr);
@@ -300,9 +300,9 @@ TEST_F(MapInfoCreateMemoryTest, valid_rosegment_zero_offset) {
std::unique_ptr<Memory> mem(map_info->CreateMemory(process_memory_));
ASSERT_TRUE(mem.get() != nullptr);
EXPECT_TRUE(map_info->memory_backed_elf_);
- EXPECT_EQ(0x4000UL, map_info->elf_offset_);
- EXPECT_EQ(0x4000UL, map_info->offset_);
- EXPECT_EQ(0U, map_info->elf_start_offset_);
+ EXPECT_EQ(0x4000UL, map_info->elf_offset());
+ EXPECT_EQ(0x4000UL, map_info->offset());
+ EXPECT_EQ(0U, map_info->elf_start_offset());
// Verify that reading values from this memory works properly.
std::vector<uint8_t> buffer(0x4000);
@@ -347,9 +347,9 @@ TEST_F(MapInfoCreateMemoryTest, valid_rosegment_non_zero_offset) {
std::unique_ptr<Memory> mem(map_info->CreateMemory(process_memory_));
ASSERT_TRUE(mem.get() != nullptr);
EXPECT_TRUE(map_info->memory_backed_elf_);
- EXPECT_EQ(0x1000UL, map_info->elf_offset_);
- EXPECT_EQ(0xb000UL, map_info->offset_);
- EXPECT_EQ(0xa000UL, map_info->elf_start_offset_);
+ EXPECT_EQ(0x1000UL, map_info->elf_offset());
+ EXPECT_EQ(0xb000UL, map_info->offset());
+ EXPECT_EQ(0xa000UL, map_info->elf_start_offset());
// Verify that reading values from this memory works properly.
std::vector<uint8_t> buffer(0x4000);
@@ -387,9 +387,9 @@ TEST_F(MapInfoCreateMemoryTest, rosegment_from_file) {
ASSERT_TRUE(memory.get() != nullptr);
EXPECT_FALSE(map_info->memory_backed_elf_);
std::vector<uint8_t> buffer(0x100);
- EXPECT_EQ(0x2000U, map_info->offset_);
- EXPECT_EQ(0U, map_info->elf_offset_);
- EXPECT_EQ(0U, map_info->elf_start_offset_);
+ EXPECT_EQ(0x2000U, map_info->offset());
+ EXPECT_EQ(0U, map_info->elf_offset());
+ EXPECT_EQ(0U, map_info->elf_start_offset());
ASSERT_TRUE(memory->ReadFully(0, buffer.data(), 0x100));
EXPECT_EQ(0xffU, buffer[0]);
@@ -403,9 +403,9 @@ TEST_F(MapInfoCreateMemoryTest, rosegment_from_file) {
map_info->memory_backed_elf_ = false;
memory.reset(map_info->CreateMemory(process_memory_));
EXPECT_FALSE(map_info->memory_backed_elf_);
- EXPECT_EQ(0x2000U, map_info->offset_);
- EXPECT_EQ(0x1000U, map_info->elf_offset_);
- EXPECT_EQ(0x1000U, map_info->elf_start_offset_);
+ EXPECT_EQ(0x2000U, map_info->offset());
+ EXPECT_EQ(0x1000U, map_info->elf_offset());
+ EXPECT_EQ(0x1000U, map_info->elf_start_offset());
Elf64_Ehdr ehdr_mem;
ASSERT_TRUE(memory->ReadFully(0, &ehdr_mem, sizeof(ehdr_mem)));
EXPECT_TRUE(memcmp(&ehdr, &ehdr_mem, sizeof(ehdr)) == 0);
@@ -431,9 +431,9 @@ TEST_F(MapInfoCreateMemoryTest, valid_rosegment_offset_overflow) {
std::unique_ptr<Memory> mem(map_info->CreateMemory(process_memory_));
ASSERT_TRUE(mem.get() != nullptr);
EXPECT_TRUE(map_info->memory_backed_elf_);
- EXPECT_EQ(0xfffffffffffff000UL, map_info->elf_offset_);
- EXPECT_EQ(0xfffffffffffff000UL, map_info->offset_);
- EXPECT_EQ(0U, map_info->elf_start_offset_);
+ EXPECT_EQ(0xfffffffffffff000UL, map_info->elf_offset());
+ EXPECT_EQ(0xfffffffffffff000UL, map_info->offset());
+ EXPECT_EQ(0U, map_info->elf_start_offset());
// Verify that reading values from this memory works properly.
std::vector<uint8_t> buffer(0x2000);
diff --git a/libunwindstack/tests/MapInfoGetBuildIDTest.cpp b/libunwindstack/tests/MapInfoGetBuildIDTest.cpp
index 8724ed6..a88d120 100644
--- a/libunwindstack/tests/MapInfoGetBuildIDTest.cpp
+++ b/libunwindstack/tests/MapInfoGetBuildIDTest.cpp
@@ -74,7 +74,7 @@ TEST_F(MapInfoGetBuildIDTest, no_elf_and_no_valid_elf_in_memory) {
}
TEST_F(MapInfoGetBuildIDTest, from_elf) {
- map_info_->elf_.reset(elf_container_.release());
+ map_info_->elf().reset(elf_container_.release());
elf_interface_->FakeSetBuildID("FAKE_BUILD_ID");
EXPECT_EQ("FAKE_BUILD_ID", map_info_->GetBuildID());
@@ -82,7 +82,7 @@ TEST_F(MapInfoGetBuildIDTest, from_elf) {
}
TEST_F(MapInfoGetBuildIDTest, from_elf_no_sign_extension) {
- map_info_->elf_.reset(elf_container_.release());
+ map_info_->elf().reset(elf_container_.release());
std::string build_id = {static_cast<char>(0xfa), static_cast<char>(0xab), static_cast<char>(0x12),
static_cast<char>(0x02)};
@@ -125,7 +125,7 @@ void MapInfoGetBuildIDTest::MultipleThreadTest(std::string expected_build_id) {
}
TEST_F(MapInfoGetBuildIDTest, multiple_thread_elf_exists) {
- map_info_->elf_.reset(elf_container_.release());
+ map_info_->elf().reset(elf_container_.release());
elf_interface_->FakeSetBuildID("FAKE_BUILD_ID");
MultipleThreadTest("FAKE_BUILD_ID");
diff --git a/libunwindstack/tests/MapInfoGetElfTest.cpp b/libunwindstack/tests/MapInfoGetElfTest.cpp
index 018c57a..9ba01e0 100644
--- a/libunwindstack/tests/MapInfoGetElfTest.cpp
+++ b/libunwindstack/tests/MapInfoGetElfTest.cpp
@@ -92,7 +92,7 @@ TEST_F(MapInfoGetElfTest, valid32) {
EXPECT_EQ(ELFCLASS32, elf->class_type());
// Now verify that an empty process memory returns an invalid elf object.
- info.elf_.reset();
+ info.elf().reset();
elf = info.GetElf(std::shared_ptr<Memory>(), ARCH_ARM);
ASSERT_TRUE(elf != nullptr);
ASSERT_FALSE(elf->valid());
@@ -167,14 +167,14 @@ TEST_F(MapInfoGetElfTest, end_le_start) {
ASSERT_TRUE(elf != nullptr);
ASSERT_FALSE(elf->valid());
- info.elf_.reset();
+ info.elf().reset();
info.end_ = 0xfff;
elf = info.GetElf(process_memory_, ARCH_ARM);
ASSERT_TRUE(elf != nullptr);
ASSERT_FALSE(elf->valid());
// Make sure this test is valid.
- info.elf_.reset();
+ info.elf().reset();
info.end_ = 0x2000;
elf = info.GetElf(process_memory_, ARCH_ARM);
ASSERT_TRUE(elf != nullptr);
@@ -197,7 +197,7 @@ TEST_F(MapInfoGetElfTest, file_backed_non_zero_offset_full_file) {
ASSERT_TRUE(elf != nullptr);
ASSERT_TRUE(elf->valid());
ASSERT_TRUE(elf->memory() != nullptr);
- ASSERT_EQ(0x100U, info.elf_offset_);
+ ASSERT_EQ(0x100U, info.elf_offset());
// Read the entire file.
memset(buffer.data(), 0, buffer.size());
@@ -219,14 +219,14 @@ TEST_F(MapInfoGetElfTest, file_backed_non_zero_offset_partial_file) {
memset(buffer.data(), 0, buffer.size());
Elf32_Ehdr ehdr;
TestInitEhdr<Elf32_Ehdr>(&ehdr, ELFCLASS32, EM_ARM);
- memcpy(&buffer[info.offset_], &ehdr, sizeof(ehdr));
+ memcpy(&buffer[info.offset()], &ehdr, sizeof(ehdr));
ASSERT_TRUE(android::base::WriteFully(elf_.fd, buffer.data(), buffer.size()));
Elf* elf = info.GetElf(process_memory_, ARCH_ARM);
ASSERT_TRUE(elf != nullptr);
ASSERT_TRUE(elf->valid());
ASSERT_TRUE(elf->memory() != nullptr);
- ASSERT_EQ(0U, info.elf_offset_);
+ ASSERT_EQ(0U, info.elf_offset());
// Read the valid part of the file.
ASSERT_TRUE(elf->memory()->ReadFully(0, buffer.data(), 0x1000));
@@ -252,14 +252,14 @@ TEST_F(MapInfoGetElfTest, file_backed_non_zero_offset_partial_file_whole_elf32)
ehdr.e_shoff = 0x2000;
ehdr.e_shentsize = sizeof(Elf32_Shdr) + 100;
ehdr.e_shnum = 4;
- memcpy(&buffer[info.offset_], &ehdr, sizeof(ehdr));
+ memcpy(&buffer[info.offset()], &ehdr, sizeof(ehdr));
ASSERT_TRUE(android::base::WriteFully(elf_.fd, buffer.data(), buffer.size()));
Elf* elf = info.GetElf(process_memory_, ARCH_ARM);
ASSERT_TRUE(elf != nullptr);
ASSERT_TRUE(elf->valid());
ASSERT_TRUE(elf->memory() != nullptr);
- ASSERT_EQ(0U, info.elf_offset_);
+ ASSERT_EQ(0U, info.elf_offset());
// Verify the memory is a valid elf.
memset(buffer.data(), 0, buffer.size());
@@ -280,14 +280,14 @@ TEST_F(MapInfoGetElfTest, file_backed_non_zero_offset_partial_file_whole_elf64)
ehdr.e_shoff = 0x2000;
ehdr.e_shentsize = sizeof(Elf64_Shdr) + 100;
ehdr.e_shnum = 4;
- memcpy(&buffer[info.offset_], &ehdr, sizeof(ehdr));
+ memcpy(&buffer[info.offset()], &ehdr, sizeof(ehdr));
ASSERT_TRUE(android::base::WriteFully(elf_.fd, buffer.data(), buffer.size()));
Elf* elf = info.GetElf(process_memory_, ARCH_ARM64);
ASSERT_TRUE(elf != nullptr);
ASSERT_TRUE(elf->valid());
ASSERT_TRUE(elf->memory() != nullptr);
- ASSERT_EQ(0U, info.elf_offset_);
+ ASSERT_EQ(0U, info.elf_offset());
// Verify the memory is a valid elf.
memset(buffer.data(), 0, buffer.size());
@@ -316,13 +316,13 @@ TEST_F(MapInfoGetElfTest, check_device_maps) {
ASSERT_FALSE(elf->valid());
// Set the name to nothing to verify that it still fails.
- info.elf_.reset();
+ info.elf().reset();
info.name_ = "";
elf = info.GetElf(process_memory_, ARCH_X86_64);
ASSERT_FALSE(elf->valid());
// Change the flags and verify the elf is valid now.
- info.elf_.reset();
+ info.elf().reset();
info.flags_ = PROT_READ;
elf = info.GetElf(process_memory_, ARCH_X86_64);
ASSERT_TRUE(elf->valid());
@@ -355,7 +355,7 @@ TEST_F(MapInfoGetElfTest, multiple_thread_get_elf) {
});
threads.push_back(thread);
}
- ASSERT_TRUE(info.elf_ == nullptr);
+ ASSERT_TRUE(info.elf() == nullptr);
// Set them all going and wait for the threads to finish.
wait = false;
@@ -365,7 +365,7 @@ TEST_F(MapInfoGetElfTest, multiple_thread_get_elf) {
}
// Now verify that all of the elf files are exactly the same and valid.
- Elf* elf = info.elf_.get();
+ Elf* elf = info.elf().get();
ASSERT_TRUE(elf != nullptr);
EXPECT_TRUE(elf->valid());
for (size_t i = 0; i < kNumConcurrentThreads; i++) {
diff --git a/libunwindstack/tests/MapInfoGetLoadBiasTest.cpp b/libunwindstack/tests/MapInfoGetLoadBiasTest.cpp
index fa471cc..d60b600 100644
--- a/libunwindstack/tests/MapInfoGetLoadBiasTest.cpp
+++ b/libunwindstack/tests/MapInfoGetLoadBiasTest.cpp
@@ -69,7 +69,7 @@ TEST_F(MapInfoGetLoadBiasTest, no_elf_and_no_valid_elf_in_memory) {
}
TEST_F(MapInfoGetLoadBiasTest, load_bias_cached_from_elf) {
- map_info_->elf_.reset(elf_container_.release());
+ map_info_->elf().reset(elf_container_.release());
elf_->FakeSetLoadBias(0);
EXPECT_EQ(0U, map_info_->GetLoadBias(process_memory_));
@@ -79,7 +79,7 @@ TEST_F(MapInfoGetLoadBiasTest, load_bias_cached_from_elf) {
}
TEST_F(MapInfoGetLoadBiasTest, elf_exists) {
- map_info_->elf_.reset(elf_container_.release());
+ map_info_->elf().reset(elf_container_.release());
elf_->FakeSetLoadBias(0);
EXPECT_EQ(0U, map_info_->GetLoadBias(process_memory_));
@@ -122,7 +122,7 @@ void MapInfoGetLoadBiasTest::MultipleThreadTest(uint64_t expected_load_bias) {
}
TEST_F(MapInfoGetLoadBiasTest, multiple_thread_elf_exists) {
- map_info_->elf_.reset(elf_container_.release());
+ map_info_->elf().reset(elf_container_.release());
elf_->FakeSetLoadBias(0x1000);
MultipleThreadTest(0x1000);
@@ -148,13 +148,13 @@ static void InitElfData(MemoryFake* memory, uint64_t offset) {
}
TEST_F(MapInfoGetLoadBiasTest, elf_exists_in_memory) {
- InitElfData(memory_, map_info_->start_);
+ InitElfData(memory_, map_info_->start());
EXPECT_EQ(0xe000U, map_info_->GetLoadBias(process_memory_));
}
TEST_F(MapInfoGetLoadBiasTest, elf_exists_in_memory_cached) {
- InitElfData(memory_, map_info_->start_);
+ InitElfData(memory_, map_info_->start());
EXPECT_EQ(0xe000U, map_info_->GetLoadBias(process_memory_));
@@ -163,7 +163,7 @@ TEST_F(MapInfoGetLoadBiasTest, elf_exists_in_memory_cached) {
}
TEST_F(MapInfoGetLoadBiasTest, multiple_thread_elf_exists_in_memory) {
- InitElfData(memory_, map_info_->start_);
+ InitElfData(memory_, map_info_->start());
MultipleThreadTest(0xe000);
}
diff --git a/libunwindstack/tests/MapInfoTest.cpp b/libunwindstack/tests/MapInfoTest.cpp
index 6ec28d8..b4c1010 100644
--- a/libunwindstack/tests/MapInfoTest.cpp
+++ b/libunwindstack/tests/MapInfoTest.cpp
@@ -29,15 +29,15 @@ TEST(MapInfoTest, maps_constructor_const_char) {
MapInfo prev_map(nullptr, nullptr, 0, 0, 0, 0, "");
MapInfo map_info(&prev_map, &prev_map, 1, 2, 3, 4, "map");
- EXPECT_EQ(&prev_map, map_info.prev_map_);
- EXPECT_EQ(1UL, map_info.start_);
- EXPECT_EQ(2UL, map_info.end_);
- EXPECT_EQ(3UL, map_info.offset_);
- EXPECT_EQ(4UL, map_info.flags_);
- EXPECT_EQ("map", map_info.name_);
- EXPECT_EQ(INT64_MAX, map_info.load_bias_);
- EXPECT_EQ(0UL, map_info.elf_offset_);
- EXPECT_TRUE(map_info.elf_.get() == nullptr);
+ EXPECT_EQ(&prev_map, map_info.prev_map());
+ EXPECT_EQ(1UL, map_info.start());
+ EXPECT_EQ(2UL, map_info.end());
+ EXPECT_EQ(3UL, map_info.offset());
+ EXPECT_EQ(4UL, map_info.flags());
+ EXPECT_EQ("map", map_info.name());
+ EXPECT_EQ(INT64_MAX, map_info.load_bias());
+ EXPECT_EQ(0UL, map_info.elf_offset());
+ EXPECT_TRUE(map_info.elf().get() == nullptr);
}
TEST(MapInfoTest, maps_constructor_string) {
@@ -45,15 +45,15 @@ TEST(MapInfoTest, maps_constructor_string) {
MapInfo prev_map(nullptr, nullptr, 0, 0, 0, 0, "");
MapInfo map_info(&prev_map, &prev_map, 1, 2, 3, 4, name);
- EXPECT_EQ(&prev_map, map_info.prev_map_);
- EXPECT_EQ(1UL, map_info.start_);
- EXPECT_EQ(2UL, map_info.end_);
- EXPECT_EQ(3UL, map_info.offset_);
- EXPECT_EQ(4UL, map_info.flags_);
- EXPECT_EQ("string_map", map_info.name_);
- EXPECT_EQ(INT64_MAX, map_info.load_bias_);
- EXPECT_EQ(0UL, map_info.elf_offset_);
- EXPECT_TRUE(map_info.elf_.get() == nullptr);
+ EXPECT_EQ(&prev_map, map_info.prev_map());
+ EXPECT_EQ(1UL, map_info.start());
+ EXPECT_EQ(2UL, map_info.end());
+ EXPECT_EQ(3UL, map_info.offset());
+ EXPECT_EQ(4UL, map_info.flags());
+ EXPECT_EQ("string_map", map_info.name());
+ EXPECT_EQ(INT64_MAX, map_info.load_bias());
+ EXPECT_EQ(0UL, map_info.elf_offset());
+ EXPECT_TRUE(map_info.elf().get() == nullptr);
}
TEST(MapInfoTest, get_function_name) {
@@ -63,7 +63,7 @@ TEST(MapInfoTest, get_function_name) {
interface->FakePushFunctionData(FunctionData("function", 1000));
MapInfo map_info(nullptr, nullptr, 1, 2, 3, 4, "");
- map_info.elf_.reset(elf);
+ map_info.elf().reset(elf);
SharedString name;
uint64_t offset;
diff --git a/libunwindstack/tests/MapsTest.cpp b/libunwindstack/tests/MapsTest.cpp
index af26c6d..1448149 100644
--- a/libunwindstack/tests/MapsTest.cpp
+++ b/libunwindstack/tests/MapsTest.cpp
@@ -34,12 +34,12 @@ static void VerifyLine(std::string line, MapInfo* info) {
ASSERT_TRUE(maps.Parse()) << "Failed on: " + line;
MapInfo* element = maps.Get(0);
ASSERT_TRUE(element != nullptr) << "Failed on: " + line;
- info->start_ = element->start_;
- info->end_ = element->end_;
- info->offset_ = element->offset_;
- info->flags_ = element->flags_;
- info->name_ = element->name_;
- info->elf_offset_ = element->elf_offset_;
+ info->start_ = element->start();
+ info->end_ = element->end();
+ info->offset_ = element->offset();
+ info->flags_ = element->flags();
+ info->name_ = element->name();
+ info->elf_offset_ = element->elf_offset();
}
}
@@ -52,13 +52,13 @@ TEST(MapsTest, map_add) {
ASSERT_EQ(3U, maps.Total());
MapInfo* info = maps.Get(0);
- ASSERT_EQ(0x1000U, info->start_);
- ASSERT_EQ(0x2000U, info->end_);
- ASSERT_EQ(0U, info->offset_);
- ASSERT_EQ(PROT_READ, info->flags_);
- ASSERT_EQ("fake_map", info->name_);
- ASSERT_EQ(0U, info->elf_offset_);
- ASSERT_EQ(0U, info->load_bias_.load());
+ ASSERT_EQ(0x1000U, info->start());
+ ASSERT_EQ(0x2000U, info->end());
+ ASSERT_EQ(0U, info->offset());
+ ASSERT_EQ(PROT_READ, info->flags());
+ ASSERT_EQ("fake_map", info->name());
+ ASSERT_EQ(0U, info->elf_offset());
+ ASSERT_EQ(0U, info->load_bias().load());
}
TEST(MapsTest, map_move) {
@@ -72,38 +72,38 @@ TEST(MapsTest, map_move) {
ASSERT_EQ(3U, maps2.Total());
MapInfo* info = maps2.Get(0);
- ASSERT_EQ(0x1000U, info->start_);
- ASSERT_EQ(0x2000U, info->end_);
- ASSERT_EQ(0U, info->offset_);
- ASSERT_EQ(PROT_READ, info->flags_);
- ASSERT_EQ("fake_map", info->name_);
- ASSERT_EQ(0U, info->elf_offset_);
- ASSERT_EQ(0U, info->load_bias_.load());
+ ASSERT_EQ(0x1000U, info->start());
+ ASSERT_EQ(0x2000U, info->end());
+ ASSERT_EQ(0U, info->offset());
+ ASSERT_EQ(PROT_READ, info->flags());
+ ASSERT_EQ("fake_map", info->name());
+ ASSERT_EQ(0U, info->elf_offset());
+ ASSERT_EQ(0U, info->load_bias().load());
}
TEST(MapsTest, verify_parse_line) {
MapInfo info(nullptr, nullptr, 0, 0, 0, 0, "");
VerifyLine("01-02 rwxp 03 04:05 06\n", &info);
- EXPECT_EQ(1U, info.start_);
- EXPECT_EQ(2U, info.end_);
- EXPECT_EQ(PROT_READ | PROT_WRITE | PROT_EXEC, info.flags_);
- EXPECT_EQ(3U, info.offset_);
- EXPECT_EQ("", info.name_);
+ EXPECT_EQ(1U, info.start());
+ EXPECT_EQ(2U, info.end());
+ EXPECT_EQ(PROT_READ | PROT_WRITE | PROT_EXEC, info.flags());
+ EXPECT_EQ(3U, info.offset());
+ EXPECT_EQ("", info.name());
VerifyLine("0a-0b ---s 0c 0d:0e 06 /fake/name\n", &info);
- EXPECT_EQ(0xaU, info.start_);
- EXPECT_EQ(0xbU, info.end_);
- EXPECT_EQ(0U, info.flags_);
- EXPECT_EQ(0xcU, info.offset_);
- EXPECT_EQ("/fake/name", info.name_);
+ EXPECT_EQ(0xaU, info.start());
+ EXPECT_EQ(0xbU, info.end());
+ EXPECT_EQ(0U, info.flags());
+ EXPECT_EQ(0xcU, info.offset());
+ EXPECT_EQ("/fake/name", info.name());
VerifyLine("01-02 rwxp 03 04:05 06 /fake/name/again\n", &info);
- EXPECT_EQ(1U, info.start_);
- EXPECT_EQ(2U, info.end_);
- EXPECT_EQ(PROT_READ | PROT_WRITE | PROT_EXEC, info.flags_);
- EXPECT_EQ(3U, info.offset_);
- EXPECT_EQ("/fake/name/again", info.name_);
+ EXPECT_EQ(1U, info.start());
+ EXPECT_EQ(2U, info.end());
+ EXPECT_EQ(PROT_READ | PROT_WRITE | PROT_EXEC, info.flags());
+ EXPECT_EQ(3U, info.offset());
+ EXPECT_EQ("/fake/name/again", info.name());
VerifyLine("-00 rwxp 00 00:00 0\n", nullptr);
VerifyLine("00- rwxp 00 00:00 0\n", nullptr);
@@ -158,10 +158,10 @@ TEST(MapsTest, verify_large_values) {
MapInfo info(nullptr, nullptr, 0, 0, 0, 0, "");
#if defined(__LP64__)
VerifyLine("fabcdef012345678-f12345678abcdef8 rwxp f0b0d0f010305070 00:00 0\n", &info);
- EXPECT_EQ(0xfabcdef012345678UL, info.start_);
- EXPECT_EQ(0xf12345678abcdef8UL, info.end_);
- EXPECT_EQ(PROT_READ | PROT_WRITE | PROT_EXEC, info.flags_);
- EXPECT_EQ(0xf0b0d0f010305070UL, info.offset_);
+ EXPECT_EQ(0xfabcdef012345678UL, info.start());
+ EXPECT_EQ(0xf12345678abcdef8UL, info.end());
+ EXPECT_EQ(PROT_READ | PROT_WRITE | PROT_EXEC, info.flags());
+ EXPECT_EQ(0xf0b0d0f010305070UL, info.offset());
#else
VerifyLine("f2345678-fabcdef8 rwxp f0305070 00:00 0\n", &info);
EXPECT_EQ(0xf2345678UL, info.start_);
@@ -184,43 +184,43 @@ TEST(MapsTest, parse_permissions) {
MapInfo* info = maps.Get(0);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ(PROT_NONE, info->flags_);
- EXPECT_EQ(0x1000U, info->start_);
- EXPECT_EQ(0x2000U, info->end_);
- EXPECT_EQ(0U, info->offset_);
- EXPECT_EQ("", info->name_);
+ EXPECT_EQ(PROT_NONE, info->flags());
+ EXPECT_EQ(0x1000U, info->start());
+ EXPECT_EQ(0x2000U, info->end());
+ EXPECT_EQ(0U, info->offset());
+ EXPECT_EQ("", info->name());
info = maps.Get(1);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ(PROT_READ, info->flags_);
- EXPECT_EQ(0x2000U, info->start_);
- EXPECT_EQ(0x3000U, info->end_);
- EXPECT_EQ(0U, info->offset_);
- EXPECT_EQ("", info->name_);
+ EXPECT_EQ(PROT_READ, info->flags());
+ EXPECT_EQ(0x2000U, info->start());
+ EXPECT_EQ(0x3000U, info->end());
+ EXPECT_EQ(0U, info->offset());
+ EXPECT_EQ("", info->name());
info = maps.Get(2);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ(PROT_WRITE, info->flags_);
- EXPECT_EQ(0x3000U, info->start_);
- EXPECT_EQ(0x4000U, info->end_);
- EXPECT_EQ(0U, info->offset_);
- EXPECT_EQ("", info->name_);
+ EXPECT_EQ(PROT_WRITE, info->flags());
+ EXPECT_EQ(0x3000U, info->start());
+ EXPECT_EQ(0x4000U, info->end());
+ EXPECT_EQ(0U, info->offset());
+ EXPECT_EQ("", info->name());
info = maps.Get(3);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ(PROT_EXEC, info->flags_);
- EXPECT_EQ(0x4000U, info->start_);
- EXPECT_EQ(0x5000U, info->end_);
- EXPECT_EQ(0U, info->offset_);
- EXPECT_EQ("", info->name_);
+ EXPECT_EQ(PROT_EXEC, info->flags());
+ EXPECT_EQ(0x4000U, info->start());
+ EXPECT_EQ(0x5000U, info->end());
+ EXPECT_EQ(0U, info->offset());
+ EXPECT_EQ("", info->name());
info = maps.Get(4);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ(PROT_READ | PROT_WRITE | PROT_EXEC, info->flags_);
- EXPECT_EQ(0x5000U, info->start_);
- EXPECT_EQ(0x6000U, info->end_);
- EXPECT_EQ(0U, info->offset_);
- EXPECT_EQ("", info->name_);
+ EXPECT_EQ(PROT_READ | PROT_WRITE | PROT_EXEC, info->flags());
+ EXPECT_EQ(0x5000U, info->start());
+ EXPECT_EQ(0x6000U, info->end());
+ EXPECT_EQ(0U, info->offset());
+ EXPECT_EQ("", info->name());
ASSERT_TRUE(maps.Get(5) == nullptr);
}
@@ -236,27 +236,27 @@ TEST(MapsTest, parse_name) {
MapInfo* info = maps.Get(0);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ("", info->name_);
- EXPECT_EQ(0x7b29b000U, info->start_);
- EXPECT_EQ(0x7b29e000U, info->end_);
- EXPECT_EQ(0U, info->offset_);
- EXPECT_EQ(PROT_READ | PROT_WRITE, info->flags_);
+ EXPECT_EQ("", info->name());
+ EXPECT_EQ(0x7b29b000U, info->start());
+ EXPECT_EQ(0x7b29e000U, info->end());
+ EXPECT_EQ(0U, info->offset());
+ EXPECT_EQ(PROT_READ | PROT_WRITE, info->flags());
info = maps.Get(1);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ("/system/lib/fake.so", info->name_);
- EXPECT_EQ(0x7b29e000U, info->start_);
- EXPECT_EQ(0x7b29f000U, info->end_);
- EXPECT_EQ(0U, info->offset_);
- EXPECT_EQ(PROT_READ | PROT_WRITE, info->flags_);
+ EXPECT_EQ("/system/lib/fake.so", info->name());
+ EXPECT_EQ(0x7b29e000U, info->start());
+ EXPECT_EQ(0x7b29f000U, info->end());
+ EXPECT_EQ(0U, info->offset());
+ EXPECT_EQ(PROT_READ | PROT_WRITE, info->flags());
info = maps.Get(2);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ("", info->name_);
- EXPECT_EQ(0x7b29f000U, info->start_);
- EXPECT_EQ(0x7b2a0000U, info->end_);
- EXPECT_EQ(0U, info->offset_);
- EXPECT_EQ(PROT_READ | PROT_WRITE, info->flags_);
+ EXPECT_EQ("", info->name());
+ EXPECT_EQ(0x7b29f000U, info->start());
+ EXPECT_EQ(0x7b2a0000U, info->end());
+ EXPECT_EQ(0U, info->offset());
+ EXPECT_EQ(PROT_READ | PROT_WRITE, info->flags());
ASSERT_TRUE(maps.Get(3) == nullptr);
}
@@ -271,19 +271,19 @@ TEST(MapsTest, parse_offset) {
MapInfo* info = maps.Get(0);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ(0U, info->offset_);
- EXPECT_EQ(0xa000U, info->start_);
- EXPECT_EQ(0xe000U, info->end_);
- EXPECT_EQ(PROT_READ | PROT_WRITE, info->flags_);
- EXPECT_EQ("/system/lib/fake.so", info->name_);
+ EXPECT_EQ(0U, info->offset());
+ EXPECT_EQ(0xa000U, info->start());
+ EXPECT_EQ(0xe000U, info->end());
+ EXPECT_EQ(PROT_READ | PROT_WRITE, info->flags());
+ EXPECT_EQ("/system/lib/fake.so", info->name());
info = maps.Get(1);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ(0xa12345U, info->offset_);
- EXPECT_EQ(0xe000U, info->start_);
- EXPECT_EQ(0xf000U, info->end_);
- EXPECT_EQ(PROT_READ | PROT_WRITE, info->flags_);
- EXPECT_EQ("/system/lib/fake.so", info->name_);
+ EXPECT_EQ(0xa12345U, info->offset());
+ EXPECT_EQ(0xe000U, info->start());
+ EXPECT_EQ(0xf000U, info->end());
+ EXPECT_EQ(PROT_READ | PROT_WRITE, info->flags());
+ EXPECT_EQ("/system/lib/fake.so", info->name());
ASSERT_TRUE(maps.Get(2) == nullptr);
}
@@ -297,11 +297,11 @@ TEST(MapsTest, iterate) {
ASSERT_EQ(2U, maps.Total());
Maps::iterator it = maps.begin();
- EXPECT_EQ(0xa000U, (*it)->start_);
- EXPECT_EQ(0xe000U, (*it)->end_);
+ EXPECT_EQ(0xa000U, (*it)->start());
+ EXPECT_EQ(0xe000U, (*it)->end());
++it;
- EXPECT_EQ(0xe000U, (*it)->start_);
- EXPECT_EQ(0xf000U, (*it)->end_);
+ EXPECT_EQ(0xe000U, (*it)->start());
+ EXPECT_EQ(0xf000U, (*it)->end());
++it;
EXPECT_EQ(maps.end(), it);
}
@@ -315,10 +315,10 @@ TEST(MapsTest, const_iterate) {
ASSERT_EQ(2U, maps.Total());
Maps::const_iterator it = maps.begin();
- EXPECT_EQ(0xa000U, (*it)->start_);
+ EXPECT_EQ(0xa000U, (*it)->start());
EXPECT_EQ(0xe000U, (*it)->end_);
++it;
- EXPECT_EQ(0xe000U, (*it)->start_);
+ EXPECT_EQ(0xe000U, (*it)->start());
EXPECT_EQ(0xf000U, (*it)->end_);
++it;
EXPECT_EQ(maps.end(), it);
@@ -337,19 +337,19 @@ TEST(MapsTest, device) {
MapInfo* info = maps.Get(0);
ASSERT_TRUE(info != nullptr);
EXPECT_TRUE(info->flags_ & 0x8000);
- EXPECT_EQ("/dev/", info->name_);
+ EXPECT_EQ("/dev/", info->name());
info = maps.Get(1);
EXPECT_TRUE(info->flags_ & 0x8000);
- EXPECT_EQ("/dev/does_not_exist", info->name_);
+ EXPECT_EQ("/dev/does_not_exist", info->name());
info = maps.Get(2);
EXPECT_FALSE(info->flags_ & 0x8000);
- EXPECT_EQ("/dev/ashmem/does_not_exist", info->name_);
+ EXPECT_EQ("/dev/ashmem/does_not_exist", info->name());
info = maps.Get(3);
EXPECT_FALSE(info->flags_ & 0x8000);
- EXPECT_EQ("/devsomething/does_not_exist", info->name_);
+ EXPECT_EQ("/devsomething/does_not_exist", info->name());
}
TEST(MapsTest, file_smoke) {
@@ -369,27 +369,27 @@ TEST(MapsTest, file_smoke) {
MapInfo* info = maps.Get(0);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ(0x7b29b000U, info->start_);
- EXPECT_EQ(0x7b29e000U, info->end_);
- EXPECT_EQ(0xa0000000U, info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, info->flags_);
- EXPECT_EQ("/fake.so", info->name_);
+ EXPECT_EQ(0x7b29b000U, info->start());
+ EXPECT_EQ(0x7b29e000U, info->end());
+ EXPECT_EQ(0xa0000000U, info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, info->flags());
+ EXPECT_EQ("/fake.so", info->name());
info = maps.Get(1);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ(0x7b2b0000U, info->start_);
- EXPECT_EQ(0x7b2e0000U, info->end_);
- EXPECT_EQ(0xb0000000U, info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, info->flags_);
- EXPECT_EQ("/fake2.so", info->name_);
+ EXPECT_EQ(0x7b2b0000U, info->start());
+ EXPECT_EQ(0x7b2e0000U, info->end());
+ EXPECT_EQ(0xb0000000U, info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, info->flags());
+ EXPECT_EQ("/fake2.so", info->name());
info = maps.Get(2);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ(0x7b2e0000U, info->start_);
- EXPECT_EQ(0x7b2f0000U, info->end_);
- EXPECT_EQ(0xc0000000U, info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, info->flags_);
- EXPECT_EQ("/fake3.so", info->name_);
+ EXPECT_EQ(0x7b2e0000U, info->start());
+ EXPECT_EQ(0x7b2f0000U, info->end());
+ EXPECT_EQ(0xc0000000U, info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, info->flags());
+ EXPECT_EQ("/fake3.so", info->name());
ASSERT_TRUE(maps.Get(3) == nullptr);
}
@@ -411,27 +411,27 @@ TEST(MapsTest, file_no_map_name) {
MapInfo* info = maps.Get(0);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ(0x7b29b000U, info->start_);
- EXPECT_EQ(0x7b29e000U, info->end_);
- EXPECT_EQ(0xa0000000U, info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, info->flags_);
- EXPECT_EQ("", info->name_);
+ EXPECT_EQ(0x7b29b000U, info->start());
+ EXPECT_EQ(0x7b29e000U, info->end());
+ EXPECT_EQ(0xa0000000U, info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, info->flags());
+ EXPECT_EQ("", info->name());
info = maps.Get(1);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ(0x7b2b0000U, info->start_);
- EXPECT_EQ(0x7b2e0000U, info->end_);
- EXPECT_EQ(0xb0000000U, info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, info->flags_);
- EXPECT_EQ("/fake2.so", info->name_);
+ EXPECT_EQ(0x7b2b0000U, info->start());
+ EXPECT_EQ(0x7b2e0000U, info->end());
+ EXPECT_EQ(0xb0000000U, info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, info->flags());
+ EXPECT_EQ("/fake2.so", info->name());
info = maps.Get(2);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ(0x7b2e0000U, info->start_);
- EXPECT_EQ(0x7b2f0000U, info->end_);
- EXPECT_EQ(0xc0000000U, info->offset_);
- EXPECT_EQ(PROT_READ | PROT_EXEC, info->flags_);
- EXPECT_EQ("", info->name_);
+ EXPECT_EQ(0x7b2e0000U, info->start());
+ EXPECT_EQ(0x7b2f0000U, info->end());
+ EXPECT_EQ(0xc0000000U, info->offset());
+ EXPECT_EQ(PROT_READ | PROT_EXEC, info->flags());
+ EXPECT_EQ("", info->name());
ASSERT_TRUE(maps.Get(3) == nullptr);
}
@@ -503,17 +503,17 @@ TEST(MapsTest, file_buffer_cross) {
for (size_t i = 0; i < index; i++) {
MapInfo* info = maps.Get(i);
ASSERT_TRUE(info != nullptr) << "Failed verifying index " + std::to_string(i);
- EXPECT_EQ(i * 4096, info->start_) << "Failed verifying index " + std::to_string(i);
- EXPECT_EQ((i + 1) * 4096, info->end_) << "Failed verifying index " + std::to_string(i);
- EXPECT_EQ(0U, info->offset_) << "Failed verifying index " + std::to_string(i);
+ EXPECT_EQ(i * 4096, info->start()) << "Failed verifying index " + std::to_string(i);
+ EXPECT_EQ((i + 1) * 4096, info->end()) << "Failed verifying index " + std::to_string(i);
+ EXPECT_EQ(0U, info->offset()) << "Failed verifying index " + std::to_string(i);
if (overlap1_index != 0 && i == overlap1_index) {
- EXPECT_EQ(overlap1_name, info->name_)
+ EXPECT_EQ(overlap1_name, info->name())
<< "Failed verifying overlap1 name " + std::to_string(i);
} else if (overlap2_index != 0 && i == overlap2_index) {
- EXPECT_EQ(overlap2_name, info->name_)
+ EXPECT_EQ(overlap2_name, info->name())
<< "Failed verifying overlap2 name " + std::to_string(i);
} else {
- EXPECT_EQ("", info->name_) << "Failed verifying index " + std::to_string(i);
+ EXPECT_EQ("", info->name()) << "Failed verifying index " + std::to_string(i);
}
}
}
@@ -552,10 +552,10 @@ TEST(MapsTest, large_file) {
ASSERT_EQ(5000U, maps.Total());
for (size_t i = 0; i < 5000; i++) {
MapInfo* info = maps.Get(i);
- EXPECT_EQ(start + i * 4096, info->start_) << "Failed at map " + std::to_string(i);
- EXPECT_EQ(start + (i + 1) * 4096, info->end_) << "Failed at map " + std::to_string(i);
+ EXPECT_EQ(start + i * 4096, info->start()) << "Failed at map " + std::to_string(i);
+ EXPECT_EQ(start + (i + 1) * 4096, info->end()) << "Failed at map " + std::to_string(i);
std::string name = "/fake" + std::to_string(i) + ".so";
- EXPECT_EQ(name, info->name_) << "Failed at map " + std::to_string(i);
+ EXPECT_EQ(name, info->name()) << "Failed at map " + std::to_string(i);
}
}
@@ -578,43 +578,43 @@ TEST(MapsTest, find) {
MapInfo* info = maps.Find(0x1000);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ(0x1000U, info->start_);
- EXPECT_EQ(0x2000U, info->end_);
- EXPECT_EQ(0x10U, info->offset_);
- EXPECT_EQ(PROT_READ, info->flags_);
- EXPECT_EQ("/system/lib/fake1.so", info->name_);
+ EXPECT_EQ(0x1000U, info->start());
+ EXPECT_EQ(0x2000U, info->end());
+ EXPECT_EQ(0x10U, info->offset());
+ EXPECT_EQ(PROT_READ, info->flags());
+ EXPECT_EQ("/system/lib/fake1.so", info->name());
info = maps.Find(0x3020);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ(0x3000U, info->start_);
- EXPECT_EQ(0x4000U, info->end_);
- EXPECT_EQ(0x20U, info->offset_);
- EXPECT_EQ(PROT_WRITE, info->flags_);
- EXPECT_EQ("/system/lib/fake2.so", info->name_);
+ EXPECT_EQ(0x3000U, info->start());
+ EXPECT_EQ(0x4000U, info->end());
+ EXPECT_EQ(0x20U, info->offset());
+ EXPECT_EQ(PROT_WRITE, info->flags());
+ EXPECT_EQ("/system/lib/fake2.so", info->name());
info = maps.Find(0x6020);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ(0x6000U, info->start_);
- EXPECT_EQ(0x8000U, info->end_);
- EXPECT_EQ(0x30U, info->offset_);
- EXPECT_EQ(PROT_EXEC, info->flags_);
- EXPECT_EQ("/system/lib/fake3.so", info->name_);
+ EXPECT_EQ(0x6000U, info->start());
+ EXPECT_EQ(0x8000U, info->end());
+ EXPECT_EQ(0x30U, info->offset());
+ EXPECT_EQ(PROT_EXEC, info->flags());
+ EXPECT_EQ("/system/lib/fake3.so", info->name());
info = maps.Find(0xafff);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ(0xa000U, info->start_);
- EXPECT_EQ(0xb000U, info->end_);
- EXPECT_EQ(0x40U, info->offset_);
- EXPECT_EQ(PROT_READ | PROT_WRITE, info->flags_);
- EXPECT_EQ("/system/lib/fake4.so", info->name_);
+ EXPECT_EQ(0xa000U, info->start());
+ EXPECT_EQ(0xb000U, info->end());
+ EXPECT_EQ(0x40U, info->offset());
+ EXPECT_EQ(PROT_READ | PROT_WRITE, info->flags());
+ EXPECT_EQ("/system/lib/fake4.so", info->name());
info = maps.Find(0xe500);
ASSERT_TRUE(info != nullptr);
- EXPECT_EQ(0xe000U, info->start_);
- EXPECT_EQ(0xf000U, info->end_);
- EXPECT_EQ(0x50U, info->offset_);
- EXPECT_EQ(PROT_READ | PROT_WRITE | PROT_EXEC, info->flags_);
- EXPECT_EQ("/system/lib/fake5.so", info->name_);
+ EXPECT_EQ(0xe000U, info->start());
+ EXPECT_EQ(0xf000U, info->end());
+ EXPECT_EQ(0x50U, info->offset());
+ EXPECT_EQ(PROT_READ | PROT_WRITE | PROT_EXEC, info->flags());
+ EXPECT_EQ("/system/lib/fake5.so", info->name());
}
} // namespace unwindstack
diff --git a/libunwindstack/tests/RegsTest.cpp b/libunwindstack/tests/RegsTest.cpp
index 42b3882..1a9e153 100644
--- a/libunwindstack/tests/RegsTest.cpp
+++ b/libunwindstack/tests/RegsTest.cpp
@@ -171,7 +171,7 @@ TEST_F(RegsTest, rel_pc_arm) {
TEST_F(RegsTest, elf_invalid) {
MapInfo map_info(nullptr, nullptr, 0x1000, 0x2000, 0, 0, "");
Elf* invalid_elf = new Elf(nullptr);
- map_info.elf_.reset(invalid_elf);
+ map_info.elf().reset(invalid_elf);
EXPECT_EQ(0x500U, invalid_elf->GetRelPc(0x1500, &map_info));
EXPECT_EQ(2U, GetPcAdjustment(0x500U, invalid_elf, ARCH_ARM));
diff --git a/libunwindstack/tests/UnwinderTest.cpp b/libunwindstack/tests/UnwinderTest.cpp
index aa3386c..ea429ab 100644
--- a/libunwindstack/tests/UnwinderTest.cpp
+++ b/libunwindstack/tests/UnwinderTest.cpp
@@ -52,7 +52,7 @@ class UnwinderTest : public ::testing::Test {
maps_->Add(start, end, offset, flags, name, static_cast<uint64_t>(-1));
MapInfo* map_info = maps_->Find(start);
if (elf != nullptr) {
- map_info->elf_.reset(elf);
+ map_info->elf().reset(elf);
}
return map_info;
}
@@ -929,7 +929,7 @@ TEST_F(UnwinderTest, map_ignore_suffixes) {
// Make sure the elf was not initialized.
MapInfo* map_info = maps_->Find(0x53000);
ASSERT_TRUE(map_info != nullptr);
- EXPECT_TRUE(map_info->elf_ == nullptr);
+ EXPECT_TRUE(map_info->elf() == nullptr);
auto* frame = &unwinder.frames()[0];
EXPECT_EQ(0U, frame->num);
diff --git a/libunwindstack/tests/fuzz/UnwinderComponentCreator.cpp b/libunwindstack/tests/fuzz/UnwinderComponentCreator.cpp
index 88d3168..51a9d8c 100644
--- a/libunwindstack/tests/fuzz/UnwinderComponentCreator.cpp
+++ b/libunwindstack/tests/fuzz/UnwinderComponentCreator.cpp
@@ -66,7 +66,7 @@ void ElfAddMapInfo(Maps* maps, uint64_t start, uint64_t end, uint64_t offset, ui
maps->Add(start, end, offset, flags, name, static_cast<uint64_t>(-1));
if (elf != nullptr) {
const auto& map_info = *--maps->end();
- map_info->elf_.reset(elf);
+ map_info->elf().reset(elf);
}
}
diff --git a/libunwindstack/tools/unwind_for_offline.cpp b/libunwindstack/tools/unwind_for_offline.cpp
index 689321b..49ab634 100644
--- a/libunwindstack/tools/unwind_for_offline.cpp
+++ b/libunwindstack/tools/unwind_for_offline.cpp
@@ -202,8 +202,8 @@ bool CopyElfFromFile(map_info_t* info, bool* file_copied) {
map_info_t* FillInAndGetMapInfo(std::unordered_map<uint64_t, map_info_t>& maps_by_start,
unwindstack::MapInfo* map_info) {
- auto info = &maps_by_start[map_info->start_];
- info->start = map_info->start_;
+ auto info = &maps_by_start[map_info->start()];
+ info->start = map_info->start();
info->end = map_info->end_;
info->offset = map_info->offset_;
info->name = map_info->name_;
@@ -258,15 +258,15 @@ int SaveData(pid_t pid) {
uint64_t sp_map_start = 0;
unwindstack::MapInfo* map_info = maps->Find(sp);
if (map_info != nullptr) {
- stacks.emplace_back(std::make_pair(sp, map_info->end_));
- sp_map_start = map_info->start_;
+ stacks.emplace_back(std::make_pair(sp, map_info->end()));
+ sp_map_start = map_info->start();
}
for (const auto& frame : unwinder.frames()) {
map_info = maps->Find(frame.sp);
- if (map_info != nullptr && sp_map_start != map_info->start_) {
- stacks.emplace_back(std::make_pair(frame.sp, map_info->end_));
- sp_map_start = map_info->start_;
+ if (map_info != nullptr && sp_map_start != map_info->start()) {
+ stacks.emplace_back(std::make_pair(frame.sp, map_info->end()));
+ sp_map_start = map_info->start();
}
if (maps_by_start.count(frame.map_start) == 0) {
@@ -282,10 +282,10 @@ int SaveData(pid_t pid) {
// If you are using a a linker that creates two maps (one read-only, one
// read-executable), it's necessary to capture the previous map
// information if needed.
- unwindstack::MapInfo* prev_map = map_info->prev_map_;
- if (prev_map != nullptr && map_info->offset_ != 0 && prev_map->offset_ == 0 &&
- prev_map->flags_ == PROT_READ && map_info->name_ == prev_map->name_ &&
- maps_by_start.count(prev_map->start_) == 0) {
+ unwindstack::MapInfo* prev_map = map_info->prev_map();
+ if (prev_map != nullptr && map_info->offset() != 0 && prev_map->offset() == 0 &&
+ prev_map->flags() == PROT_READ && map_info->name() == prev_map->name() &&
+ maps_by_start.count(prev_map->start()) == 0) {
info = FillInAndGetMapInfo(maps_by_start, prev_map);
SaveMapInformation(unwinder.GetProcessMemory(), info, &file_copied);
}