summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-readobj/COFFDumper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-readobj/COFFDumper.cpp')
-rw-r--r--llvm/tools/llvm-readobj/COFFDumper.cpp22
1 files changed, 19 insertions, 3 deletions
diff --git a/llvm/tools/llvm-readobj/COFFDumper.cpp b/llvm/tools/llvm-readobj/COFFDumper.cpp
index c08e20e8ed4..99a374d5a6a 100644
--- a/llvm/tools/llvm-readobj/COFFDumper.cpp
+++ b/llvm/tools/llvm-readobj/COFFDumper.cpp
@@ -715,6 +715,24 @@ void COFFDumper::printSymbols() {
void COFFDumper::printDynamicSymbols() { ListScope Group(W, "DynamicSymbols"); }
+static StringRef getSectionName(const llvm::object::COFFObjectFile *Obj,
+ COFFSymbolRef Symbol,
+ const coff_section *Section) {
+ if (Section) {
+ StringRef SectionName;
+ Obj->getSectionName(Section, SectionName);
+ return SectionName;
+ }
+ int32_t SectionNumber = Symbol.getSectionNumber();
+ if (SectionNumber == llvm::COFF::IMAGE_SYM_DEBUG)
+ return "IMAGE_SYM_DEBUG";
+ if (SectionNumber == llvm::COFF::IMAGE_SYM_ABSOLUTE)
+ return "IMAGE_SYM_ABSOLUTE";
+ if (SectionNumber == llvm::COFF::IMAGE_SYM_UNDEFINED)
+ return "IMAGE_SYM_UNDEFINED";
+ return "";
+}
+
void COFFDumper::printSymbol(const SymbolRef &Sym) {
DictScope D(W, "Symbol");
@@ -730,9 +748,7 @@ void COFFDumper::printSymbol(const SymbolRef &Sym) {
if (Obj->getSymbolName(Symbol, SymbolName))
SymbolName = "";
- StringRef SectionName = "";
- if (Section)
- Obj->getSectionName(Section, SectionName);
+ StringRef SectionName = getSectionName(Obj, Symbol, Section);
W.printString("Name", SymbolName);
W.printNumber("Value", Symbol.getValue());
OpenPOWER on IntegriCloud