[PATCH] D65087: [yaml2elf] - Treat the SHT_NULL section as kind of regular section.
George Rimar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 22 06:30:42 PDT 2019
grimar updated this revision to Diff 211077.
grimar added a comment.
- A minor simplification.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D65087/new/
https://reviews.llvm.org/D65087
Files:
test/tools/yaml2obj/duplicate-section-names.test
tools/yaml2obj/yaml2elf.cpp
Index: tools/yaml2obj/yaml2elf.cpp
===================================================================
--- tools/yaml2obj/yaml2elf.cpp
+++ tools/yaml2obj/yaml2elf.cpp
@@ -192,6 +192,12 @@
if (!D->Name.empty())
DocSections.insert(D->Name);
+ // Insert SHT_NULL section implicitly.
+ Doc.Sections.insert(
+ Doc.Sections.begin(),
+ llvm::make_unique<ELFYAML::Section>(
+ ELFYAML::Section::SectionKind::RawContent, true /*IsImplicit*/));
+
std::vector<StringRef> ImplicitSections = {".symtab", ".strtab", ".shstrtab"};
if (!Doc.DynamicSymbols.empty())
ImplicitSections.insert(ImplicitSections.end(), {".dynsym", ".dynstr"});
@@ -317,13 +323,11 @@
ContiguousBlobAccumulator &CBA) {
// Ensure SHN_UNDEF entry is present. An all-zero section header is a
// valid SHN_UNDEF entry since SHT_NULL == 0.
- SHeaders.resize(Doc.Sections.size() + 1);
- zero(SHeaders[0]);
+ SHeaders.resize(Doc.Sections.size());
- for (size_t I = 1; I < Doc.Sections.size() + 1; ++I) {
+ for (size_t I = 1; I < Doc.Sections.size(); ++I) {
Elf_Shdr &SHeader = SHeaders[I];
- zero(SHeader);
- ELFYAML::Section *Sec = Doc.Sections[I - 1].get();
+ ELFYAML::Section *Sec = Doc.Sections[I].get();
// We have a few sections like string or symbol tables that are usually
// added implicitly to the end. However, if they are explicitly specified
@@ -944,13 +948,12 @@
}
template <class ELFT> bool ELFState<ELFT>::buildSectionIndex() {
- for (unsigned i = 0, e = Doc.Sections.size(); i != e; ++i) {
- StringRef Name = Doc.Sections[i]->Name;
+ for (unsigned I = 1, E = Doc.Sections.size(); I != E; ++I) {
+ StringRef Name = Doc.Sections[I]->Name;
DotShStrtab.add(dropUniqueSuffix(Name));
- // "+ 1" to take into account the SHT_NULL entry.
- if (!SN2I.addName(Name, i + 1)) {
+ if (!SN2I.addName(Name, I)) {
WithColor::error() << "Repeated section name: '" << Name
- << "' at YAML section number " << i << ".\n";
+ << "' at YAML section number " << I << ".\n";
return false;
}
}
Index: test/tools/yaml2obj/duplicate-section-names.test
===================================================================
--- test/tools/yaml2obj/duplicate-section-names.test
+++ test/tools/yaml2obj/duplicate-section-names.test
@@ -29,7 +29,7 @@
## sections with equal names and suffixes.
# RUN: not yaml2obj --docnum=2 %s 2>&1 | FileCheck %s --check-prefix=CASE2
-# CASE2: error: Repeated section name: '.foo [1]' at YAML section number 1.
+# CASE2: error: Repeated section name: '.foo [1]' at YAML section number 2.
--- !ELF
FileHeader:
@@ -48,7 +48,7 @@
## names are equal.
# RUN: not yaml2obj --docnum=3 %s 2>&1 | FileCheck %s --check-prefix=CASE3
-# CASE3: error: Repeated section name: '.foo' at YAML section number 1.
+# CASE3: error: Repeated section name: '.foo' at YAML section number 2.
--- !ELF
FileHeader:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D65087.211077.patch
Type: text/x-patch
Size: 2996 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190722/442f4793/attachment.bin>
More information about the llvm-commits
mailing list