Add two helper functions. NFC.

llvm-svn: 289064
This commit is contained in:
Rafael Espindola 2016-12-08 15:56:33 +00:00
parent 58ee3b786d
commit c65aee64ec
2 changed files with 18 additions and 7 deletions

View File

@ -593,6 +593,15 @@ ArrayRef<SymbolBody *> SymbolTable<ELFT>::findDemangled(StringRef Name) {
return {};
}
template <class ELFT>
std::vector<SymbolBody *> SymbolTable<ELFT>::find(SymbolVersion Ver) {
if (Ver.IsExternCpp)
return findDemangled(Ver.Name);
std::vector<SymbolBody *> Syms;
Syms.push_back(find(Ver.Name));
return Syms;
}
template <class ELFT>
std::vector<SymbolBody *>
SymbolTable<ELFT>::findAllDemangled(StringRef GlobPat) {
@ -607,6 +616,11 @@ SymbolTable<ELFT>::findAllDemangled(StringRef GlobPat) {
return Res;
}
template <class ELFT>
std::vector<SymbolBody *> SymbolTable<ELFT>::findAll(SymbolVersion Ver) {
return Ver.IsExternCpp ? findAllDemangled(Ver.Name) : findAll(Ver.Name);
}
// If there's only one anonymous version definition in a version
// script file, the script does not actually define any symbol version,
// but just specifies symbols visibilities. We assume that the script was
@ -633,11 +647,7 @@ void SymbolTable<ELFT>::assignExactVersion(SymbolVersion Ver, uint16_t VersionId
return;
// Get a list of symbols which we need to assign the version to.
std::vector<SymbolBody *> Syms;
if (Ver.IsExternCpp)
Syms = findDemangled(Ver.Name);
else
Syms.push_back(find(Ver.Name));
std::vector<SymbolBody *> Syms = find(Ver);
// Assign the version.
for (SymbolBody *B : Syms) {
@ -659,8 +669,7 @@ void SymbolTable<ELFT>::assignWildcardVersion(SymbolVersion Ver,
uint16_t VersionId) {
if (!Ver.HasWildcard)
return;
std::vector<SymbolBody *> Syms =
Ver.IsExternCpp ? findAllDemangled(Ver.Name) : findAll(Ver.Name);
std::vector<SymbolBody *> Syms = findAll(Ver);
// Exact matching takes precendence over fuzzy matching,
// so we set a version to a symbol only if no version has been assigned

View File

@ -99,7 +99,9 @@ private:
InputFile *File);
ArrayRef<SymbolBody *> findDemangled(StringRef Name);
std::vector<SymbolBody *> find(SymbolVersion Ver);
std::vector<SymbolBody *> findAllDemangled(StringRef GlobPat);
std::vector<SymbolBody *> findAll(SymbolVersion Ver);
void initDemangledSyms();
void handleAnonymousVersion();