[PATCH] D66799: [yaml2obj] - Allow placing local symbols after globals.
George Rimar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 29 04:01:53 PDT 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rGde0bc44883bc: [yaml2obj] - Allow placing local symbols after globals. (authored by grimar).
Herald added a subscriber: hiraditya.
Herald added a project: LLVM.
Changed prior to commit:
https://reviews.llvm.org/D66799?vs=217823&id=217829#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D66799/new/
https://reviews.llvm.org/D66799
Files:
llvm/lib/ObjectYAML/ELFEmitter.cpp
llvm/test/tools/yaml2obj/elf-symbols-binding-order.yaml
Index: llvm/test/tools/yaml2obj/elf-symbols-binding-order.yaml
===================================================================
--- llvm/test/tools/yaml2obj/elf-symbols-binding-order.yaml
+++ llvm/test/tools/yaml2obj/elf-symbols-binding-order.yaml
@@ -1,18 +1,34 @@
-## Check we restrict placing local symbols after global in .symtab
-## We might want to change it later to allow doing that
-## for producing broken outputs.
+## Check we allow placing local symbols after global to
+## .symtab and .dynsym. This allows us to produce broken outputs.
-# RUN: not yaml2obj %s -o %t 2>&1 | FileCheck %s
-# CHECK: error: Local symbol 'bar' after global in Symbols list.
+# RUN: yaml2obj %s -o %t
+# RUN: llvm-readelf --symbols %t | FileCheck %s
+
+# CHECK: Symbol table '.dynsym' contains 3 entries:
+# CHECK-NEXT: Num: Value Size Type Bind Vis Ndx Name
+# CHECK-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
+# CHECK-NEXT: 1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND dynamicGlobal
+# CHECK-NEXT: 2: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND dynamicLocal
+
+# CHECK: Symbol table '.symtab' contains 3 entries:
+# CHECK-NEXT: Num: Value Size Type Bind Vis Ndx Name
+# CHECK-NEXT: 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
+# CHECK-NEXT: 1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND staticGlobal
+# CHECK-NEXT: 2: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND staticLocal
--- !ELF
FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
- Machine: EM_X86_64
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+ Machine: EM_X86_64
Symbols:
- - Name: foo
+ - Name: staticGlobal
+ Binding: STB_GLOBAL
+ - Name: staticLocal
+ Binding: STB_LOCAL
+DynamicSymbols:
+ - Name: dynamicGlobal
Binding: STB_GLOBAL
- - Name: bar
+ - Name: dynamicLocal
Binding: STB_LOCAL
Index: llvm/lib/ObjectYAML/ELFEmitter.cpp
===================================================================
--- llvm/lib/ObjectYAML/ELFEmitter.cpp
+++ llvm/lib/ObjectYAML/ELFEmitter.cpp
@@ -995,24 +995,12 @@
}
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;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66799.217829.patch
Type: text/x-patch
Size: 3196 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190829/ff6422fd/attachment.bin>
More information about the llvm-commits
mailing list