# RUN: yaml2obj %p/Inputs/ret42.yaml -o %t.obj # RUN: lld-link /out:%t.exe /entry:main /stub:%p/Inputs/stub64mz %t.obj # RUN: llvm-readobj --file-headers %t.exe | FileCheck -check-prefix=CHECK1 %s CHECK1: Magic: MZ CHECK1: UsedBytesInTheLastPage: 144 CHECK1: FileSizeInPages: 3 CHECK1: NumberOfRelocationItems: 0 CHECK1: HeaderSizeInParagraphs: 4 CHECK1: MinimumExtraParagraphs: 0 CHECK1: MaximumExtraParagraphs: 65535 CHECK1: InitialRelativeSS: 0 CHECK1: InitialSP: 184 CHECK1: Checksum: 0 CHECK1: InitialIP: 0 CHECK1: InitialRelativeCS: 0 CHECK1: AddressOfRelocationTable: 64 CHECK1: OverlayNumber: 0 CHECK1: OEMid: 0 CHECK1: OEMinfo: 0 CHECK1: AddressOfNewExeHeader: 64 ## Invalid DOS signature (must be `MZ`) # RUN: not lld-link /out:%t.exe /entry:main /stub:%p/Inputs/stub64zz %t.obj 2>&1 | FileCheck -check-prefix=CHECK2 %s CHECK2: lld-link: error: /stub: invalid DOS signature: {{.*}} ## Unlike MS linker, we accept non-8byte-aligned stubs and we add paddings ourselves # RUN: lld-link /out:%t.exe /entry:main /stub:%p/Inputs/stub68mz %t.obj # RUN: llvm-readobj --file-headers %t.exe | FileCheck -check-prefix=CHECK3 %s CHECK3: Magic: MZ CHECK3: UsedBytesInTheLastPage: 144 CHECK3: FileSizeInPages: 3 CHECK3: NumberOfRelocationItems: 0 CHECK3: HeaderSizeInParagraphs: 4 CHECK3: MinimumExtraParagraphs: 0 CHECK3: MaximumExtraParagraphs: 65535 CHECK3: InitialRelativeSS: 0 CHECK3: InitialSP: 184 CHECK3: Checksum: 0 CHECK3: InitialIP: 0 CHECK3: InitialRelativeCS: 0 CHECK3: AddressOfRelocationTable: 64 CHECK3: OverlayNumber: 0 CHECK3: OEMid: 0 CHECK3: OEMinfo: 0 ## 68 is unaligned and rounded up to 72 by LLD CHECK3: AddressOfNewExeHeader: 72 ## Too-small stub (must be at least 64 bytes long) && Unaligned # RUN: not lld-link /out:%t.exe /entry:main /stub:%p/Inputs/stub63mz %t.obj 2>&1 | FileCheck -check-prefix=CHECK4 %s CHECK4: lld-link: error: /stub: stub must be greater than or equal to 64 bytes: {{.*}}