diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2014-09-10 12:51:52 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2014-09-10 12:51:52 +0000 |
| commit | 44f51e511374f467d70c37324a8e5bbf2ea270d8 (patch) | |
| tree | 3073f00e67964e434982e150df56ac5a33a4a6fb /llvm/test/tools/llvm-readobj | |
| parent | 5d34a2b887a985651cd098153506c45227123b65 (diff) | |
| download | bcm5719-llvm-44f51e511374f467d70c37324a8e5bbf2ea270d8.tar.gz bcm5719-llvm-44f51e511374f467d70c37324a8e5bbf2ea270d8.zip | |
Object: Add support for bigobj
This adds support for reading the "bigobj" variant of COFF produced by
cl's /bigobj and mingw's -mbig-obj.
The most significant difference that bigobj brings is more than 2**16
sections to COFF.
bigobj brings a few interesting differences with it:
- It doesn't have a Characteristics field in the file header.
- It doesn't have a SizeOfOptionalHeader field in the file header (it's
only used in executable files).
- Auxiliary symbol records have the same width as a symbol table entry.
Since symbol table entries are bigger, so are auxiliary symbol
records.
Write support will come soon.
Differential Revision: http://reviews.llvm.org/D5259
llvm-svn: 217496
Diffstat (limited to 'llvm/test/tools/llvm-readobj')
| -rw-r--r-- | llvm/test/tools/llvm-readobj/Inputs/bigobj.coff-x86-64 | bin | 0 -> 340 bytes | |||
| -rw-r--r-- | llvm/test/tools/llvm-readobj/bigobj.test | 139 | ||||
| -rw-r--r-- | llvm/test/tools/llvm-readobj/coff-file-sections-reading.test | 2 | ||||
| -rw-r--r-- | llvm/test/tools/llvm-readobj/cxx-cli-aux.test | 6 | ||||
| -rw-r--r-- | llvm/test/tools/llvm-readobj/sections-ext.test | 1 | ||||
| -rw-r--r-- | llvm/test/tools/llvm-readobj/symbols.test | 5 |
6 files changed, 144 insertions, 9 deletions
diff --git a/llvm/test/tools/llvm-readobj/Inputs/bigobj.coff-x86-64 b/llvm/test/tools/llvm-readobj/Inputs/bigobj.coff-x86-64 Binary files differnew file mode 100644 index 00000000000..fdfda5e5713 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/Inputs/bigobj.coff-x86-64 diff --git a/llvm/test/tools/llvm-readobj/bigobj.test b/llvm/test/tools/llvm-readobj/bigobj.test new file mode 100644 index 00000000000..361a9e44fe6 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/bigobj.test @@ -0,0 +1,139 @@ +RUN: llvm-readobj --file-headers --sections --symbols --relocations %p/Inputs/bigobj.coff-x86-64 | FileCheck %s + +CHECK: File: {{(.*[/\\])?}}bigobj.coff-x86-64 +CHECK-NEXT: Format: COFF-x86-64 +CHECK-NEXT: Arch: x86_64 +CHECK-NEXT: AddressSize: 64bit +CHECK-NEXT: ImageFileHeader { +CHECK-NEXT: Machine: IMAGE_FILE_MACHINE_AMD64 (0x8664) +CHECK-NEXT: SectionCount: 3 +CHECK-NEXT: TimeDateStamp: 1970-01-01 00:00:00 (0x0) +CHECK-NEXT: PointerToSymbolTable: 0xB0 +CHECK-NEXT: SymbolCount: 8 +CHECK-NEXT: OptionalHeaderSize: 0 +CHECK-NEXT: Characteristics [ (0x0) +CHECK-NEXT: ] +CHECK-NEXT: } +CHECK-NEXT: Sections [ +CHECK-NEXT: Section { +CHECK-NEXT: Number: 1 +CHECK-NEXT: Name: .text (2E 74 65 78 74 00 00 00) +CHECK-NEXT: VirtualSize: 0x0 +CHECK-NEXT: VirtualAddress: 0x0 +CHECK-NEXT: RawDataSize: 0 +CHECK-NEXT: PointerToRawData: 0x0 +CHECK-NEXT: PointerToRelocations: 0x0 +CHECK-NEXT: PointerToLineNumbers: 0x0 +CHECK-NEXT: RelocationCount: 0 +CHECK-NEXT: LineNumberCount: 0 +CHECK-NEXT: Characteristics [ (0x60500020) +CHECK-NEXT: IMAGE_SCN_ALIGN_16BYTES (0x500000) +CHECK-NEXT: IMAGE_SCN_CNT_CODE (0x20) +CHECK-NEXT: IMAGE_SCN_MEM_EXECUTE (0x20000000) +CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +CHECK-NEXT: ] +CHECK-NEXT: } +CHECK-NEXT: Section { +CHECK-NEXT: Number: 2 +CHECK-NEXT: Name: .data (2E 64 61 74 61 00 00 00) +CHECK-NEXT: VirtualSize: 0x0 +CHECK-NEXT: VirtualAddress: 0x0 +CHECK-NEXT: RawDataSize: 0 +CHECK-NEXT: PointerToRawData: 0x0 +CHECK-NEXT: PointerToRelocations: 0x0 +CHECK-NEXT: PointerToLineNumbers: 0x0 +CHECK-NEXT: RelocationCount: 0 +CHECK-NEXT: LineNumberCount: 0 +CHECK-NEXT: Characteristics [ (0xC0500040) +CHECK-NEXT: IMAGE_SCN_ALIGN_16BYTES (0x500000) +CHECK-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA (0x40) +CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +CHECK-NEXT: IMAGE_SCN_MEM_WRITE (0x80000000) +CHECK-NEXT: ] +CHECK-NEXT: } +CHECK-NEXT: Section { +CHECK-NEXT: Number: 3 +CHECK-NEXT: Name: .bss (2E 62 73 73 00 00 00 00) +CHECK-NEXT: VirtualSize: 0x0 +CHECK-NEXT: VirtualAddress: 0x0 +CHECK-NEXT: RawDataSize: 0 +CHECK-NEXT: PointerToRawData: 0x0 +CHECK-NEXT: PointerToRelocations: 0x0 +CHECK-NEXT: PointerToLineNumbers: 0x0 +CHECK-NEXT: RelocationCount: 0 +CHECK-NEXT: LineNumberCount: 0 +CHECK-NEXT: Characteristics [ (0xC0500080) +CHECK-NEXT: IMAGE_SCN_ALIGN_16BYTES (0x500000) +CHECK-NEXT: IMAGE_SCN_CNT_UNINITIALIZED_DATA (0x80) +CHECK-NEXT: IMAGE_SCN_MEM_READ (0x40000000) +CHECK-NEXT: IMAGE_SCN_MEM_WRITE (0x80000000) +CHECK-NEXT: ] +CHECK-NEXT: } +CHECK-NEXT: ] +CHECK-NEXT: Relocations [ +CHECK-NEXT: ] +CHECK-NEXT: Symbols [ +CHECK-NEXT: Symbol { +CHECK-NEXT: Name: .file +CHECK-NEXT: Value: 0 +CHECK-NEXT: Section: (-2) +CHECK-NEXT: BaseType: Null (0x0) +CHECK-NEXT: ComplexType: Null (0x0) +CHECK-NEXT: StorageClass: File (0x67) +CHECK-NEXT: AuxSymbolCount: 1 +CHECK-NEXT: AuxFileRecord { +CHECK-NEXT: FileName: fake +CHECK-NEXT: } +CHECK-NEXT: } +CHECK-NEXT: Symbol { +CHECK-NEXT: Name: .text +CHECK-NEXT: Value: 0 +CHECK-NEXT: Section: .text (1) +CHECK-NEXT: BaseType: Null (0x0) +CHECK-NEXT: ComplexType: Null (0x0) +CHECK-NEXT: StorageClass: Static (0x3) +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: 0x0 +CHECK-NEXT: } +CHECK-NEXT: } +CHECK-NEXT: Symbol { +CHECK-NEXT: Name: .data +CHECK-NEXT: Value: 0 +CHECK-NEXT: Section: .data (2) +CHECK-NEXT: BaseType: Null (0x0) +CHECK-NEXT: ComplexType: Null (0x0) +CHECK-NEXT: StorageClass: Static (0x3) +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: 0x0 +CHECK-NEXT: } +CHECK-NEXT: } +CHECK-NEXT: Symbol { +CHECK-NEXT: Name: .bss +CHECK-NEXT: Value: 0 +CHECK-NEXT: Section: .bss (3) +CHECK-NEXT: BaseType: Null (0x0) +CHECK-NEXT: ComplexType: Null (0x0) +CHECK-NEXT: StorageClass: Static (0x3) +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: 0x0 +CHECK-NEXT: } +CHECK-NEXT: } +CHECK-NEXT: ] diff --git a/llvm/test/tools/llvm-readobj/coff-file-sections-reading.test b/llvm/test/tools/llvm-readobj/coff-file-sections-reading.test index 5c44c16f005..846247fd9cf 100644 --- a/llvm/test/tools/llvm-readobj/coff-file-sections-reading.test +++ b/llvm/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: (65534) +CHECK: Section: (-2) CHECK: BaseType: Null (0x0) CHECK: ComplexType: Null (0x0) CHECK: StorageClass: File (0x67) diff --git a/llvm/test/tools/llvm-readobj/cxx-cli-aux.test b/llvm/test/tools/llvm-readobj/cxx-cli-aux.test index 90e73c033a8..cac9e71c252 100644 --- a/llvm/test/tools/llvm-readobj/cxx-cli-aux.test +++ b/llvm/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: (65535) +CHECK-NEXT: Section: (-1) CHECK-NEXT: BaseType: Null (0x0) CHECK-NEXT: ComplexType: Null (0x0) CHECK-NEXT: StorageClass: External (0x2) @@ -21,14 +21,13 @@ 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: Section: (-1) CHECK-NEXT: BaseType: Null (0x0) CHECK-NEXT: ComplexType: Null (0x0) CHECK-NEXT: StorageClass: CLRToken (0x6B) @@ -37,6 +36,5 @@ CHECK-NEXT: AuxCLRToken { CHECK-NEXT: AuxType: 1 CHECK-NEXT: Reserved: 0 CHECK-NEXT: SymbolTableIndex: ?PerAppDomain@@$$Q3HA (19) -CHECK-NEXT: Unused: (00 00 00 00 00 00 00 00 00 00 00 00) CHECK-NEXT: } CHECK-NEXT: } diff --git a/llvm/test/tools/llvm-readobj/sections-ext.test b/llvm/test/tools/llvm-readobj/sections-ext.test index 972d8e6f4ef..4024878d2bd 100644 --- a/llvm/test/tools/llvm-readobj/sections-ext.test +++ b/llvm/test/tools/llvm-readobj/sections-ext.test @@ -52,7 +52,6 @@ COFF-NEXT: LineNumberCount: 0 COFF-NEXT: Checksum: 0x0 COFF-NEXT: Number: 1 COFF-NEXT: Selection: 0x0 -COFF-NEXT: Unused: (00 00 00) COFF-NEXT: } COFF-NEXT: } COFF-NEXT: Symbol { diff --git a/llvm/test/tools/llvm-readobj/symbols.test b/llvm/test/tools/llvm-readobj/symbols.test index 26830ac46a8..3876138f9d2 100644 --- a/llvm/test/tools/llvm-readobj/symbols.test +++ b/llvm/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: (65535) +COFF-NEXT: Section: (-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: (65535) +COFF-NEXT: Section: (-1) COFF-NEXT: BaseType: Null (0x0) COFF-NEXT: ComplexType: Null (0x0) COFF-NEXT: StorageClass: Static (0x3) @@ -37,7 +37,6 @@ COFF-NEXT: LineNumberCount: 0 COFF-NEXT: Checksum: 0x0 COFF-NEXT: Number: 1 COFF-NEXT: Selection: 0x0 -COFF-NEXT: Unused: (00 00 00) COFF-NEXT: } COFF-NEXT: } |

