diff options
| author | Georgii Rymar <grimar@accesssoftek.com> | 2020-01-15 14:29:29 +0300 |
|---|---|---|
| committer | Georgii Rymar <grimar@accesssoftek.com> | 2020-01-15 15:15:24 +0300 |
| commit | 7570d387c21935b58afa67cb9ee17250e38721fa (patch) | |
| tree | b2fe64f4c8b521f34daf7188674286ceef0882ed /llvm/include | |
| parent | 13f22f5d5958a46db1212a083a426e339204c783 (diff) | |
| download | bcm5719-llvm-7570d387c21935b58afa67cb9ee17250e38721fa.tar.gz bcm5719-llvm-7570d387c21935b58afa67cb9ee17250e38721fa.zip | |
[yaml2obj/obj2yaml] - Add support for SHT_RELR sections.
Note: this is a reland with a trivial 2 lines fix in ELFState<ELFT>::writeSectionContent.
It adds a check similar to ones we already have for other sections to fix the case revealed
by bots, like http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/builds/60744.
The encoded sequence of Elf*_Relr entries in a SHT_RELR section looks
like [ AAAAAAAA BBBBBBB1 BBBBBBB1 ... AAAAAAAA BBBBBB1 ... ]
i.e. start with an address, followed by any number of bitmaps. The address
entry encodes 1 relocation. The subsequent bitmap entries encode up to 63(31)
relocations each, at subsequent offsets following the last address entry.
More information is here:
https://github.com/llvm-mirror/llvm/blob/master/lib/Object/ELF.cpp#L272
This patch adds a support for these sections.
Differential revision: https://reviews.llvm.org/D71872
Diffstat (limited to 'llvm/include')
| -rw-r--r-- | llvm/include/llvm/ObjectYAML/ELFYAML.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/include/llvm/ObjectYAML/ELFYAML.h b/llvm/include/llvm/ObjectYAML/ELFYAML.h index c9f14589906..f87135e6a1b 100644 --- a/llvm/include/llvm/ObjectYAML/ELFYAML.h +++ b/llvm/include/llvm/ObjectYAML/ELFYAML.h @@ -138,6 +138,7 @@ struct Chunk { Group, RawContent, Relocation, + Relr, NoBits, Note, Hash, @@ -440,6 +441,17 @@ struct RelocationSection : Section { } }; +struct RelrSection : Section { + Optional<std::vector<llvm::yaml::Hex64>> Entries; + Optional<yaml::BinaryRef> Content; + + RelrSection() : Section(ChunkKind::Relr) {} + + static bool classof(const Chunk *S) { + return S->Kind == ChunkKind::Relr; + } +}; + struct SymtabShndxSection : Section { std::vector<uint32_t> Entries; |

