aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Haberman <jhaberman@gmail.com>2022-08-28 11:34:54 -0700
committerGitHub <noreply@github.com>2022-08-28 11:34:54 -0700
commit9293a0f11fbcae7f03127af436b9fc6b28f21ac8 (patch)
treea5f99892973c7d8de66211bdad82d89cfe0f3700
parenta1bbc93f5f6f969242046dffd9deb379f6735020 (diff)
parent702807119238ca92882eee0a23a5121d1c1e4cb3 (diff)
downloadbloaty-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.cc3
-rw-r--r--src/bloaty.h2
-rw-r--r--src/elf.cc6
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
diff --git a/src/elf.cc b/src/elf.cc
index 573382a..7d1a364 100644
--- a/src/elf.cc
+++ b/src/elf.cc
@@ -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);