[PATCH] D62349: Change ELF tools to allow multiple dynsym, versym, verdef and verneed sections per file.
Peter Collingbourne via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu May 23 14:54:04 PDT 2019
pcc created this revision.
pcc added reviewers: ruiu, MaskRay, grimar.
Herald added a subscriber: rupprecht.
Herald added a project: LLVM.
This is how multi-partition combined output files are going to look. If we
see multiple sections, the tools will just read the first one.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D62349
Files:
llvm/include/llvm/Object/ELFObjectFile.h
llvm/tools/llvm-readobj/ELFDumper.cpp
Index: llvm/tools/llvm-readobj/ELFDumper.cpp
===================================================================
--- llvm/tools/llvm-readobj/ELFDumper.cpp
+++ llvm/tools/llvm-readobj/ELFDumper.cpp
@@ -1404,9 +1404,8 @@
DotSymtabSec = &Sec;
break;
case ELF::SHT_DYNSYM:
- if (DynSymRegion.Size)
- reportError("Multiple SHT_DYNSYM");
- DynSymRegion = createDRIFrom(&Sec);
+ if (!DynSymRegion.Size)
+ DynSymRegion = createDRIFrom(&Sec);
// This is only used (if Elf_Shdr present)for naming section in GNU style
DynSymtabName = unwrapOrError(Obj->getSectionName(&Sec));
DynamicStringTable = unwrapOrError(Obj->getStringTableForSymtab(Sec));
@@ -1415,19 +1414,16 @@
ShndxTable = unwrapOrError(Obj->getSHNDXTable(Sec));
break;
case ELF::SHT_GNU_versym:
- if (SymbolVersionSection != nullptr)
- reportError("Multiple SHT_GNU_versym");
- SymbolVersionSection = &Sec;
+ if (!SymbolVersionSection)
+ SymbolVersionSection = &Sec;
break;
case ELF::SHT_GNU_verdef:
- if (SymbolVersionDefSection != nullptr)
- reportError("Multiple SHT_GNU_verdef");
- SymbolVersionDefSection = &Sec;
+ if (!SymbolVersionDefSection)
+ SymbolVersionDefSection = &Sec;
break;
case ELF::SHT_GNU_verneed:
- if (SymbolVersionNeedSection != nullptr)
- reportError("Multiple SHT_GNU_verneed");
- SymbolVersionNeedSection = &Sec;
+ if (!SymbolVersionNeedSection)
+ SymbolVersionNeedSection = &Sec;
break;
case ELF::SHT_LLVM_CALL_GRAPH_PROFILE:
if (DotCGProfileSec != nullptr)
Index: llvm/include/llvm/Object/ELFObjectFile.h
===================================================================
--- llvm/include/llvm/Object/ELFObjectFile.h
+++ llvm/include/llvm/Object/ELFObjectFile.h
@@ -940,9 +940,8 @@
for (const Elf_Shdr &Sec : *SectionsOrErr) {
switch (Sec.sh_type) {
case ELF::SHT_DYNSYM: {
- if (DotDynSymSec)
- return createError("More than one dynamic symbol table!");
- DotDynSymSec = &Sec;
+ if (!DotDynSymSec)
+ DotDynSymSec = &Sec;
break;
}
case ELF::SHT_SYMTAB: {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D62349.201078.patch
Type: text/x-patch
Size: 2213 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190523/a0d15427/attachment.bin>
More information about the llvm-commits
mailing list