diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-30 03:57:31 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-30 03:57:31 +0000 |
commit | dc0db358abe19481e475e10c32149b53370f1a1c (patch) | |
tree | ab8ce99c4b255ce46f99ef402c27916055b899ee /vendor/gimli/examples/simple.rs | |
parent | Releasing progress-linux version 1.71.1+dfsg1-2~progress7.99u1. (diff) | |
download | rustc-dc0db358abe19481e475e10c32149b53370f1a1c.tar.xz rustc-dc0db358abe19481e475e10c32149b53370f1a1c.zip |
Merging upstream version 1.72.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/gimli/examples/simple.rs')
-rw-r--r-- | vendor/gimli/examples/simple.rs | 67 |
1 files changed, 0 insertions, 67 deletions
diff --git a/vendor/gimli/examples/simple.rs b/vendor/gimli/examples/simple.rs deleted file mode 100644 index 7c958d45c..000000000 --- a/vendor/gimli/examples/simple.rs +++ /dev/null @@ -1,67 +0,0 @@ -//! A simple example of parsing `.debug_info`. - -use object::{Object, ObjectSection}; -use std::{borrow, env, fs}; - -fn main() { - for path in env::args().skip(1) { - let file = fs::File::open(&path).unwrap(); - let mmap = unsafe { memmap2::Mmap::map(&file).unwrap() }; - let object = object::File::parse(&*mmap).unwrap(); - let endian = if object.is_little_endian() { - gimli::RunTimeEndian::Little - } else { - gimli::RunTimeEndian::Big - }; - dump_file(&object, endian).unwrap(); - } -} - -fn dump_file(object: &object::File, endian: gimli::RunTimeEndian) -> Result<(), gimli::Error> { - // Load a section and return as `Cow<[u8]>`. - let load_section = |id: gimli::SectionId| -> Result<borrow::Cow<[u8]>, gimli::Error> { - match object.section_by_name(id.name()) { - Some(ref section) => Ok(section - .uncompressed_data() - .unwrap_or(borrow::Cow::Borrowed(&[][..]))), - None => Ok(borrow::Cow::Borrowed(&[][..])), - } - }; - - // Load all of the sections. - let dwarf_cow = gimli::Dwarf::load(&load_section)?; - - // Borrow a `Cow<[u8]>` to create an `EndianSlice`. - let borrow_section: &dyn for<'a> Fn( - &'a borrow::Cow<[u8]>, - ) -> gimli::EndianSlice<'a, gimli::RunTimeEndian> = - &|section| gimli::EndianSlice::new(&*section, endian); - - // Create `EndianSlice`s for all of the sections. - let dwarf = dwarf_cow.borrow(&borrow_section); - - // Iterate over the compilation units. - let mut iter = dwarf.units(); - while let Some(header) = iter.next()? { - println!( - "Unit at <.debug_info+0x{:x}>", - header.offset().as_debug_info_offset().unwrap().0 - ); - let unit = dwarf.unit(header)?; - - // Iterate over the Debugging Information Entries (DIEs) in the unit. - let mut depth = 0; - let mut entries = unit.entries(); - while let Some((delta_depth, entry)) = entries.next_dfs()? { - depth += delta_depth; - println!("<{}><{:x}> {}", depth, entry.offset().0, entry.tag()); - - // Iterate over the attributes in the DIE. - let mut attrs = entry.attrs(); - while let Some(attr) = attrs.next()? { - println!(" {}: {:?}", attr.name(), attr.value()); - } - } - } - Ok(()) -} |