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);