From c7210b3f0b95492fe5c12185624eb8b017ab1ded Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Sat, 20 Sep 2014 00:25:06 +0000 Subject: [PATCH] llvm-readobj: pretty-print special COFF section names Print IMAGE_SYM_DEBUG and the like instead of (-2). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218172 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/MC/ARM/coff-file.s | 6 ++--- test/MC/COFF/alias.s | 8 +++---- test/MC/COFF/basic-coff-64.s | 2 +- test/MC/COFF/basic-coff.s | 2 +- test/MC/COFF/comm.s | 2 +- test/MC/COFF/feat00.s | 2 +- test/MC/COFF/file.s | 6 ++--- test/MC/COFF/symbol-fragment-offset-64.s | 4 ++-- test/MC/COFF/symbol-fragment-offset.s | 4 ++-- test/MC/COFF/weak.s | 6 ++--- test/tools/llvm-readobj/bigobj.test | 2 +- .../coff-file-sections-reading.test | 2 +- test/tools/llvm-readobj/cxx-cli-aux.test | 4 ++-- test/tools/llvm-readobj/symbols.test | 4 ++-- tools/llvm-readobj/COFFDumper.cpp | 22 ++++++++++++++++--- 15 files changed, 46 insertions(+), 30 deletions(-) diff --git a/test/MC/ARM/coff-file.s b/test/MC/ARM/coff-file.s index b4b259d7fe0..d3f26f4c8f7 100644 --- a/test/MC/ARM/coff-file.s +++ b/test/MC/ARM/coff-file.s @@ -21,7 +21,7 @@ // CHECK-SCN: Symbols [ // CHECK-SCN: Symbol { // CHECK-SCN: Name: .file -// CHECK-SCN: Section: (-2) +// CHECK-SCN: Section: IMAGE_SYM_DEBUG (-2) // CHECK-SCN: StorageClass: File // CHECK-SCN: AuxFileRecord { // CHECK-SCN: FileName: null-padded.asm @@ -29,7 +29,7 @@ // CHECK-SCN: } // CHECK-SCN: Symbol { // CHECK-SCN: Name: .file -// CHECK-SCN: Section: (-2) +// CHECK-SCN: Section: IMAGE_SYM_DEBUG (-2) // CHECK-SCN: StorageClass: File // CHECK-SCN: AuxFileRecord { // CHECK-SCN: FileName: eighteen-chars.asm @@ -37,7 +37,7 @@ // CHECK-SCN: } // CHECK-SCN: Symbol { // CHECK-SCN: Name: .file -// CHECK-SCN: Section: (-2) +// CHECK-SCN: Section: IMAGE_SYM_DEBUG (-2) // CHECK-SCN: StorageClass: File // CHECK-SCN: AuxFileRecord { // CHECK-SCN: FileName: multiple-auxiliary-entries.asm diff --git a/test/MC/COFF/alias.s b/test/MC/COFF/alias.s index 7dfc4c7f851..2293d43c575 100644 --- a/test/MC/COFF/alias.s +++ b/test/MC/COFF/alias.s @@ -48,7 +48,7 @@ weak_aliased_to_external = external2 // CHECK-NEXT: Symbol { // CHECK: Name: global_aliased_to_external // CHECK-NEXT: Value: 0 -// CHECK-NEXT: Section: (0) +// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0) // CHECK-NEXT: BaseType: Null (0x0) // CHECK-NEXT: ComplexType: Null (0x0) // CHECK-NEXT: StorageClass: External (0x2) @@ -57,7 +57,7 @@ weak_aliased_to_external = external2 // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: external1 // CHECK-NEXT: Value: 0 -// CHECK-NEXT: Section: (0) +// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0) // CHECK-NEXT: BaseType: Null (0x0) // CHECK-NEXT: ComplexType: Null (0x0) // CHECK-NEXT: StorageClass: External (0x2) @@ -84,7 +84,7 @@ weak_aliased_to_external = external2 // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: weak_aliased_to_external // CHECK-NEXT: Value: 0 -// CHECK-NEXT: Section: (0) +// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0) // CHECK-NEXT: BaseType: Null (0x0) // CHECK-NEXT: ComplexType: Null (0x0) // CHECK-NEXT: StorageClass: WeakExternal (0x69) @@ -97,7 +97,7 @@ weak_aliased_to_external = external2 // CHECK-NEXT: Symbol { // CHECK-NEXT: Name: external2 // CHECK-NEXT: Value: 0 -// CHECK-NEXT: Section: (0) +// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0) // CHECK-NEXT: BaseType: Null (0x0) // CHECK-NEXT: ComplexType: Null (0x0) // CHECK-NEXT: StorageClass: External (0x2) diff --git a/test/MC/COFF/basic-coff-64.s b/test/MC/COFF/basic-coff-64.s index 3f7a2680585..62e4eb92f85 100644 --- a/test/MC/COFF/basic-coff-64.s +++ b/test/MC/COFF/basic-coff-64.s @@ -127,7 +127,7 @@ _main: # @main // CHECK: Symbol { // CHECK: Name: _printf // CHECK: Value: 0 -// CHECK: Section: (0) +// CHECK: Section: IMAGE_SYM_UNDEFINED (0) // CHECK: BaseType: Null // CHECK: ComplexType: Null // CHECK: StorageClass: External diff --git a/test/MC/COFF/basic-coff.s b/test/MC/COFF/basic-coff.s index 3a16df45ece..549825aacea 100644 --- a/test/MC/COFF/basic-coff.s +++ b/test/MC/COFF/basic-coff.s @@ -127,7 +127,7 @@ L_.str: # @.str // CHECK: Symbol { // CHECK: Name: _printf // CHECK: Value: 0 -// CHECK: Section: (0) +// CHECK: Section: IMAGE_SYM_UNDEFINED (0) // CHECK: BaseType: Null // CHECK: ComplexType: Null // CHECK: StorageClass: External diff --git a/test/MC/COFF/comm.s b/test/MC/COFF/comm.s index 37db75f9cc4..28d9726fc5e 100644 --- a/test/MC/COFF/comm.s +++ b/test/MC/COFF/comm.s @@ -17,7 +17,7 @@ // CHECK: Symbol { // CHECK: Name: _b // CHECK-NEXT: Value: 4 -// CHECK-NEXT: Section: (0) +// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0) // CHECK-NEXT: BaseType: Null // CHECK-NEXT: ComplexType: Null // CHECK-NEXT: StorageClass: External diff --git a/test/MC/COFF/feat00.s b/test/MC/COFF/feat00.s index d08f407cef5..f671ebe7d92 100644 --- a/test/MC/COFF/feat00.s +++ b/test/MC/COFF/feat00.s @@ -6,7 +6,7 @@ // CHECK: Symbol { // CHECK: Name: @feat.00 // CHECK: Value: 123 -// CHECK: Section: (-1) +// CHECK: Section: IMAGE_SYM_ABSOLUTE (-1) // CHECK: BaseType: Null (0x0) // CHECK: ComplexType: Null (0x0) // CHECK: StorageClass: External (0x2) diff --git a/test/MC/COFF/file.s b/test/MC/COFF/file.s index 1fca5a15e9d..a18a1f476ac 100644 --- a/test/MC/COFF/file.s +++ b/test/MC/COFF/file.s @@ -21,7 +21,7 @@ // CHECK-SCN: Symbols [ // CHECK-SCN: Symbol { // CHECK-SCN: Name: .file -// CHECK-SCN: Section: (-2) +// CHECK-SCN: Section: IMAGE_SYM_DEBUG (-2) // CHECK-SCN: StorageClass: File // CHECK-SCN: AuxFileRecord { // CHECK-SCN: FileName: null-padded.asm @@ -29,7 +29,7 @@ // CHECK-SCN: } // CHECK-SCN: Symbol { // CHECK-SCN: Name: .file -// CHECK-SCN: Section: (-2) +// CHECK-SCN: Section: IMAGE_SYM_DEBUG (-2) // CHECK-SCN: StorageClass: File // CHECK-SCN: AuxFileRecord { // CHECK-SCN: FileName: eighteen-chars.asm @@ -37,7 +37,7 @@ // CHECK-SCN: } // CHECK-SCN: Symbol { // CHECK-SCN: Name: .file -// CHECK-SCN: Section: (-2) +// CHECK-SCN: Section: IMAGE_SYM_DEBUG (-2) // CHECK-SCN: StorageClass: File // CHECK-SCN: AuxFileRecord { // CHECK-SCN: FileName: multiple-auxiliary-entries.asm diff --git a/test/MC/COFF/symbol-fragment-offset-64.s b/test/MC/COFF/symbol-fragment-offset-64.s index cbcc431bf1f..05b46bbb7e7 100644 --- a/test/MC/COFF/symbol-fragment-offset-64.s +++ b/test/MC/COFF/symbol-fragment-offset-64.s @@ -148,7 +148,7 @@ _main: # @main // CHECK: Symbol { // CHECK: Name: _printf // CHECK: Value: 0 -// CHECK: Section: (0) +// CHECK: Section: IMAGE_SYM_UNDEFINED (0) // CHECK: BaseType: Null // CHECK: ComplexType: Null // CHECK: StorageClass: External @@ -157,7 +157,7 @@ _main: # @main // CHECK: Symbol { // CHECK: Name: _puts // CHECK: Value: 0 -// CHECK: Section: (0) +// CHECK: Section: IMAGE_SYM_UNDEFINED (0) // CHECK: BaseType: Null // CHECK: ComplexType: Null // CHECK: StorageClass: External diff --git a/test/MC/COFF/symbol-fragment-offset.s b/test/MC/COFF/symbol-fragment-offset.s index a5a3f9f07c2..cc5040a99cc 100644 --- a/test/MC/COFF/symbol-fragment-offset.s +++ b/test/MC/COFF/symbol-fragment-offset.s @@ -148,7 +148,7 @@ L_.str2: // CHECK: Symbol { // CHECK: Name: _printf // CHECK: Value: 0 -// CHECK: Section: (0) +// CHECK: Section: IMAGE_SYM_UNDEFINED (0) // CHECK: BaseType: Null // CHECK: ComplexType: Null // CHECK: StorageClass: External @@ -157,7 +157,7 @@ L_.str2: // CHECK: Symbol { // CHECK: Name: _puts // CHECK: Value: 0 -// CHECK: Section: (0) +// CHECK: Section: IMAGE_SYM_UNDEFINED (0) // CHECK: BaseType: Null // CHECK: ComplexType: Null // CHECK: StorageClass: External diff --git a/test/MC/COFF/weak.s b/test/MC/COFF/weak.s index b729cbdf582..6086749d80d 100644 --- a/test/MC/COFF/weak.s +++ b/test/MC/COFF/weak.s @@ -37,7 +37,7 @@ LBB0_2: # %return // CHECK: Symbol { // CHECK: Name: _test_weak // CHECK-NEXT: Value: 0 -// CHECK-NEXT: Section: (0) +// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0) // CHECK-NEXT: BaseType: Null // CHECK-NEXT: ComplexType: Null // CHECK-NEXT: StorageClass: WeakExternal @@ -51,7 +51,7 @@ LBB0_2: # %return // CHECK: Symbol { // CHECK: Name: .weak._test_weak.default // CHECK-NEXT: Value: 0 -// CHECK-NEXT: Section: (-1) +// CHECK-NEXT: Section: IMAGE_SYM_ABSOLUTE (-1) // CHECK-NEXT: BaseType: Null // CHECK-NEXT: ComplexType: Null // CHECK-NEXT: StorageClass: External @@ -61,7 +61,7 @@ LBB0_2: # %return // CHECK: Symbol { // CHECK: Name: _test_weak_alias // CHECK-NEXT: Value: 0 -// CHECK-NEXT: Section: (0) +// CHECK-NEXT: Section: IMAGE_SYM_UNDEFINED (0) // CHECK-NEXT: BaseType: Null // CHECK-NEXT: ComplexType: Null // CHECK-NEXT: StorageClass: WeakExternal diff --git a/test/tools/llvm-readobj/bigobj.test b/test/tools/llvm-readobj/bigobj.test index 361a9e44fe6..10972144315 100644 --- a/test/tools/llvm-readobj/bigobj.test +++ b/test/tools/llvm-readobj/bigobj.test @@ -76,7 +76,7 @@ CHECK-NEXT: Symbols [ CHECK-NEXT: Symbol { CHECK-NEXT: Name: .file CHECK-NEXT: Value: 0 -CHECK-NEXT: Section: (-2) +CHECK-NEXT: Section: IMAGE_SYM_DEBUG (-2) CHECK-NEXT: BaseType: Null (0x0) CHECK-NEXT: ComplexType: Null (0x0) CHECK-NEXT: StorageClass: File (0x67) diff --git a/test/tools/llvm-readobj/coff-file-sections-reading.test b/test/tools/llvm-readobj/coff-file-sections-reading.test index 846247fd9cf..c2f02d47de4 100644 --- a/test/tools/llvm-readobj/coff-file-sections-reading.test +++ b/test/tools/llvm-readobj/coff-file-sections-reading.test @@ -4,7 +4,7 @@ CHECK: Symbols [ CHECK: Symbol { CHECK: Name: .file CHECK: Value: 0 -CHECK: Section: (-2) +CHECK: Section: IMAGE_SYM_DEBUG (-2) CHECK: BaseType: Null (0x0) CHECK: ComplexType: Null (0x0) CHECK: StorageClass: File (0x67) diff --git a/test/tools/llvm-readobj/cxx-cli-aux.test b/test/tools/llvm-readobj/cxx-cli-aux.test index cac9e71c252..0b687793547 100644 --- a/test/tools/llvm-readobj/cxx-cli-aux.test +++ b/test/tools/llvm-readobj/cxx-cli-aux.test @@ -9,7 +9,7 @@ CHECK: Symbols [ CHECK: Symbol { CHECK: Name: ?PerAppDomain@@$$Q3HA CHECK-NEXT: Value: 4 -CHECK-NEXT: Section: (-1) +CHECK-NEXT: Section: IMAGE_SYM_ABSOLUTE (-1) CHECK-NEXT: BaseType: Null (0x0) CHECK-NEXT: ComplexType: Null (0x0) CHECK-NEXT: StorageClass: External (0x2) @@ -27,7 +27,7 @@ CHECK-NEXT: } CHECK: Symbol { CHECK: Name: 04000001 CHECK-NEXT: Value: 4 -CHECK-NEXT: Section: (-1) +CHECK-NEXT: Section: IMAGE_SYM_ABSOLUTE (-1) CHECK-NEXT: BaseType: Null (0x0) CHECK-NEXT: ComplexType: Null (0x0) CHECK-NEXT: StorageClass: CLRToken (0x6B) diff --git a/test/tools/llvm-readobj/symbols.test b/test/tools/llvm-readobj/symbols.test index 3876138f9d2..71955e0d823 100644 --- a/test/tools/llvm-readobj/symbols.test +++ b/test/tools/llvm-readobj/symbols.test @@ -7,7 +7,7 @@ COFF: Symbols [ COFF-NEXT: Symbol { COFF-NEXT: Name: @comp.id COFF-NEXT: Value: 14766605 -COFF-NEXT: Section: (-1) +COFF-NEXT: Section: IMAGE_SYM_ABSOLUTE (-1) COFF-NEXT: BaseType: Null (0x0) COFF-NEXT: ComplexType: Null (0x0) COFF-NEXT: StorageClass: Static (0x3) @@ -16,7 +16,7 @@ COFF-NEXT: } COFF-NEXT: Symbol { COFF-NEXT: Name: @feat.00 COFF-NEXT: Value: 2147484049 -COFF-NEXT: Section: (-1) +COFF-NEXT: Section: IMAGE_SYM_ABSOLUTE (-1) COFF-NEXT: BaseType: Null (0x0) COFF-NEXT: ComplexType: Null (0x0) COFF-NEXT: StorageClass: Static (0x3) diff --git a/tools/llvm-readobj/COFFDumper.cpp b/tools/llvm-readobj/COFFDumper.cpp index c08e20e8ed4..99a374d5a6a 100644 --- a/tools/llvm-readobj/COFFDumper.cpp +++ b/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()); -- 2.34.1