forked from OSchip/llvm-project
				
			
							parent
							
								
									8589e10c30
								
							
						
					
					
						commit
						bb07d10601
					
				| 
						 | 
				
			
			@ -1293,6 +1293,10 @@ static bool sortMipsSymbols(const SymbolBody *L, const SymbolBody *R) {
 | 
			
		|||
  return L->GotIndex < R->GotIndex;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Finalize a symbol table. The ELF spec requires that all local
 | 
			
		||||
// symbols precede global symbols, so we sort symbol entries in this
 | 
			
		||||
// function. (For .dynsym, we don't do that because symbols for
 | 
			
		||||
// dynamic linking are inherently all globals.)
 | 
			
		||||
template <class ELFT> void SymbolTableSection<ELFT>::finalizeContents() {
 | 
			
		||||
  this->OutSec->Link = this->Link = StrTabSec.OutSec->SectionIndex;
 | 
			
		||||
  this->OutSec->Entsize = this->Entsize;
 | 
			
		||||
| 
						 | 
				
			
			@ -1321,14 +1325,16 @@ template <class ELFT> void SymbolTableSection<ELFT>::finalizeContents() {
 | 
			
		|||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (In<ELFT>::GnuHashTab)
 | 
			
		||||
  if (In<ELFT>::GnuHashTab) {
 | 
			
		||||
    // NB: It also sorts Symbols to meet the GNU hash table requirements.
 | 
			
		||||
    In<ELFT>::GnuHashTab->addSymbols(Symbols);
 | 
			
		||||
  else if (Config->EMachine == EM_MIPS)
 | 
			
		||||
  } else if (Config->EMachine == EM_MIPS) {
 | 
			
		||||
    std::stable_sort(Symbols.begin(), Symbols.end(),
 | 
			
		||||
                     [](const SymbolTableEntry &L, const SymbolTableEntry &R) {
 | 
			
		||||
                       return sortMipsSymbols(L.Symbol, R.Symbol);
 | 
			
		||||
                     });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  size_t I = 0;
 | 
			
		||||
  for (const SymbolTableEntry &S : Symbols)
 | 
			
		||||
    S.Symbol->DynsymIndex = ++I;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue