llvm/lld/test/COFF/rsds.test

# RUN: yaml2obj %s -o %t.obj

# RUN: rm -f %t.dll %t.pdb
# RUN: lld-link /debug /pdbaltpath:test.pdb /dll /out:%t.dll /entry:DllMain %t.obj
# RUN: llvm-readobj --coff-debug-directory %t.dll > %t.1.txt
# RUN: lld-link /debug /pdbaltpath:test.pdb /dll /out:%t.dll /entry:DllMain %t.obj
# RUN: llvm-readobj --coff-debug-directory %t.dll > %t.2.txt
# RUN: cat %t.1.txt %t.2.txt | FileCheck %s

# RUN: rm -f %t.dll %t.pdb
# RUN: lld-link /debug /pdb:%t1.pdb /dll /out:%t.dll /entry:DllMain %t.obj
# RUN: llvm-readobj --coff-debug-directory %t.dll > %t.3.txt
# RUN: lld-link /debug /pdb:%t2.pdb /dll /out:%t.dll /entry:DllMain %t.obj
# RUN: llvm-readobj --coff-debug-directory %t.dll > %t.4.txt
# RUN: cat %t.3.txt %t.4.txt | FileCheck --check-prefix TWOPDBS %s

# RUN: rm -f %t.dll %t.pdb
# RUN: lld-link /Brepro /dll /out:%t.dll /entry:DllMain %t.obj
# RUN: llvm-readobj --coff-debug-directory %t.dll | FileCheck --check-prefix REPRO %s

# RUN: rm -f %t.dll %t.pdb
# RUN: lld-link /Brepro /debug /dll /out:%t.dll /entry:DllMain %t.obj
# RUN: llvm-readobj --coff-debug-directory %t.dll | FileCheck --check-prefix REPRODEBUG %s

# Generate .buildid section using binary hash under /lldmingw and /build-id
# RUN: rm -f %t.dll %t.pdb
# RUN: lld-link /lldmingw /build-id /dll /out:%t.dll /entry:DllMain %t.obj
# RUN: llvm-readobj --coff-debug-directory %t.dll | FileCheck --check-prefix BUILDID %s

# Generate debug directory with use binary hash when /build-id is given and not 
# generating PDB.
# RUN: rm -f %t.dll %t.pdb
# RUN: lld-link /build-id /dll /out:%t.dll /entry:DllMain %t.obj
# RUN: llvm-readobj --coff-debug-directory %t.dll | FileCheck --check-prefix BUILDID %s

# If generate PDB, PDB hash is used and /build-id is ignored.
# RUN: rm -f %t.dll %t.pdb
# RUN: lld-link /build-id /debug /pdbaltpath:test.pdb /dll /out:%t.dll /entry:DllMain %t.obj
# RUN: llvm-readobj --coff-debug-directory %t.dll | FileCheck --check-prefix BUILDID %s

# Do not generate .buildid section under /build-id:no
# RUN: rm -f %t.dll %t.pdb
# RUN: lld-link /build-id:no /dll /out:%t.dll /entry:DllMain %t.obj
# RUN: llvm-readobj --coff-debug-directory %t.dll | FileCheck --check-prefix NO_BUILDID %s

# RUN: rm -f %t.dll %t.pdb
# RUN: lld-link /dll /out:%t.dll /entry:DllMain %t.obj
# RUN: llvm-readobj --coff-debug-directory %t.dll | FileCheck --check-prefix NO_BUILDID %s

# CHECK: File: [[FILE:.*]].dll
# CHECK: DebugDirectory [
# CHECK:   DebugEntry {
# CHECK:     Characteristics: 0x0
# CHECK:     TimeDateStamp: 
# CHECK:     MajorVersion: 0x0
# CHECK:     MinorVersion: 0x0
# CHECK:     Type: CodeView (0x2)
# CHECK:     SizeOfData: 0x{{[^0]}}
# CHECK:     AddressOfRawData: 0x{{[^0]}}
# CHECK:     PointerToRawData: 0x{{[^0]}}
# CHECK:     PDBInfo {
# CHECK:       PDBSignature: 0x53445352
# CHECK:       PDBGUID: [[GUID:\{[A-Za-z0-9\-]{36}\}]]
# CHECK:       PDBAge: 1
# CHECK:       PDBFileName: {{.*}}.pdb
# CHECK:     }
# CHECK:   }
# CHECK: ]
# CHECK: File: [[FILE]].dll
# CHECK: DebugDirectory [
# CHECK:   DebugEntry {
# CHECK:     Characteristics: 0x0
# CHECK:     TimeDateStamp: 
# CHECK:     MajorVersion: 0x0
# CHECK:     MinorVersion: 0x0
# CHECK:     Type: CodeView (0x2)
# CHECK:     SizeOfData: 0x{{[^0]}}
# CHECK:     AddressOfRawData: 0x{{[^0]}}
# CHECK:     PointerToRawData: 0x{{[^0]}}
# CHECK:     PDBInfo {
# CHECK:       PDBSignature: 0x53445352
# CHECK:       PDBGUID: [[GUID]]
# CHECK:       PDBAge: 1
# CHECK:       PDBFileName: {{.*}}.pdb
# CHECK:     }
# CHECK:   }
# CHECK: ]

# TWOPDBS: File: [[FILE:.*]].dll
# TWOPDBS: DebugDirectory [
# TWOPDBS:   DebugEntry {
# TWOPDBS:     Characteristics: 0x0
# TWOPDBS:     TimeDateStamp: 
# TWOPDBS:     MajorVersion: 0x0
# TWOPDBS:     MinorVersion: 0x0
# TWOPDBS:     Type: CodeView (0x2)
# TWOPDBS:     SizeOfData: 0x{{[^0]}}
# TWOPDBS:     AddressOfRawData: 0x{{[^0]}}
# TWOPDBS:     PointerToRawData: 0x{{[^0]}}
# TWOPDBS:     PDBInfo {
# TWOPDBS:       PDBSignature: 0x53445352
# TWOPDBS:       PDBGUID: [[GUID:\{[A-Za-z0-9\-]{36}\}]]
# TWOPDBS:       PDBAge: 1
# TWOPDBS:       PDBFileName: {{.*}}.pdb
# TWOPDBS:     }
# TWOPDBS:   }
# TWOPDBS: ]
# TWOPDBS: File: [[FILE]].dll
# TWOPDBS: DebugDirectory [
# TWOPDBS:   DebugEntry {
# TWOPDBS:     Characteristics: 0x0
# TWOPDBS:     TimeDateStamp: 
# TWOPDBS:     MajorVersion: 0x0
# TWOPDBS:     MinorVersion: 0x0
# TWOPDBS:     Type: CodeView (0x2)
# TWOPDBS:     SizeOfData: 0x{{[^0]}}
# TWOPDBS:     AddressOfRawData: 0x{{[^0]}}
# TWOPDBS:     PointerToRawData: 0x{{[^0]}}
# TWOPDBS:     PDBInfo {
# TWOPDBS:       PDBSignature: 0x53445352
# TWOPDBS-NOT:       PDBGUID: [[GUID]]
# TWOPDBS:       PDBAge: 1
# TWOPDBS:       PDBFileName: {{.*}}.pdb
# TWOPDBS:     }
# TWOPDBS:   }
# TWOPDBS: ]

# REPRO: File: {{.*}}.dll
# REPRO: DebugDirectory [
# REPRO:   DebugEntry {
# REPRO:     Characteristics: 0x0
# REPRO:     TimeDateStamp: 
# REPRO:     MajorVersion: 0x0
# REPRO:     MinorVersion: 0x0
# REPRO:     Type: Repro (0x10)
# REPRO:     SizeOfData: 0x0
# REPRO:     AddressOfRawData: 0x0
# REPRO:     PointerToRawData: 0x0
# REPRO:   }
# REPRO: ]

# REPRODEBUG: File: {{.*}}.dll
# REPRODEBUG: DebugDirectory [
# REPRODEBUG:   DebugEntry {
# REPRODEBUG:     Characteristics: 0x0
# REPRODEBUG:     TimeDateStamp: 
# REPRODEBUG:     MajorVersion: 0x0
# REPRODEBUG:     MinorVersion: 0x0
# REPRODEBUG:     Type: CodeView (0x2)
# REPRODEBUG:     SizeOfData: 0x{{[^0]}}
# REPRODEBUG:     AddressOfRawData: 0x{{[^0]}}
# REPRODEBUG:     PointerToRawData: 0x{{[^0]}}
# REPRODEBUG:     PDBInfo {
# REPRODEBUG:       PDBSignature: 0x53445352
# REPRODEBUG:       PDBGUID: 
# REPRODEBUG:       PDBAge: 1
# REPRODEBUG:       PDBFileName:
# REPRODEBUG:     }
# REPRODEBUG:   }
# REPRODEBUG:   DebugEntry {
# REPRODEBUG:     Characteristics: 0x0
# REPRODEBUG:     TimeDateStamp: 
# REPRODEBUG:     MajorVersion: 0x0
# REPRODEBUG:     MinorVersion: 0x0
# REPRODEBUG:     Type: Repro (0x10)
# REPRODEBUG:     SizeOfData: 0x0
# REPRODEBUG:     AddressOfRawData: 0x0
# REPRODEBUG:     PointerToRawData: 0x0
# REPRODEBUG:   }
# REPRODEBUG: ]

# BUILDID: File: {{.*}}.dll
# BUILDID: DebugDirectory [
# BUILDID:   DebugEntry {
# BUILDID:     Characteristics: 0x0
# BUILDID:     TimeDateStamp:
# BUILDID:     MajorVersion: 0x0
# BUILDID:     MinorVersion: 0x0
# BUILDID:     Type: CodeView (0x2)
# BUILDID:     SizeOfData: 0x{{[^0]}}
# BUILDID:     AddressOfRawData: 0x{{[^0]}}
# BUILDID:     PointerToRawData: 0x{{[^0]}}
# BUILDID:     PDBInfo {
# BUILDID:       PDBSignature: 0x53445352
# BUILDID:       PDBGUID: [[GUID:\{[A-Za-z0-9\-]{36}\}]]
# BUILDID:       PDBAge: 1
# BUILDID:       PDBFileName:
# BUILDID:     }
# BUILDID:   }
# BUILDID: ]

# NO_BUILDID:      DebugDirectory [
# NO_BUILDID-NEXT: ]

# BUILDID_SEC: Name: .buildid
--- !COFF
header:
  Machine:         IMAGE_FILE_MACHINE_I386
  Characteristics: [  ]
sections:
  - Name:            .text
    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
    Alignment:       4
    SectionData:     31C0C3
  - Name:            .data
    Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
    Alignment:       4
    SectionData:     ''
  - Name:            .bss
    Characteristics: [ IMAGE_SCN_CNT_UNINITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
    Alignment:       4
    SectionData:     ''
symbols:
  - Name:            .text
    Value:           0
    SectionNumber:   1
    SimpleType:      IMAGE_SYM_TYPE_NULL
    ComplexType:     IMAGE_SYM_DTYPE_NULL
    StorageClass:    IMAGE_SYM_CLASS_STATIC
    SectionDefinition:
      Length:          3
      NumberOfRelocations: 0
      NumberOfLinenumbers: 0
      CheckSum:        3963538403
      Number:          1
  - Name:            .data
    Value:           0
    SectionNumber:   2
    SimpleType:      IMAGE_SYM_TYPE_NULL
    ComplexType:     IMAGE_SYM_DTYPE_NULL
    StorageClass:    IMAGE_SYM_CLASS_STATIC
    SectionDefinition:
      Length:          0
      NumberOfRelocations: 0
      NumberOfLinenumbers: 0
      CheckSum:        0
      Number:          2
  - Name:            .bss
    Value:           0
    SectionNumber:   3
    SimpleType:      IMAGE_SYM_TYPE_NULL
    ComplexType:     IMAGE_SYM_DTYPE_NULL
    StorageClass:    IMAGE_SYM_CLASS_STATIC
    SectionDefinition:
      Length:          0
      NumberOfRelocations: 0
      NumberOfLinenumbers: 0
      CheckSum:        0
      Number:          3
  - Name:            '@feat.00'
    Value:           1
    SectionNumber:   -1
    SimpleType:      IMAGE_SYM_TYPE_NULL
    ComplexType:     IMAGE_SYM_DTYPE_NULL
    StorageClass:    IMAGE_SYM_CLASS_STATIC
  - Name:            _DllMain
    Value:           0
    SectionNumber:   1
    SimpleType:      IMAGE_SYM_TYPE_NULL
    ComplexType:     IMAGE_SYM_DTYPE_FUNCTION
    StorageClass:    IMAGE_SYM_CLASS_EXTERNAL
...