forked from OSchip/llvm-project
parent
58ee3b786d
commit
c65aee64ec
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Reference in New Issue