[ELF] De-virtualize findOrphanPos, excludeLibs and handleARMTlsRelocation
llvm-svn: 356331
This commit is contained in:
parent
997947961a
commit
6778b53e95
|
@ -1235,7 +1235,6 @@ static DenseSet<StringRef> getExcludeLibs(opt::InputArgList &Args) {
|
||||||
// A special library name "ALL" means all archive files.
|
// A special library name "ALL" means all archive files.
|
||||||
//
|
//
|
||||||
// This is not a popular option, but some programs such as bionic libc use it.
|
// This is not a popular option, but some programs such as bionic libc use it.
|
||||||
template <class ELFT>
|
|
||||||
static void excludeLibs(opt::InputArgList &Args) {
|
static void excludeLibs(opt::InputArgList &Args) {
|
||||||
DenseSet<StringRef> Libs = getExcludeLibs(Args);
|
DenseSet<StringRef> Libs = getExcludeLibs(Args);
|
||||||
bool All = Libs.count("ALL");
|
bool All = Libs.count("ALL");
|
||||||
|
@ -1555,7 +1554,7 @@ template <class ELFT> void LinkerDriver::link(opt::InputArgList &Args) {
|
||||||
|
|
||||||
// Handle the -exclude-libs option.
|
// Handle the -exclude-libs option.
|
||||||
if (Args.hasArg(OPT_exclude_libs))
|
if (Args.hasArg(OPT_exclude_libs))
|
||||||
excludeLibs<ELFT>(Args);
|
excludeLibs(Args);
|
||||||
|
|
||||||
// Create ElfHeader early. We need a dummy section in
|
// Create ElfHeader early. We need a dummy section in
|
||||||
// addReservedSymbols to mark the created symbols as not absolute.
|
// addReservedSymbols to mark the created symbols as not absolute.
|
||||||
|
|
|
@ -161,7 +161,6 @@ static unsigned handleMipsTlsRelocation(RelType Type, Symbol &Sym,
|
||||||
// The pair of GOT entries created are of the form
|
// The pair of GOT entries created are of the form
|
||||||
// GOT[e0] Module Index (Used to find pointer to TLS block at run-time)
|
// GOT[e0] Module Index (Used to find pointer to TLS block at run-time)
|
||||||
// GOT[e1] Offset of symbol in TLS block
|
// GOT[e1] Offset of symbol in TLS block
|
||||||
template <class ELFT>
|
|
||||||
static unsigned handleARMTlsRelocation(RelType Type, Symbol &Sym,
|
static unsigned handleARMTlsRelocation(RelType Type, Symbol &Sym,
|
||||||
InputSectionBase &C, uint64_t Offset,
|
InputSectionBase &C, uint64_t Offset,
|
||||||
int64_t Addend, RelExpr Expr) {
|
int64_t Addend, RelExpr Expr) {
|
||||||
|
@ -214,7 +213,7 @@ handleTlsRelocation(RelType Type, Symbol &Sym, InputSectionBase &C,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (Config->EMachine == EM_ARM)
|
if (Config->EMachine == EM_ARM)
|
||||||
return handleARMTlsRelocation<ELFT>(Type, Sym, C, Offset, Addend, Expr);
|
return handleARMTlsRelocation(Type, Sym, C, Offset, Addend, Expr);
|
||||||
if (Config->EMachine == EM_MIPS)
|
if (Config->EMachine == EM_MIPS)
|
||||||
return handleMipsTlsRelocation(Type, Sym, C, Offset, Addend, Expr);
|
return handleMipsTlsRelocation(Type, Sym, C, Offset, Addend, Expr);
|
||||||
|
|
||||||
|
|
|
@ -1042,7 +1042,6 @@ static bool shouldSkip(BaseCommand *Cmd) {
|
||||||
// We want to place orphan sections so that they share as much
|
// We want to place orphan sections so that they share as much
|
||||||
// characteristics with their neighbors as possible. For example, if
|
// characteristics with their neighbors as possible. For example, if
|
||||||
// both are rw, or both are tls.
|
// both are rw, or both are tls.
|
||||||
template <typename ELFT>
|
|
||||||
static std::vector<BaseCommand *>::iterator
|
static std::vector<BaseCommand *>::iterator
|
||||||
findOrphanPos(std::vector<BaseCommand *>::iterator B,
|
findOrphanPos(std::vector<BaseCommand *>::iterator B,
|
||||||
std::vector<BaseCommand *>::iterator E) {
|
std::vector<BaseCommand *>::iterator E) {
|
||||||
|
@ -1367,7 +1366,7 @@ template <class ELFT> void Writer<ELFT>::sortSections() {
|
||||||
I = FirstSectionOrDotAssignment;
|
I = FirstSectionOrDotAssignment;
|
||||||
|
|
||||||
while (NonScriptI != E) {
|
while (NonScriptI != E) {
|
||||||
auto Pos = findOrphanPos<ELFT>(I, NonScriptI);
|
auto Pos = findOrphanPos(I, NonScriptI);
|
||||||
OutputSection *Orphan = cast<OutputSection>(*NonScriptI);
|
OutputSection *Orphan = cast<OutputSection>(*NonScriptI);
|
||||||
|
|
||||||
// As an optimization, find all sections with the same sort rank
|
// As an optimization, find all sections with the same sort rank
|
||||||
|
|
Loading…
Reference in New Issue