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