[yaml2obj][obj2yaml] - Improve how we set/dump the sh_entsize field.
authorGeorgii Rymar <grimar@accesssoftek.com>
Mon, 25 Jan 2021 14:15:31 +0000 (17:15 +0300)
committerGeorgii Rymar <grimar@accesssoftek.com>
Tue, 26 Jan 2021 10:33:02 +0000 (13:33 +0300)
commitd5e48f1347d50e0da4926c5e41e12fd4700abd14
tree45b345835175e0b5e2b98389fedd8d248ff4e416
parent510b3d4b3e02caa334f6718b9d8f3f29e758e922
[yaml2obj][obj2yaml] - Improve how we set/dump the sh_entsize field.

We already set the `sh_entsize` field in a single place
for all non-implicit sections.

This patch reorders the logic slightly and with it
we finally have the only one place where the `sh_entsize` is set.

obj2yaml will not dump the `EntSize` key for `SHT_DYNSYM/SHT_SYMTAB` sections anymore,
when the value of `sh_entsize` is equal to `sizeof(Elf_Sym)`

Note that this also seems revealed an issue in llvm-objcopy:
Previously yaml2obj set the `sh_entsize` for the `.symtab` section to 0x18,
now we it sets it for `SHT_SYMTAB` sections, i.e. by type.
But the `llvm-objcopy/ELF/only-keep-debug.test` has a `.symtab` section of type `SHT_STRTAB`,
and now yaml2obj sets the `sh_entsize` to 0 for it.
I had to update the corresponding check lines for `ES`, but the behavior of
`llvm-objcopy` should be fixed instead I think.
I've added a TODO and a comment.

Differential revision: https://reviews.llvm.org/D95364
llvm/include/llvm/ObjectYAML/ELFYAML.h
llvm/lib/ObjectYAML/ELFEmitter.cpp
llvm/test/tools/llvm-objcopy/ELF/only-keep-debug.test
llvm/test/tools/obj2yaml/ELF/entsize.yaml
llvm/test/tools/obj2yaml/ELF/implicit-sections-order.yaml
llvm/test/tools/obj2yaml/ELF/no-symtab.yaml