void EnterSection(const std::string& section_name) { boost::chrono::high_resolution_clock::time_point now(boost::chrono::high_resolution_clock::now()); // One time initialization. if (!m_sections) CreateSections(now); m_sections->Accumulate(now, section_name); }
/** This function initializes the Elf members @internalComponent @released */ void ElfProducer::InitElfContents() { iElfHeader = new Elf32_Ehdr; iSections = new Elf32_Shdr[MAX_SECTIONS+1]; iElfDynSym = new Elf32_Sym[iNSymbols]; iVersionTbl = new Elf32_Half[iNSymbols]; iVersionDef = new Elf32_Verdef[2]; iDSODaux = new Elf32_Verdaux[2]; iProgHeader = new Elf32_Phdr[2]; iCodeSectionData = new PLUINT32[iNSymbols]; iHashTbl = new Elf32_HashTable; //premeditated iHashTbl->nBuckets = (iNSymbols /3) + (iNSymbols % 0x3); iHashTbl->nChains = iNSymbols; iDSOBuckets = new Elf32_Sword[iHashTbl->nBuckets]; iDSOChains = new Elf32_Sword[iHashTbl->nChains]; Elf32_Sword aNullPtr = 0; memset(iDSOBuckets, aNullPtr, sizeof(Elf32_Sword)*iHashTbl->nBuckets); memset(iDSOChains, aNullPtr, sizeof(Elf32_Sword)*iHashTbl->nChains); memset(iCodeSectionData, 0, sizeof(PLUINT32)*iNSymbols); CreateElfHeader(); SymbolList::iterator aItr = iSymbolsList->begin(); SymbolList::iterator aEnd = iSymbolsList->end(); Symbol *aSym; PLUINT32 aIdx = 1; memset( &iElfDynSym[0], 0, sizeof(Elf32_Sym)); iDSOSymNameStrTbl.insert(iDSOSymNameStrTbl.end(), 0); while(aItr != aEnd) { String aSymName(""); aSym = *aItr; aSymName = aSym->SymbolName(); //set symbol info.. iElfDynSym[aIdx].st_name = iDSOSymNameStrTbl.size(); iDSOSymNameStrTbl.insert(iDSOSymNameStrTbl.end(), aSymName.begin(), aSymName.end() ); iDSOSymNameStrTbl.insert(iDSOSymNameStrTbl.end(), 0); SetSymolFields( aSym, &iElfDynSym[aIdx], aIdx); //set version table info... iVersionTbl[aIdx] = DEFAULT_VERSION; AddToHashTable(aSym->SymbolName(), aIdx); aItr++;aIdx++; } CreateVersionTable(); //Fill section headers... CreateSections(); //Copy dyn entries.. CreateDynamicEntries(); //create code section data - this has the ordinal numbers... CreateProgHeader(); }