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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217496 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Majnemer
2014-09-10 12:51:52 +00:00
parent cfae729840
commit b3a86a097b
24 changed files with 630 additions and 314 deletions

Binary file not shown.

View File

@@ -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: ]

View File

@@ -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)

View File

@@ -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: }

View File

@@ -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 {

View File

@@ -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: }