[llvm] r354332 - Revert r354328, r354329 "[obj2yaml][yaml2obj] - Add support of parsing/dumping of the .gnu.version_r section."
George Rimar via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 19 06:38:25 PST 2019
Author: grimar
Date: Tue Feb 19 06:38:25 2019
New Revision: 354332
URL: http://llvm.org/viewvc/llvm-project?rev=354332&view=rev
Log:
Revert r354328, r354329 "[obj2yaml][yaml2obj] - Add support of parsing/dumping of the .gnu.version_r section."
Something went wrong. Bots are unhappy:
http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/builds/44113/steps/test/logs/stdio
Removed:
llvm/trunk/test/tools/obj2yaml/verneed-section.yaml
llvm/trunk/test/tools/yaml2obj/verneed-section.yaml
Modified:
llvm/trunk/include/llvm/ObjectYAML/ELFYAML.h
llvm/trunk/lib/ObjectYAML/ELFYAML.cpp
llvm/trunk/tools/obj2yaml/elf2yaml.cpp
llvm/trunk/tools/yaml2obj/yaml2elf.cpp
Modified: llvm/trunk/include/llvm/ObjectYAML/ELFYAML.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ObjectYAML/ELFYAML.h?rev=354332&r1=354331&r2=354332&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ObjectYAML/ELFYAML.h (original)
+++ llvm/trunk/include/llvm/ObjectYAML/ELFYAML.h Tue Feb 19 06:38:25 2019
@@ -121,7 +121,6 @@ struct Section {
RawContent,
Relocation,
NoBits,
- Verneed,
MipsABIFlags
};
SectionKind Kind;
@@ -168,30 +167,6 @@ struct NoBitsSection : Section {
}
};
-struct VernauxEntry {
- uint32_t Hash;
- uint16_t Flags;
- uint16_t Other;
- StringRef Name;
-};
-
-struct VerneedEntry {
- uint16_t Version;
- StringRef File;
- std::vector<VernauxEntry> AuxV;
-};
-
-struct VerneedSection : Section {
- std::vector<VerneedEntry> VerneedV;
- llvm::yaml::Hex64 Info;
-
- VerneedSection() : Section(SectionKind::Verneed) {}
-
- static bool classof(const Section *S) {
- return S->Kind == SectionKind::Verneed;
- }
-};
-
struct Group : Section {
// Members of a group contain a flag and a list of section indices
// that are part of the group.
@@ -263,8 +238,6 @@ LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::ELFYA
LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::ELFYAML::ProgramHeader)
LLVM_YAML_IS_SEQUENCE_VECTOR(std::unique_ptr<llvm::ELFYAML::Section>)
LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::ELFYAML::Symbol)
-LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::ELFYAML::VernauxEntry)
-LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::ELFYAML::VerneedEntry)
LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::ELFYAML::Relocation)
LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::ELFYAML::SectionOrType)
LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::ELFYAML::SectionName)
@@ -408,14 +381,6 @@ template <> struct MappingTraits<ELFYAML
static void mapping(IO &IO, ELFYAML::DynamicEntry &Rel);
};
-template <> struct MappingTraits<ELFYAML::VerneedEntry> {
- static void mapping(IO &IO, ELFYAML::VerneedEntry &E);
-};
-
-template <> struct MappingTraits<ELFYAML::VernauxEntry> {
- static void mapping(IO &IO, ELFYAML::VernauxEntry &E);
-};
-
template <> struct MappingTraits<ELFYAML::Relocation> {
static void mapping(IO &IO, ELFYAML::Relocation &Rel);
};
Modified: llvm/trunk/lib/ObjectYAML/ELFYAML.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ObjectYAML/ELFYAML.cpp?rev=354332&r1=354331&r2=354332&view=diff
==============================================================================
--- llvm/trunk/lib/ObjectYAML/ELFYAML.cpp (original)
+++ llvm/trunk/lib/ObjectYAML/ELFYAML.cpp Tue Feb 19 06:38:25 2019
@@ -872,12 +872,6 @@ static void sectionMapping(IO &IO, ELFYA
IO.mapOptional("Size", Section.Size, Hex64(0));
}
-static void sectionMapping(IO &IO, ELFYAML::VerneedSection &Section) {
- commonSectionMapping(IO, Section);
- IO.mapRequired("Info", Section.Info);
- IO.mapRequired("Dependencies", Section.VerneedV);
-}
-
static void sectionMapping(IO &IO, ELFYAML::RelocationSection &Section) {
commonSectionMapping(IO, Section);
IO.mapOptional("Info", Section.RelocatableSec, StringRef());
@@ -955,11 +949,6 @@ void MappingTraits<std::unique_ptr<ELFYA
Section.reset(new ELFYAML::MipsABIFlags());
sectionMapping(IO, *cast<ELFYAML::MipsABIFlags>(Section.get()));
break;
- case ELF::SHT_GNU_verneed:
- if (!IO.outputting())
- Section.reset(new ELFYAML::VerneedSection());
- sectionMapping(IO, *cast<ELFYAML::VerneedSection>(Section.get()));
- break;
default:
if (!IO.outputting())
Section.reset(new ELFYAML::RawContentSection());
@@ -1008,25 +997,6 @@ void MappingTraits<ELFYAML::DynamicEntry
IO.mapRequired("Value", Rel.Val);
}
-void MappingTraits<ELFYAML::VerneedEntry>::mapping(IO &IO,
- ELFYAML::VerneedEntry &E) {
- assert(!IO.getContext() && "The IO context is initialized already");
-
- IO.mapRequired("Version", E.Version);
- IO.mapRequired("File", E.File);
- IO.mapRequired("Entries", E.AuxV);
-}
-
-void MappingTraits<ELFYAML::VernauxEntry>::mapping(IO &IO,
- ELFYAML::VernauxEntry &E) {
- assert(!IO.getContext() && "The IO context is initialized already");
-
- IO.mapRequired("Name", E.Name);
- IO.mapRequired("Hash", E.Hash);
- IO.mapRequired("Flags", E.Flags);
- IO.mapRequired("Other", E.Other);
-}
-
void MappingTraits<ELFYAML::Relocation>::mapping(IO &IO,
ELFYAML::Relocation &Rel) {
const auto *Object = static_cast<ELFYAML::Object *>(IO.getContext());
Removed: llvm/trunk/test/tools/obj2yaml/verneed-section.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/obj2yaml/verneed-section.yaml?rev=354331&view=auto
==============================================================================
--- llvm/trunk/test/tools/obj2yaml/verneed-section.yaml (original)
+++ llvm/trunk/test/tools/obj2yaml/verneed-section.yaml (removed)
@@ -1,69 +0,0 @@
-# RUN: yaml2obj %s -o %t
-# RUN: obj2yaml %t | FileCheck %s
-
-## Check we are able to yamalize SHT_GNU_verneed section.
-
-# CHECK: - Name: .gnu.version_r
-# CHECK-NEXT: Type: SHT_GNU_verneed
-# CHECK-NEXT: Flags: [ SHF_ALLOC ]
-# CHECK-NEXT: Address: 0x0000000000200250
-# CHECK-NEXT: Link: .dynstr
-# CHECK-NEXT: AddressAlign: 0x0000000000000004
-# CHECK-NEXT: Info: 0x0000000000000002
-# CHECK-NEXT: Dependencies:
-# CHECK-NEXT: - Version: 1
-# CHECK-NEXT: File: dso.so.0
-# CHECK-NEXT: Entries:
-# CHECK-NEXT: - Name: v1
-# CHECK-NEXT: Hash: 1937
-# CHECK-NEXT: Flags: 10
-# CHECK-NEXT: Other: 3
-# CHECK-NEXT: - Name: v2
-# CHECK-NEXT: Hash: 1938
-# CHECK-NEXT: Flags: 11
-# CHECK-NEXT: Other: 4
-# CHECK-NEXT: - Version: 1
-# CHECK-NEXT: File: dso.so.1
-# CHECK-NEXT: Entries:
-# CHECK-NEXT: - Name: v3
-# CHECK-NEXT: Hash: 1939
-# CHECK-NEXT: Flags: 12
-# CHECK-NEXT: Other: 2
-
---- !ELF
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_EXEC
- Machine: EM_X86_64
- Entry: 0x0000000000201000
-Sections:
- - Name: .gnu.version_r
- Type: SHT_GNU_verneed
- Flags: [ SHF_ALLOC ]
- Address: 0x200250
- Link: .dynstr
- AddressAlign: 4
- Info: 2
- Dependencies:
- - Version: 1
- File: dso.so.0
- Entries:
- - Name: v1
- Hash: 1937
- Flags: 10
- Other: 3
- - Name: v2
- Hash: 1938
- Flags: 11
- Other: 4
- - Version: 1
- File: dso.so.1
- Entries:
- - Name: v3
- Hash: 1939
- Flags: 12
- Other: 2
-DynamicSymbols:
- Global:
- - Name: f1
Removed: llvm/trunk/test/tools/yaml2obj/verneed-section.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/yaml2obj/verneed-section.yaml?rev=354331&view=auto
==============================================================================
--- llvm/trunk/test/tools/yaml2obj/verneed-section.yaml (original)
+++ llvm/trunk/test/tools/yaml2obj/verneed-section.yaml (removed)
@@ -1,73 +0,0 @@
-# RUN: yaml2obj %s -o %t
-# RUN: llvm-readelf -V %t | FileCheck %s
-
-# Check we are able to handle the SHT_GNU_verneed sections.
-
-# CHECK: SHT_GNU_verneed {
-# CHECK-NEXT: Dependency {
-# CHECK-NEXT: Version: 1
-# CHECK-NEXT: Count: 2
-# CHECK-NEXT: FileName: dso.so.0
-# CHECK-NEXT: Entry {
-# CHECK-NEXT: Hash: 1937
-# CHECK-NEXT: Flags: 0xA
-# CHECK-NEXT: Index: 3
-# CHECK-NEXT: Name: v1
-# CHECK-NEXT: }
-# CHECK-NEXT: Entry {
-# CHECK-NEXT: Hash: 1938
-# CHECK-NEXT: Flags: 0xB
-# CHECK-NEXT: Index: 4
-# CHECK-NEXT: Name: v2
-# CHECK-NEXT: }
-# CHECK-NEXT: }
-# CHECK-NEXT: Dependency {
-# CHECK-NEXT: Version: 1
-# CHECK-NEXT: Count: 1
-# CHECK-NEXT: FileName: dso.so.1
-# CHECK-NEXT: Entry {
-# CHECK-NEXT: Hash: 1939
-# CHECK-NEXT: Flags: 0xC
-# CHECK-NEXT: Index: 2
-# CHECK-NEXT: Name: v3
-# CHECK-NEXT: }
-# CHECK-NEXT: }
-# CHECK-NEXT: }
-
---- !ELF
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_EXEC
- Machine: EM_X86_64
- Entry: 0x0000000000201000
-Sections:
- - Name: .gnu.version_r
- Type: SHT_GNU_verneed
- Flags: [ SHF_ALLOC ]
- Address: 0x0000000000200250
- Link: .dynstr
- AddressAlign: 0x0000000000000004
- Info: 0x0000000000000002
- Dependencies:
- - Version: 1
- File: dso.so.0
- Entries:
- - Name: v1
- Hash: 1937
- Flags: 10
- Other: 3
- - Name: v2
- Hash: 1938
- Flags: 11
- Other: 4
- - Version: 1
- File: dso.so.1
- Entries:
- - Name: v3
- Hash: 1939
- Flags: 12
- Other: 2
-DynamicSymbols:
- Global:
- - Name: f1
Modified: llvm/trunk/tools/obj2yaml/elf2yaml.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/obj2yaml/elf2yaml.cpp?rev=354332&r1=354331&r2=354332&view=diff
==============================================================================
--- llvm/trunk/tools/obj2yaml/elf2yaml.cpp (original)
+++ llvm/trunk/tools/obj2yaml/elf2yaml.cpp Tue Feb 19 06:38:25 2019
@@ -57,7 +57,6 @@ class ELFDumper {
ErrorOr<ELFYAML::RawContentSection *>
dumpContentSection(const Elf_Shdr *Shdr);
ErrorOr<ELFYAML::NoBitsSection *> dumpNoBitsSection(const Elf_Shdr *Shdr);
- ErrorOr<ELFYAML::VerneedSection *> dumpVerneedSection(const Elf_Shdr *Shdr);
ErrorOr<ELFYAML::Group *> dumpGroup(const Elf_Shdr *Shdr);
ErrorOr<ELFYAML::MipsABIFlags *> dumpMipsABIFlags(const Elf_Shdr *Shdr);
@@ -185,13 +184,6 @@ template <class ELFT> ErrorOr<ELFYAML::O
Y->Sections.push_back(std::unique_ptr<ELFYAML::Section>(S.get()));
break;
}
- case ELF::SHT_GNU_verneed: {
- ErrorOr<ELFYAML::VerneedSection *> S = dumpVerneedSection(&Sec);
- if (std::error_code EC = S.getError())
- return EC;
- Y->Sections.push_back(std::unique_ptr<ELFYAML::Section>(S.get()));
- break;
- }
default: {
ErrorOr<ELFYAML::RawContentSection *> S = dumpContentSection(&Sec);
if (std::error_code EC = S.getError())
@@ -450,63 +442,6 @@ ELFDumper<ELFT>::dumpNoBitsSection(const
return S.release();
}
-
-template <class ELFT>
-ErrorOr<ELFYAML::VerneedSection *>
-ELFDumper<ELFT>::dumpVerneedSection(const Elf_Shdr *Shdr) {
- typedef typename ELFT::Verneed Elf_Verneed;
- typedef typename ELFT::Vernaux Elf_Vernaux;
-
- auto S = make_unique<ELFYAML::VerneedSection>();
- if (std::error_code EC = dumpCommonSection(Shdr, *S))
- return EC;
-
- S->Info = Shdr->sh_info;
-
- auto Contents = Obj.getSectionContents(Shdr);
- if (!Contents)
- return errorToErrorCode(Contents.takeError());
-
- auto StringTableShdrOrErr = Obj.getSection(Shdr->sh_link);
- if (!StringTableShdrOrErr)
- return errorToErrorCode(StringTableShdrOrErr.takeError());
-
- auto StringTableOrErr = Obj.getStringTable(*StringTableShdrOrErr);
- if (!StringTableOrErr)
- return errorToErrorCode(StringTableOrErr.takeError());
-
- llvm::ArrayRef<uint8_t> Data = *Contents;
- const uint8_t *Buf = Data.data();
- while (Buf) {
- const Elf_Verneed *Verneed = reinterpret_cast<const Elf_Verneed *>(Buf);
-
- ELFYAML::VerneedEntry Entry;
- Entry.Version = Verneed->vn_version;
- Entry.File =
- StringRef(StringTableOrErr->drop_front(Verneed->vn_file).data());
-
- const uint8_t *BufAux = Buf + Verneed->vn_aux;
- while (BufAux) {
- const Elf_Vernaux *Vernaux =
- reinterpret_cast<const Elf_Vernaux *>(BufAux);
-
- ELFYAML::VernauxEntry Aux;
- Aux.Hash = Vernaux->vna_hash;
- Aux.Flags = Vernaux->vna_flags;
- Aux.Other = Vernaux->vna_other;
- Aux.Name =
- StringRef(StringTableOrErr->drop_front(Vernaux->vna_name).data());
-
- Entry.AuxV.push_back(Aux);
- BufAux = Vernaux->vna_next ? BufAux + Vernaux->vna_next : nullptr;
- }
-
- S->VerneedV.push_back(Entry);
- Buf = Verneed->vn_next ? Buf + Verneed->vn_next : nullptr;
- }
-
- return S.release();
-}
template <class ELFT>
ErrorOr<ELFYAML::Group *> ELFDumper<ELFT>::dumpGroup(const Elf_Shdr *Shdr) {
Modified: llvm/trunk/tools/yaml2obj/yaml2elf.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/yaml2obj/yaml2elf.cpp?rev=354332&r1=354331&r2=354332&view=diff
==============================================================================
--- llvm/trunk/tools/yaml2obj/yaml2elf.cpp (original)
+++ llvm/trunk/tools/yaml2obj/yaml2elf.cpp Tue Feb 19 06:38:25 2019
@@ -157,9 +157,6 @@ class ELFState {
bool writeSectionContent(Elf_Shdr &SHeader, const ELFYAML::Group &Group,
ContiguousBlobAccumulator &CBA);
bool writeSectionContent(Elf_Shdr &SHeader,
- const ELFYAML::VerneedSection &Section,
- ContiguousBlobAccumulator &CBA);
- bool writeSectionContent(Elf_Shdr &SHeader,
const ELFYAML::MipsABIFlags &Section,
ContiguousBlobAccumulator &CBA);
void writeSectionContent(Elf_Shdr &SHeader,
@@ -185,9 +182,6 @@ class ELFState {
public:
static int writeELF(raw_ostream &OS, const ELFYAML::Object &Doc);
-
-private:
- void finalizeStrings();
};
} // end anonymous namespace
@@ -303,8 +297,6 @@ bool ELFState<ELFT>::initSectionHeaders(
CBA.getOSAndAlignedOffset(SHeader.sh_offset, SHeader.sh_addralign);
} else if (auto S = dyn_cast<ELFYAML::DynamicSection>(Sec.get())) {
writeSectionContent(SHeader, *S, CBA);
- } else if (auto S = dyn_cast<ELFYAML::VerneedSection>(Sec.get())) {
- writeSectionContent(SHeader, *S, CBA);
} else
llvm_unreachable("Unknown section type");
@@ -346,6 +338,15 @@ void ELFState<ELFT>::initSymtabSectionHe
Syms.push_back(Sym);
}
+ // Add symbol names to .strtab or .dynstr.
+ for (const auto &Sym : Symbols.Local)
+ Strtab.add(Sym.Name);
+ for (const auto &Sym : Symbols.Global)
+ Strtab.add(Sym.Name);
+ for (const auto &Sym : Symbols.Weak)
+ Strtab.add(Sym.Name);
+ Strtab.finalize();
+
addSymbols(Symbols.Local, Syms, ELF::STB_LOCAL, Strtab);
addSymbols(Symbols.Global, Syms, ELF::STB_GLOBAL, Strtab);
addSymbols(Symbols.Weak, Syms, ELF::STB_WEAK, Strtab);
@@ -569,54 +570,6 @@ bool ELFState<ELFT>::writeSectionContent
template <class ELFT>
bool ELFState<ELFT>::writeSectionContent(Elf_Shdr &SHeader,
- const ELFYAML::VerneedSection &Section,
- ContiguousBlobAccumulator &CBA) {
- typedef typename ELFT::Verneed Elf_Verneed;
- typedef typename ELFT::Vernaux Elf_Vernaux;
-
- auto &OS = CBA.getOSAndAlignedOffset(SHeader.sh_offset, SHeader.sh_addralign);
-
- uint64_t AuxCnt = 0;
- for (size_t I = 0; I < Section.VerneedV.size(); ++I) {
- const ELFYAML::VerneedEntry &VE = Section.VerneedV[I];
-
- Elf_Verneed VerNeed;
- VerNeed.vn_version = VE.Version;
- VerNeed.vn_file = DotDynstr.getOffset(VE.File);
- if (I == Section.VerneedV.size() - 1)
- VerNeed.vn_next = 0;
- else
- VerNeed.vn_next =
- sizeof(Elf_Verneed) + VE.AuxV.size() * sizeof(Elf_Vernaux);
- VerNeed.vn_cnt = VE.AuxV.size();
- VerNeed.vn_aux = sizeof(Elf_Verneed);
- OS.write((const char *)&VerNeed, sizeof(Elf_Verneed));
-
- for (size_t J = 0; J < VE.AuxV.size(); ++J, ++AuxCnt) {
- const ELFYAML::VernauxEntry &VAuxE = VE.AuxV[J];
-
- Elf_Vernaux VernAux;
- VernAux.vna_hash = VAuxE.Hash;
- VernAux.vna_flags = VAuxE.Flags;
- VernAux.vna_other = VAuxE.Other;
- VernAux.vna_name = DotDynstr.getOffset(VAuxE.Name);
- if (J == VE.AuxV.size() - 1)
- VernAux.vna_next = 0;
- else
- VernAux.vna_next = sizeof(Elf_Vernaux);
- OS.write((const char *)&VernAux, sizeof(Elf_Vernaux));
- }
- }
-
- SHeader.sh_size = Section.VerneedV.size() * sizeof(Elf_Verneed) +
- AuxCnt * sizeof(Elf_Vernaux);
- SHeader.sh_info = Section.Info;
-
- return true;
-}
-
-template <class ELFT>
-bool ELFState<ELFT>::writeSectionContent(Elf_Shdr &SHeader,
const ELFYAML::MipsABIFlags &Section,
ContiguousBlobAccumulator &CBA) {
assert(Section.Type == llvm::ELF::SHT_MIPS_ABIFLAGS &&
@@ -708,52 +661,9 @@ ELFState<ELFT>::buildSymbolIndex(std::si
return true;
}
-template <class ELFT> void ELFState<ELFT>::finalizeStrings() {
- auto AddSymbols = [](StringTableBuilder &StrTab,
- const ELFYAML::LocalGlobalWeakSymbols &Symbols) {
- for (const auto &Sym : Symbols.Local)
- StrTab.add(Sym.Name);
- for (const auto &Sym : Symbols.Global)
- StrTab.add(Sym.Name);
- for (const auto &Sym : Symbols.Weak)
- StrTab.add(Sym.Name);
- };
-
- // Add the regular symbol names to .strtab section.
- AddSymbols(DotStrtab, Doc.Symbols);
- DotStrtab.finalize();
-
- if (!hasDynamicSymbols())
- return;
-
- // Add the dynamic symbol names to .dynstr section.
- AddSymbols(DotDynstr, Doc.DynamicSymbols);
-
- // SHT_GNU_verneed section also adds strings to .dynstr section.
- for (const std::unique_ptr<ELFYAML::Section> &Sec : Doc.Sections) {
- auto VerNeed = dyn_cast<ELFYAML::VerneedSection>(Sec.get());
- if (!VerNeed)
- continue;
-
- for (const ELFYAML::VerneedEntry &VE : VerNeed->VerneedV) {
- DotDynstr.add(VE.File);
- for (const ELFYAML::VernauxEntry &Aux : VE.AuxV)
- DotDynstr.add(Aux.Name);
- }
- }
-
- DotDynstr.finalize();
-}
-
template <class ELFT>
int ELFState<ELFT>::writeELF(raw_ostream &OS, const ELFYAML::Object &Doc) {
ELFState<ELFT> State(Doc);
-
- // Finalize .strtab and .dynstr sections. We do that early because want to
- // finalize the string table builders before writing the content of the
- // sections that might want to use them.
- State.finalizeStrings();
-
if (!State.buildSectionIndex())
return 1;
More information about the llvm-commits
mailing list