[ELF] De-virtualize findOrphanPos, excludeLibs and handleARMTlsRelocation

llvm-svn: 356331
This commit is contained in:
Fangrui Song 2019-03-17 13:53:42 +00:00
parent 997947961a
commit 6778b53e95
3 changed files with 3 additions and 6 deletions

View File

@ -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.

View File

@ -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);

View File

@ -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