summaryrefslogtreecommitdiff
path: root/rust/examples/dwarf/dwarf_import/src/die_handlers.rs
diff options
context:
space:
mode:
authorJosh Ferrell <josh@vector35.com>2024-07-05 12:15:21 -0400
committerJosh Ferrell <josh@vector35.com>2024-07-05 12:20:33 -0400
commit0dc909f1800296619053e067a1e3700665f4644c (patch)
tree5851a0791c03e7e5fce55f8ba6da3910f0e6e988 /rust/examples/dwarf/dwarf_import/src/die_handlers.rs
parent98db31c6f2442aac6b3d6687e0200fa61acc8d3b (diff)
Fix crash when parsing enums from zig dwarf info
Diffstat (limited to 'rust/examples/dwarf/dwarf_import/src/die_handlers.rs')
-rw-r--r--rust/examples/dwarf/dwarf_import/src/die_handlers.rs21
1 files changed, 11 insertions, 10 deletions
diff --git a/rust/examples/dwarf/dwarf_import/src/die_handlers.rs b/rust/examples/dwarf/dwarf_import/src/die_handlers.rs
index 24ef30fb..e6530dd2 100644
--- a/rust/examples/dwarf/dwarf_import/src/die_handlers.rs
+++ b/rust/examples/dwarf/dwarf_import/src/die_handlers.rs
@@ -108,16 +108,17 @@ pub(crate) fn handle_enum<R: Reader<Offset = usize>>(
while let Ok(Some(child)) = children.next() {
if child.entry().tag() == constants::DW_TAG_enumerator {
let name = debug_info_builder_context.get_name(unit, child.entry())?;
- let value = get_attr_as_u64(
- &child
- .entry()
- .attr(constants::DW_AT_const_value)
- .unwrap()
- .unwrap(),
- )
- .unwrap();
-
- enumeration_builder.insert(name, value);
+ let attr = &child
+ .entry()
+ .attr(constants::DW_AT_const_value)
+ .unwrap()
+ .unwrap();
+ if let Some(value) = get_attr_as_u64(attr) {
+ enumeration_builder.insert(name, value);
+ } else {
+ log::error!("Unhandled enum member value type - please report this");
+ return None;
+ }
}
}