uint32_t SectionList::AddUniqueSection (SectionSP& sect_sp) { uint32_t sect_idx = FindSectionIndex (sect_sp.get()); if (sect_idx == UINT32_MAX) sect_idx = AddSection (sect_sp); return sect_idx; }
void UnwindTable::Initialize() { if (m_initialized) return; std::lock_guard<std::mutex> guard(m_mutex); if (m_initialized) // check again once we've acquired the lock return; m_initialized = true; SectionList *sl = m_object_file.GetSectionList(); if (!sl) return; SectionSP sect = sl->FindSectionByType(eSectionTypeEHFrame, true); if (sect.get()) { m_eh_frame_up.reset( new DWARFCallFrameInfo(m_object_file, sect, DWARFCallFrameInfo::EH)); } sect = sl->FindSectionByType(eSectionTypeDWARFDebugFrame, true); if (sect) { m_debug_frame_up.reset( new DWARFCallFrameInfo(m_object_file, sect, DWARFCallFrameInfo::DWARF)); } sect = sl->FindSectionByType(eSectionTypeCompactUnwind, true); if (sect) { m_compact_unwind_up.reset(new CompactUnwindInfo(m_object_file, sect)); } sect = sl->FindSectionByType(eSectionTypeARMexidx, true); if (sect) { SectionSP sect_extab = sl->FindSectionByType(eSectionTypeARMextab, true); if (sect_extab.get()) { m_arm_unwind_up.reset(new ArmUnwindInfo(m_object_file, sect, sect_extab)); } } }
void UnwindTable::Initialize () { if (m_initialized) return; SectionList* sl = m_object_file.GetSectionList (); if (sl) { SectionSP sect = sl->FindSectionByType (eSectionTypeEHFrame, true); if (sect.get()) { m_eh_frame = new DWARFCallFrameInfo(m_object_file, sect, eRegisterKindGCC, true); } } ArchSpec arch; if (m_object_file.GetArchitecture (arch)) { m_assembly_profiler = UnwindAssembly::FindPlugin (arch); m_initialized = true; } }