| 635 | |
| 636 | impl GuestObjectDiff for ResourceObjectDiff { |
| 637 | fn find_symbol(&self, name: String, section_name: Option<String>) -> Option<SymbolInfo> { |
| 638 | let obj = self.0.as_ref(); |
| 639 | let symbol_idx = obj.symbols.iter().position(|s| { |
| 640 | s.name == name |
| 641 | && match section_name.as_deref() { |
| 642 | Some(section_name) => { |
| 643 | s.section.is_some_and(|n| obj.sections[n].name == section_name) |
| 644 | } |
| 645 | None => true, |
| 646 | } |
| 647 | })?; |
| 648 | let symbol = obj.symbols.get(symbol_idx)?; |
| 649 | let section = symbol.section.and_then(|s| obj.sections.get(s)); |
| 650 | Some(SymbolInfo { |
| 651 | id: symbol_idx as SymbolRef, |
| 652 | name: symbol.name.clone(), |
| 653 | demangled_name: symbol.demangled_name.clone(), |
| 654 | address: symbol.address, |
| 655 | size: symbol.size, |
| 656 | kind: SymbolKind::from(symbol.kind), |
| 657 | section: symbol.section.map(|s| s as u32), |
| 658 | section_name: section.map(|sec| sec.name.clone()), |
| 659 | section_kind: section.map_or(SectionKind::Unknown, |sec| sec.kind.into()), |
| 660 | flags: SymbolFlags::from(symbol.flags), |
| 661 | align: symbol.align.map(|a| a.get()), |
| 662 | virtual_address: symbol.virtual_address, |
| 663 | }) |
| 664 | } |
| 665 | |
| 666 | fn get_symbol(&self, symbol_ref: SymbolRef) -> Option<SymbolInfo> { |
| 667 | let obj = self.0.as_ref(); |