[llvm] r204023 - llvm-readobj: Add test for COFF auxiliary symbols as used by C++/CLI
Nico Rieck
nico.rieck at gmail.com
Sun Mar 16 18:46:29 PDT 2014
Author: nrieck
Date: Sun Mar 16 20:46:28 2014
New Revision: 204023
URL: http://llvm.org/viewvc/llvm-project?rev=204023&view=rev
Log:
llvm-readobj: Add test for COFF auxiliary symbols as used by C++/CLI
Added:
llvm/trunk/test/tools/llvm-readobj/Inputs/cxx-cli-aux.cpp
llvm/trunk/test/tools/llvm-readobj/Inputs/cxx-cli-aux.obj.coff-i386
llvm/trunk/test/tools/llvm-readobj/cxx-cli-aux.test
Modified:
llvm/trunk/tools/llvm-readobj/COFFDumper.cpp
Added: llvm/trunk/test/tools/llvm-readobj/Inputs/cxx-cli-aux.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/Inputs/cxx-cli-aux.cpp?rev=204023&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-readobj/Inputs/cxx-cli-aux.cpp (added)
+++ llvm/trunk/test/tools/llvm-readobj/Inputs/cxx-cli-aux.cpp Sun Mar 16 20:46:28 2014
@@ -0,0 +1,2 @@
+// cl.exe -clr -c t.cpp -Fo"cxx-cli-aux.obj.coff-i386"
+__declspec(appdomain) int PerAppDomain = 0;
Added: llvm/trunk/test/tools/llvm-readobj/Inputs/cxx-cli-aux.obj.coff-i386
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/Inputs/cxx-cli-aux.obj.coff-i386?rev=204023&view=auto
==============================================================================
Binary files llvm/trunk/test/tools/llvm-readobj/Inputs/cxx-cli-aux.obj.coff-i386 (added) and llvm/trunk/test/tools/llvm-readobj/Inputs/cxx-cli-aux.obj.coff-i386 Sun Mar 16 20:46:28 2014 differ
Added: llvm/trunk/test/tools/llvm-readobj/cxx-cli-aux.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/cxx-cli-aux.test?rev=204023&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-readobj/cxx-cli-aux.test (added)
+++ llvm/trunk/test/tools/llvm-readobj/cxx-cli-aux.test Sun Mar 16 20:46:28 2014
@@ -0,0 +1,42 @@
+Ensure that we can read the COFF auxiliary symbols 'section definition' and
+'CLR token definition' as used in C++/CLI object files. Auxiliary section
+definitions usually only follow a symbol with static storage class, but
+non-const appdomain globals (external ABS) also get one.
+
+RUN: llvm-readobj -t %p/Inputs/cxx-cli-aux.obj.coff-i386 | FileCheck %s
+
+CHECK: Symbols [
+CHECK: Symbol {
+CHECK: Name: ?PerAppDomain@@$$Q3HA
+CHECK-NEXT: Value: 4
+CHECK-NEXT: Section: (65535)
+CHECK-NEXT: BaseType: Null (0x0)
+CHECK-NEXT: ComplexType: Null (0x0)
+CHECK-NEXT: StorageClass: External (0x2)
+CHECK-NEXT: AuxSymbolCount: 1
+CHECK-NEXT: AuxSectionDef {
+CHECK-NEXT: Length: 0
+CHECK-NEXT: RelocationCount: 0
+CHECK-NEXT: LineNumberCount: 0
+CHECK-NEXT: Checksum: 0x0
+CHECK-NEXT: Number: 0
+CHECK-NEXT: Selection: NoDuplicates (0x1)
+CHECK-NEXT: Unused: (00 00 00)
+CHECK-NEXT: }
+CHECK-NEXT: }
+
+CHECK: Symbol {
+CHECK: Name: 04000001
+CHECK-NEXT: Value: 4
+CHECK-NEXT: Section: (65535)
+CHECK-NEXT: BaseType: Null (0x0)
+CHECK-NEXT: ComplexType: Null (0x0)
+CHECK-NEXT: StorageClass: CLRToken (0x6B)
+CHECK-NEXT: AuxSymbolCount: 1
+CHECK-NEXT: AuxCLRToken {
+CHECK-NEXT: AuxType: 1
+CHECK-NEXT: Reserved: 0
+CHECK-NEXT: SymbolTableIndex: 19
+CHECK-NEXT: Unused: (00 00 00 00 00 00 00 00 00 00 00 00)
+CHECK-NEXT: }
+CHECK-NEXT: }
Modified: llvm/trunk/tools/llvm-readobj/COFFDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/COFFDumper.cpp?rev=204023&r1=204022&r2=204023&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/COFFDumper.cpp (original)
+++ llvm/trunk/tools/llvm-readobj/COFFDumper.cpp Sun Mar 16 20:46:28 2014
@@ -1022,9 +1022,11 @@ void COFFDumper::printSymbol(symbol_iter
DictScope AS(W, "AuxFileRecord");
W.printString("FileName", StringRef(Aux->FileName));
+ // C++/CLI creates external ABS symbols for non-const appdomain globals.
+ // These are also followed by an auxiliary section definition.
} else if (Symbol->StorageClass == COFF::IMAGE_SYM_CLASS_STATIC ||
(Symbol->StorageClass == COFF::IMAGE_SYM_CLASS_EXTERNAL &&
- Symbol->SectionNumber != COFF::IMAGE_SYM_UNDEFINED)) {
+ Symbol->SectionNumber == COFF::IMAGE_SYM_ABSOLUTE)) {
const coff_aux_section_definition *Aux;
if (error(getSymbolAuxData(Obj, Symbol + I, Aux)))
break;
More information about the llvm-commits
mailing list