1f22ef01cSRoman Divacky //===-- llvm/CodeGen/MachineModuleInfoImpls.cpp ---------------------------===//
2f22ef01cSRoman Divacky //
3f22ef01cSRoman Divacky //                     The LLVM Compiler Infrastructure
4f22ef01cSRoman Divacky //
5f22ef01cSRoman Divacky // This file is distributed under the University of Illinois Open Source
6f22ef01cSRoman Divacky // License. See LICENSE.TXT for details.
7f22ef01cSRoman Divacky //
8f22ef01cSRoman Divacky //===----------------------------------------------------------------------===//
9f22ef01cSRoman Divacky //
10f22ef01cSRoman Divacky // This file implements object-file format specific implementations of
11f22ef01cSRoman Divacky // MachineModuleInfoImpl.
12f22ef01cSRoman Divacky //
13f22ef01cSRoman Divacky //===----------------------------------------------------------------------===//
14f22ef01cSRoman Divacky 
15f22ef01cSRoman Divacky #include "llvm/CodeGen/MachineModuleInfoImpls.h"
16f22ef01cSRoman Divacky #include "llvm/MC/MCSymbol.h"
17f22ef01cSRoman Divacky using namespace llvm;
18f22ef01cSRoman Divacky 
19f22ef01cSRoman Divacky //===----------------------------------------------------------------------===//
20f22ef01cSRoman Divacky // MachineModuleInfoMachO
21f22ef01cSRoman Divacky //===----------------------------------------------------------------------===//
22f22ef01cSRoman Divacky 
23f22ef01cSRoman Divacky // Out of line virtual method.
24f22ef01cSRoman Divacky void MachineModuleInfoMachO::Anchor() {}
25f22ef01cSRoman Divacky void MachineModuleInfoELF::Anchor() {}
26f22ef01cSRoman Divacky 
27f22ef01cSRoman Divacky static int SortSymbolPair(const void *LHS, const void *RHS) {
28f22ef01cSRoman Divacky   typedef std::pair<MCSymbol*, MachineModuleInfoImpl::StubValueTy> PairTy;
29f22ef01cSRoman Divacky   const MCSymbol *LHSS = ((const PairTy *)LHS)->first;
30f22ef01cSRoman Divacky   const MCSymbol *RHSS = ((const PairTy *)RHS)->first;
31f22ef01cSRoman Divacky   return LHSS->getName().compare(RHSS->getName());
32f22ef01cSRoman Divacky }
33f22ef01cSRoman Divacky 
34f22ef01cSRoman Divacky /// GetSortedStubs - Return the entries from a DenseMap in a deterministic
35f22ef01cSRoman Divacky /// sorted orer.
36f22ef01cSRoman Divacky MachineModuleInfoImpl::SymbolListTy
37f22ef01cSRoman Divacky MachineModuleInfoImpl::GetSortedStubs(const DenseMap<MCSymbol*,
38f22ef01cSRoman Divacky                                       MachineModuleInfoImpl::StubValueTy>&Map) {
39f22ef01cSRoman Divacky   MachineModuleInfoImpl::SymbolListTy List(Map.begin(), Map.end());
40f22ef01cSRoman Divacky 
41f22ef01cSRoman Divacky   if (!List.empty())
42f22ef01cSRoman Divacky     qsort(&List[0], List.size(), sizeof(List[0]), SortSymbolPair);
43f22ef01cSRoman Divacky   return List;
44f22ef01cSRoman Divacky }
45f22ef01cSRoman Divacky 
46