diff options
author | Joshua Haberman <jhaberman@gmail.com> | 2022-08-28 11:34:54 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-28 11:34:54 -0700 |
commit | 9293a0f11fbcae7f03127af436b9fc6b28f21ac8 (patch) | |
tree | a5f99892973c7d8de66211bdad82d89cfe0f3700 | |
parent | a1bbc93f5f6f969242046dffd9deb379f6735020 (diff) | |
parent | 702807119238ca92882eee0a23a5121d1c1e4cb3 (diff) | |
download | bloaty-upstream-master.tar.gz |
Merge pull request #315 from brandonvu12/masterupstream-master
Provide size report despite not translating VM pointer
-rw-r--r-- | src/bloaty.cc | 3 | ||||
-rw-r--r-- | src/bloaty.h | 2 | ||||
-rw-r--r-- | src/elf.cc | 6 |
3 files changed, 10 insertions, 1 deletions
diff --git a/src/bloaty.cc b/src/bloaty.cc index 200c6b4..ec94647 100644 --- a/src/bloaty.cc +++ b/src/bloaty.cc @@ -1364,7 +1364,8 @@ absl::string_view RangeSink::TranslateVMToFile(uint64_t address) { uint64_t translated; if (!translator_->vm_map.Translate(address, &translated) || translated > file_->data().size()) { - THROW("Can't translate VM pointer to file"); + THROWF("Can't translate VM pointer ($0) to file", address); + } return file_->data().substr(translated); } diff --git a/src/bloaty.h b/src/bloaty.h index 5f8d470..91a8d10 100644 --- a/src/bloaty.h +++ b/src/bloaty.h @@ -203,6 +203,8 @@ public: // input_file().data()) to a VM address. uint64_t TranslateFileToVM(const char* ptr); absl::string_view TranslateVMToFile(uint64_t address); + const DualMap* Translator() { return translator_; } + // Decompresses zlib-formatted data and returns the decompressed data. // Since the decompressed data is not actually part of the file, any @@ -906,6 +906,12 @@ static void ReadELFSymbols(const InputFile& file, RangeSink* sink, if (verbose_level > 1) { printf("Disassembling function: %s\n", name.data()); } + // TODO(brandonvu) Continue if VM pointer cannot be translated. Issue #315 + uint64_t unused; + if (!sink->Translator()->vm_map.Translate(full_addr, &unused)) { + WARN("Can't translate VM pointer ($0) to file", full_addr); + continue; + } infop->text = sink->TranslateVMToFile(full_addr).substr(0, sym.st_size); infop->start_address = full_addr; DisassembleFindReferences(*infop, sink); |