[tools][llvm-readobj] print the name of the section when iterating the symbol table / dynamic symbol table

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177873 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/llvm-readobj/llvm-readobj.cpp b/tools/llvm-readobj/llvm-readobj.cpp
index 8f0917f..ea37d10 100644
--- a/tools/llvm-readobj/llvm-readobj.cpp
+++ b/tools/llvm-readobj/llvm-readobj.cpp
@@ -39,13 +39,13 @@
 InputFilename(cl::Positional, cl::desc("<input object>"), cl::init(""));
 
 static void dumpSymbolHeader() {
-  outs() << format("  %-32s", (const char*)"Name")
-         << format("  %-4s", (const char*)"Type")
-         << format("  %-16s", (const char*)"Address")
-         << format("  %-16s", (const char*)"Size")
-         << format("  %-16s", (const char*)"FileOffset")
-         << format("  %-26s", (const char*)"Flags")
-         << "\n";
+  outs() << format("  %-32s", (const char *)"Name")
+         << format("  %-4s", (const char *)"Type")
+         << format("  %-4s", (const char *)"Section")
+         << format("  %-16s", (const char *)"Address")
+         << format("  %-16s", (const char *)"Size")
+         << format("  %-16s", (const char *)"FileOffset")
+         << format("  %-26s", (const char *)"Flags") << "\n";
 }
 
 static void dumpSectionHeader() {
@@ -145,6 +145,14 @@
   checkError(Sym.getFlags(Flags), "SymbolRef.getFlags() failed");
   std::string FullName = Name;
 
+  llvm::object::section_iterator symSection(obj->begin_sections());
+  Sym.getSection(symSection);
+  StringRef sectionName;
+
+  if (symSection != obj->end_sections())
+    checkError(symSection->getName(sectionName),
+               "SectionRef::getName() failed");
+
   // If this is a dynamic symbol from an ELF object, append
   // the symbol's version to the name.
   if (IsDynamic && obj->isELF()) {
@@ -160,11 +168,10 @@
   // format() can't handle StringRefs
   outs() << format("  %-32s", FullName.c_str())
          << format("  %-4s", getTypeStr(Type))
-         << format("  %16" PRIx64, Address)
-         << format("  %16" PRIx64, Size)
-         << format("  %16" PRIx64, FileOffset)
-         << "  " << getSymbolFlagStr(Flags)
-         << "\n";
+         << format("  %-32s", std::string(sectionName).c_str())
+         << format("  %16" PRIx64, Address) << format("  %16" PRIx64, Size)
+         << format("  %16" PRIx64, FileOffset) << "  "
+         << getSymbolFlagStr(Flags) << "\n";
 }
 
 static void dumpStaticSymbol(const SymbolRef &Sym, const ObjectFile *obj) {