aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2010-07-02 08:16:04 -0700
committerGraydon Hoare <[email protected]>2010-07-02 08:16:04 -0700
commit113c31a26d7310293361a68ecd52726bd7f427be (patch)
treef90030c588c895587b493094db9c6b22112a5e78 /src
parentIndent/outdent when logging dwarf at runtime. (diff)
downloadrust-113c31a26d7310293361a68ecd52726bd7f427be.tar.xz
rust-113c31a26d7310293361a68ecd52726bd7f427be.zip
Trap missing attr forms during dwarf-scan and shut down dwarf reader, don't crash.
Diffstat (limited to 'src')
-rw-r--r--src/rt/rust_crate_reader.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/rt/rust_crate_reader.cpp b/src/rt/rust_crate_reader.cpp
index ece0281c..fc934b98 100644
--- a/src/rt/rust_crate_reader.cpp
+++ b/src/rt/rust_crate_reader.cpp
@@ -258,10 +258,16 @@ rust_crate_reader::die::die(die_reader *rdr, uintptr_t off)
dom->get_log().outdent();
} else {
ab = rdr->abbrevs.get_abbrev(ab_idx);
- dom->log(rust_log::DWARF, "DIE <0x%" PRIxPTR "> abbrev 0x%"
- PRIxPTR, off, ab_idx);
- dom->log(rust_log::DWARF, " tag 0x%x, has children: %d",
- ab->tag, ab->has_children);
+ if (!ab) {
+ dom->log(rust_log::DWARF, " bad abbrev number: 0x%"
+ PRIxPTR, ab_idx);
+ rdr->fail();
+ } else {
+ dom->log(rust_log::DWARF, "DIE <0x%" PRIxPTR "> abbrev 0x%"
+ PRIxPTR, off, ab_idx);
+ dom->log(rust_log::DWARF, " tag 0x%x, has children: %d",
+ ab->tag, ab->has_children);
+ }
}
}