summaryrefslogtreecommitdiff
path: root/tools/llvm-readobj
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2014-03-24 05:00:34 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2014-03-24 05:00:34 +0000
commit2236f9348ddccbc1fb71b8da6e84bc64aad24248 (patch)
treefa6d15ecd0bf2bb8c1bdd930fbda2a1ab3df6c6a /tools/llvm-readobj
parent07707e8969a3936f216874f314c5f8ceaa594a90 (diff)
downloadllvm-2236f9348ddccbc1fb71b8da6e84bc64aad24248.tar.gz
llvm-2236f9348ddccbc1fb71b8da6e84bc64aad24248.tar.bz2
llvm-2236f9348ddccbc1fb71b8da6e84bc64aad24248.tar.xz
Teach llvm-readobj to print human friendly description of reserved sections.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204584 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/llvm-readobj')
-rw-r--r--tools/llvm-readobj/ELFDumper.cpp24
1 files changed, 22 insertions, 2 deletions
diff --git a/tools/llvm-readobj/ELFDumper.cpp b/tools/llvm-readobj/ELFDumper.cpp
index e4532a5476..94b76d00e7 100644
--- a/tools/llvm-readobj/ELFDumper.cpp
+++ b/tools/llvm-readobj/ELFDumper.cpp
@@ -625,8 +625,28 @@ void ELFDumper<ELFT>::printDynamicSymbols() {
template <class ELFT>
void ELFDumper<ELFT>::printSymbol(typename ELFO::Elf_Sym_Iter Symbol) {
StringRef SymbolName = errorOrDefault(Obj->getSymbolName(Symbol));
- const Elf_Shdr *Sec = Obj->getSection(&*Symbol);
- StringRef SectionName = Sec ? errorOrDefault(Obj->getSectionName(Sec)) : "";
+
+ unsigned SectionIndex = Obj->getSymbolTableIndex(&*Symbol);
+ StringRef SectionName;
+ if (SectionIndex == SHN_UNDEF) {
+ SectionName = "Undefined";
+ } else if (SectionIndex >= SHN_LOPROC && SectionIndex <= SHN_HIPROC) {
+ SectionName = "Processor Specific";
+ } else if (SectionIndex >= SHN_LOOS && SectionIndex <= SHN_HIOS) {
+ SectionName = "Operating System Specific";
+ } else if (SectionIndex > SHN_HIOS && SectionIndex < SHN_ABS) {
+ SectionName = "Reserved";
+ } else if (SectionIndex == SHN_ABS) {
+ SectionName = "Absolute";
+ } else if (SectionIndex == SHN_COMMON) {
+ SectionName = "Common";
+ } else {
+ assert(SectionIndex != SHN_XINDEX &&
+ "getSymbolTableIndex should handle this");
+ const Elf_Shdr *Sec = Obj->getSection(SectionIndex);
+ SectionName = errorOrDefault(Obj->getSectionName(Sec));
+ }
+
std::string FullSymbolName(SymbolName);
if (Symbol.isDynamic()) {
bool IsDefault;