[llvm-readelf] - Allow dumping dynamic symbols when there is no program headers.
commit634ebd0e68db64ab09a25d2bf4dd26274d27b71c
authorGeorge Rimar <grimar@accesssoftek.com>
Thu, 5 Sep 2019 14:02:58 +0000 (5 14:02 +0000)
committerGeorge Rimar <grimar@accesssoftek.com>
Thu, 5 Sep 2019 14:02:58 +0000 (5 14:02 +0000)
treeac2a1d5df9047fbbf415cf1e5f6ca21726a9e032
parentfc80e54405e325d7373deaac3d74c21cfa1616b4
[llvm-readelf] - Allow dumping dynamic symbols when there is no program headers.

D62179 introduced a regression. llvm-readelf lose the ability to dump the dynamic symbols
when there is .dynamic section with a DT_SYMTAB, but there are no program headers:
https://reviews.llvm.org/D62179#1652778

Below is a program flow before the D62179 change:

1) Find SHT_DYNSYM.
2) Find there is no PT_DYNAMIC => don't try to parse it.
3) Print dynamic symbols using information about them found on step (1).

And after the change it became:

1) Find SHT_DYNSYM.
2) Find there is no PT_DYNAMIC => find SHT_DYNAMIC.
3) Parse dynamic table, but fail to handle the DT_SYMTAB because of the absence of the PT_LOAD. Report the "Virtual address is not in any segment" error.

This patch fixes the issue. For doing this it checks that the value of DT_SYMTAB was
mapped to a segment. If not - it ignores it.

Differential revision: https://reviews.llvm.org/D67078

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@371071 91177308-0d34-0410-b5e6-96231b3b80d8
test/tools/llvm-readobj/dyn-symbols.test
tools/llvm-readobj/ELFDumper.cpp