Merge remote-tracking branch 'upstream/master' Change-Id: I2e2358d08907148a5e12f3d4023e9002137148d6
diff --git a/src/bloaty.cc b/src/bloaty.cc index 8bc4c08..5ebe13a 100644 --- a/src/bloaty.cc +++ b/src/bloaty.cc
@@ -1440,7 +1440,8 @@ 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 482c9e6..a41a67c 100644 --- a/src/bloaty.h +++ b/src/bloaty.h
@@ -205,6 +205,8 @@ // 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
diff --git a/src/elf.cc b/src/elf.cc index a8d7f42..9832566 100644 --- a/src/elf.cc +++ b/src/elf.cc
@@ -920,6 +920,12 @@ 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);