diff options
author | George Rimar <grimar@accesssoftek.com> | 2019-04-24 15:03:53 +0000 |
---|---|---|
committer | George Rimar <grimar@accesssoftek.com> | 2019-04-24 15:03:53 +0000 |
commit | 93a47a6291a9d6d71e94f28970a99dd309973118 (patch) | |
tree | aba638203698a2a8d7426f4887a092d698f3d64b | |
parent | a5f8dcb63f08fd93dbb8cc53bf9dfb6953f952ce (diff) | |
download | llvm-93a47a6291a9d6d71e94f28970a99dd309973118.zip llvm-93a47a6291a9d6d71e94f28970a99dd309973118.tar.gz llvm-93a47a6291a9d6d71e94f28970a99dd309973118.tar.bz2 |
[obj2yamp] - Simplify and cleanup the code in ELFDumper<ELFT>::dumpGroup a bit. NFC.
This makes the variables naming to match LLVM style,
simplifies the code used to extract the group members,
simplifies the loop and reorders the code around a bit.
llvm-svn: 359101
-rw-r--r-- | llvm/tools/obj2yaml/elf2yaml.cpp | 52 |
1 files changed, 25 insertions, 27 deletions
diff --git a/llvm/tools/obj2yaml/elf2yaml.cpp b/llvm/tools/obj2yaml/elf2yaml.cpp index 17f23d5..eee0936 100644 --- a/llvm/tools/obj2yaml/elf2yaml.cpp +++ b/llvm/tools/obj2yaml/elf2yaml.cpp @@ -585,46 +585,44 @@ ELFDumper<ELFT>::dumpVerneedSection(const Elf_Shdr *Shdr) { template <class ELFT> ErrorOr<ELFYAML::Group *> ELFDumper<ELFT>::dumpGroup(const Elf_Shdr *Shdr) { auto S = make_unique<ELFYAML::Group>(); - if (std::error_code EC = dumpCommonSection(Shdr, *S)) return EC; - // Get sh_info which is the signature. + auto SymtabOrErr = Obj.getSection(Shdr->sh_link); if (!SymtabOrErr) return errorToErrorCode(SymtabOrErr.takeError()); + // Get symbol with index sh_info which name is the signature of the group. const Elf_Shdr *Symtab = *SymtabOrErr; auto SymOrErr = Obj.getSymbol(Symtab, Shdr->sh_info); if (!SymOrErr) return errorToErrorCode(SymOrErr.takeError()); - const Elf_Sym *symbol = *SymOrErr; auto StrTabOrErr = Obj.getStringTableForSymtab(*Symtab); if (!StrTabOrErr) return errorToErrorCode(StrTabOrErr.takeError()); - StringRef StrTab = *StrTabOrErr; - auto sectionContents = Obj.getSectionContents(Shdr); - if (!sectionContents) - return errorToErrorCode(sectionContents.takeError()); - Expected<StringRef> symbolName = getSymbolName(symbol, StrTab, Symtab); - if (!symbolName) - return errorToErrorCode(symbolName.takeError()); - S->Signature = *symbolName; - const Elf_Word *groupMembers = - reinterpret_cast<const Elf_Word *>(sectionContents->data()); - const long count = (Shdr->sh_size) / sizeof(Elf_Word); - ELFYAML::SectionOrType s; - for (int i = 0; i < count; i++) { - if (groupMembers[i] == llvm::ELF::GRP_COMDAT) { - s.sectionNameOrType = "GRP_COMDAT"; - } else { - auto sHdr = Obj.getSection(groupMembers[i]); - if (!sHdr) - return errorToErrorCode(sHdr.takeError()); - auto sectionName = getUniquedSectionName(*sHdr); - if (!sectionName) - return errorToErrorCode(sectionName.takeError()); - s.sectionNameOrType = *sectionName; + + Expected<StringRef> SymbolName = + getSymbolName(*SymOrErr, *StrTabOrErr, Symtab); + if (!SymbolName) + return errorToErrorCode(SymbolName.takeError()); + S->Signature = *SymbolName; + + auto MembersOrErr = Obj.template getSectionContentsAsArray<Elf_Word>(Shdr); + if (!MembersOrErr) + return errorToErrorCode(MembersOrErr.takeError()); + + for (Elf_Word Member : *MembersOrErr) { + if (Member == llvm::ELF::GRP_COMDAT) { + S->Members.push_back({"GRP_COMDAT"}); + continue; } - S->Members.push_back(s); + + auto SHdrOrErr = Obj.getSection(Member); + if (!SHdrOrErr) + return errorToErrorCode(SHdrOrErr.takeError()); + auto NameOrErr = getUniquedSectionName(*SHdrOrErr); + if (!NameOrErr) + return errorToErrorCode(NameOrErr.takeError()); + S->Members.push_back({*NameOrErr}); } return S.release(); } |