[PATCH] D87362: [llvm-readobj/elf] - Simplify and refine the implementation which dumps .stack_sizes

George Rimar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 9 04:31:32 PDT 2020


grimar created this revision.
grimar added reviewers: jhenderson, MaskRay.
Herald added a subscriber: rupprecht.
Herald added a project: LLVM.
grimar requested review of this revision.

Our implementation of stack sizes section dumping heavily uses `ELFObjectFile<ELFT>`,
while the rest of the code uses `ELFFile<ELFT>`.

That APIs are very different. `ELFObjectFile<ELFT>` is very generic
and has `SectionRef`, `RelocationRef`, `SymbolRef` and other generic concepts.
The `ELFFile<ELFT>` class works directly with `Elf_Shdr`, `Elf_Rel[a]`, `Elf_Sym` etc,
what is probably much cleaner for ELF dumper.

Also, `ELFObjectFile<ELFT>` API does not always provide a way to check
for possible errors. E.g. the implementation of `symbol_end()` does not verify the `sh_size`:

  template <class ELFT>
  basic_symbol_iterator ELFObjectFile<ELFT>::symbol_end() const {
    const Elf_Shdr *SymTab = DotSymtabSec;
    if (!SymTab)
      return symbol_begin();
    DataRefImpl Sym = toDRI(SymTab, SymTab->sh_size / sizeof(Elf_Sym));
    return basic_symbol_iterator(SymbolRef(Sym, this));
  }

There are many other examples which makes me thing we might win from
switching to `ELFFile<ELFT>` API, where we heavily validate an input data already.

This patch is the first step in this direction. I've converted the large portion of the code
to use `ELFFile<ELFT>`.


https://reviews.llvm.org/D87362

Files:
  llvm/tools/llvm-readobj/ELFDumper.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D87362.290696.patch
Type: text/x-patch
Size: 18356 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200909/c32ff50b/attachment-0001.bin>


More information about the llvm-commits mailing list