diff options
Diffstat (limited to 'llvm/lib/ObjectYAML/ELFEmitter.cpp')
-rw-r--r-- | llvm/lib/ObjectYAML/ELFEmitter.cpp | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/llvm/lib/ObjectYAML/ELFEmitter.cpp b/llvm/lib/ObjectYAML/ELFEmitter.cpp index 96b13e4e530..76dd4b4e4e7 100644 --- a/llvm/lib/ObjectYAML/ELFEmitter.cpp +++ b/llvm/lib/ObjectYAML/ELFEmitter.cpp @@ -995,24 +995,12 @@ template <class ELFT> bool ELFState<ELFT>::buildSectionIndex() { } static bool buildSymbolsMap(ArrayRef<ELFYAML::Symbol> V, NameToIdxMap &Map) { - bool GlobalSymbolSeen = false; - std::size_t I = 0; - for (const ELFYAML::Symbol &Sym : V) { - ++I; - - StringRef Name = Sym.Name; - if (Sym.Binding.value == ELF::STB_LOCAL && GlobalSymbolSeen) { - WithColor::error() << "Local symbol '" + Name + - "' after global in Symbols list.\n"; - return false; - } - if (Sym.Binding.value != ELF::STB_LOCAL) - GlobalSymbolSeen = true; - - if (!Name.empty() && !Map.addName(Name, I)) { - WithColor::error() << "Repeated symbol name: '" << Name << "'.\n"; - return false; - } + for (size_t I = 0, S = V.size(); I < S; ++I) { + const ELFYAML::Symbol &Sym = V[I]; + if (Sym.Name.empty() || Map.addName(Sym.Name, I + 1)) + continue; + WithColor::error() << "Repeated symbol name: '" << Sym.Name << "'.\n"; + return false; } return true; } |