summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ObjectYAML/ELFEmitter.cpp
diff options
context:
space:
mode:
authorGeorge Rimar <grimar@accesssoftek.com>2019-08-29 10:58:47 +0000
committerGeorge Rimar <grimar@accesssoftek.com>2019-08-29 10:58:47 +0000
commitde0bc44883bc94ebaae85bf95d52a5e9bf7aa4ea (patch)
tree29fbfa4377263482ec26f66afe45c3f66902e80f /llvm/lib/ObjectYAML/ELFEmitter.cpp
parent72e9584698e83445c0e1ab84431675290f3d3595 (diff)
downloadbcm5719-llvm-de0bc44883bc94ebaae85bf95d52a5e9bf7aa4ea.tar.gz
bcm5719-llvm-de0bc44883bc94ebaae85bf95d52a5e9bf7aa4ea.zip
[yaml2obj] - Allow placing local symbols after globals.
This allows us to produce broken binaries with local symbols placed after global in '.dynsym'/'.symtab' Also, simplifies the code. Differential revision: https://reviews.llvm.org/D66799 llvm-svn: 370331
Diffstat (limited to 'llvm/lib/ObjectYAML/ELFEmitter.cpp')
-rw-r--r--llvm/lib/ObjectYAML/ELFEmitter.cpp24
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;
}
OpenPOWER on IntegriCloud