blob: ef5a90ca9d519cd8a74d1bdfb6a8b7a61c049007 [file] [edit]
// ---- /cetcompat (image is CET compatible)
RUN: yaml2obj %p/Inputs/ret42.yaml -o %t.obj
RUN: lld-link /out:%t.exe /entry:main /cetcompat %t.obj
RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=CHECKCETCOMPAT %s
CHECKCETCOMPAT: DebugEntry {
CHECKCETCOMPAT: Characteristics: 0x0
CHECKCETCOMPAT: Type: ExtendedDLLCharacteristics (0x14)
CHECKCETCOMPAT: ExtendedCharacteristics [ (0x1)
CHECKCETCOMPAT: IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT (0x1)
CHECKCETCOMPAT: ]
CHECKCETCOMPAT: RawData (
CHECKCETCOMPAT: 0000: 01000000 |....|
CHECKCETCOMPAT: )
CHECKCETCOMPAT: }
// ---- /cetcompat:no (image is not CET compatible)
RUN: yaml2obj %p/Inputs/ret42.yaml -o %t.obj
RUN: lld-link /out:%t.exe /entry:main /cetcompat:no %t.obj
RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=CHECKNOCETCOMPAT %s
CHECKNOCETCOMPAT-NOT: Type: ExtendedDLLCharacteristics (0x14)
CHECKNOCETCOMPAT-NOT: IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT (0x1)
// ---- /cetcompatstrict (CET in strict mode)
RUN: yaml2obj %p/Inputs/ret42.yaml -o %t.obj
RUN: lld-link /out:%t.exe /entry:main /cetcompatstrict %t.obj
RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=CHECKCETCOMPATSTRICT %s
CHECKCETCOMPATSTRICT: DebugEntry {
CHECKCETCOMPATSTRICT: Characteristics: 0x0
CHECKCETCOMPATSTRICT: Type: ExtendedDLLCharacteristics (0x14)
CHECKCETCOMPATSTRICT: ExtendedCharacteristics [ (0x2)
CHECKCETCOMPATSTRICT: IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT_STRICT_MODE (0x2)
CHECKCETCOMPATSTRICT: ]
CHECKCETCOMPATSTRICT: RawData (
CHECKCETCOMPATSTRICT: 0000: 02000000 |....|
CHECKCETCOMPATSTRICT: )
CHECKCETCOMPATSTRICT: }
// ---- /cetcompatstrict:no (image is not CET strict mode)
RUN: yaml2obj %p/Inputs/ret42.yaml -o %t.obj
RUN: lld-link /out:%t.exe /entry:main /cetcompatstrict:no %t.obj
RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=CHECKNOCETSTRICT %s
CHECKNOCETSTRICT-NOT: Type: ExtendedDLLCharacteristics (0x14)
CHECKNOCETSTRICT-NOT: IMAGE_DLL_CHARACTERISTICS_EX_CET_COMPAT_STRICT_MODE (0x2)
// ---- /cetdynamicapisinproc
RUN: yaml2obj %p/Inputs/ret42.yaml -o %t.obj
RUN: lld-link /out:%t.exe /entry:main /cetdynamicapisinproc %t.obj
RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=CHECKCETDYNAPI %s
CHECKCETDYNAPI: DebugEntry {
CHECKCETDYNAPI: Characteristics: 0x0
CHECKCETDYNAPI: Type: ExtendedDLLCharacteristics (0x14)
CHECKCETDYNAPI: ExtendedCharacteristics [ (0x8)
CHECKCETDYNAPI: IMAGE_DLL_CHARACTERISTICS_EX_CET_DYNAMIC_APIS_ALLOW_IN_PROC_ONLY (0x8)
CHECKCETDYNAPI: ]
CHECKCETDYNAPI: RawData (
CHECKCETDYNAPI: 0000: 08000000 |....|
CHECKCETDYNAPI: )
CHECKCETDYNAPI: }
// ---- /cetdynamicapisinproc:no (image is not CET dynamic apis allowed in proc)
RUN: yaml2obj %p/Inputs/ret42.yaml -o %t.obj
RUN: lld-link /out:%t.exe /entry:main /cetdynamicapisinproc:no %t.obj
RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=CHECKNOCETDYNAPI %s
CHECKNOCETDYNAPI-NOT: Type: ExtendedDLLCharacteristics (0x14)
CHECKNOCETDYNAPI-NOT: Type: IMAGE_DLL_CHARACTERISTICS_EX_CET_DYNAMIC_APIS_ALLOW_IN_PROC_ONLY (0x8)
// ---- /cetipvalidationrelaxed (image is not CET in context ip validation relaxed mode)
RUN: yaml2obj %p/Inputs/ret42.yaml -o %t.obj
RUN: lld-link /out:%t.exe /entry:main /cetipvalidationrelaxed %t.obj
RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=CHECKCETIPRELAXED %s
CHECKCETIPRELAXED: DebugEntry {
CHECKCETIPRELAXED: Characteristics: 0x0
CHECKCETIPRELAXED: Type: ExtendedDLLCharacteristics (0x14)
CHECKCETIPRELAXED: ExtendedCharacteristics [ (0x4)
CHECKCETIPRELAXED: IMAGE_DLL_CHARACTERISTICS_EX_CET_SET_CONTEXT_IP_VALIDATION_RELAXED_MODE (0x4)
CHECKCETIPRELAXED: ]
CHECKCETIPRELAXED: RawData (
CHECKCETIPRELAXED: 0000: 04000000 |....|
CHECKCETIPRELAXED: )
CHECKCETIPRELAXED: }
// ---- /cetipvalidationrelaxed:no (image is not CET in IP validation relaxed mode)
RUN: yaml2obj %p/Inputs/ret42.yaml -o %t.obj
RUN: lld-link /out:%t.exe /entry:main /cetipvalidationrelaxed:no %t.obj
RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=CHECKNOCETIPRELAXED %s
CHECKNOCETIPRELAXED-NOT: Type: ExtendedDLLCharacteristics (0x14)
CHECKNOCETIPRELAXED-NOT: Type: IMAGE_DLL_CHARACTERISTICS_EX_CET_SET_CONTEXT_IP_VALIDATION_RELAXED_MODE (0x4)
// ---- /hotpatchcompatible requires /functionpadmin:6
RUN: yaml2obj %p/Inputs/ret42.yaml -o %t.obj
RUN: lld-link /out:%t.exe /entry:main /hotpatchcompatible /functionpadmin:6 %t.obj
RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=CHECKHOTPATCHABLE %s
CHECKHOTPATCHABLE: DebugEntry {
CHECKHOTPATCHABLE: Characteristics: 0x0
CHECKHOTPATCHABLE: Type: ExtendedDLLCharacteristics (0x14)
CHECKHOTPATCHABLE: ExtendedCharacteristics [ (0x80)
CHECKHOTPATCHABLE: IMAGE_DLL_CHARACTERISTICS_EX_HOTPATCH_COMPATIBLE (0x80)
CHECKHOTPATCHABLE: ]
CHECKHOTPATCHABLE: RawData (
CHECKHOTPATCHABLE: 0000: 80000000 |....|
CHECKHOTPATCHABLE: )
CHECKHOTPATCHABLE: }
// ---- /hotpatchcompatible:no (image is not hotpatch compatible)
RUN: yaml2obj %p/Inputs/ret42.yaml -o %t.obj
RUN: lld-link /out:%t.exe /entry:main /hotpatchcompatible:no %t.obj
RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=CHECKNOHOTPATCHABLE %s
CHECKNOHOTPATCHABLE-NOT: Type: ExtendedDLLCharacteristics (0x14)
CHECKNOHOTPATCHABLE-NOT: Type: IMAGE_DLL_CHARACTERISTICS_EX_HOTPATCH_COMPATIBLE (0x80)
// ---- /hotpatchcompatible more than 6 bytes is accepted
RUN: lld-link /out:%t.exe /entry:main /hotpatchcompatible /functionpadmin:10 %t.obj
RUN: llvm-readobj --coff-debug-directory %t.exe | FileCheck -check-prefix=CHECKHOTPATCHABLE2 %s
CHECKHOTPATCHABLE2: DebugEntry {
CHECKHOTPATCHABLE2: Characteristics: 0x0
CHECKHOTPATCHABLE2: Type: ExtendedDLLCharacteristics (0x14)
CHECKHOTPATCHABLE2: ExtendedCharacteristics [ (0x80)
CHECKHOTPATCHABLE2: IMAGE_DLL_CHARACTERISTICS_EX_HOTPATCH_COMPATIBLE (0x80)
CHECKHOTPATCHABLE2: ]
CHECKHOTPATCHABLE2: RawData (
CHECKHOTPATCHABLE2: 0000: 80000000 |....|
CHECKHOTPATCHABLE2: )
CHECKHOTPATCHABLE2: }
// ---- /hotpatchcompatible requires at least 6 bytes function padding
RUN: env LLD_IN_TEST=1 not lld-link /out:%t.exe /entry:main /hotpatchcompatible /functionpadmin:5 %t.obj 2>&1 | FileCheck -check-prefix=CHECKHOTPATCHNOT %s
CHECKHOTPATCHNOT: lld-link: error: /hotpatchcompatible: requires at least 6 bytes of /functionpadmin
// ---- /hotpatchcompatible requires at least 6 bytes function padding -- without /functionpadmin should raise an error
RUN: env LLD_IN_TEST=1 not lld-link /out:%t.exe /entry:main /hotpatchcompatible %t.obj 2>&1 | FileCheck -check-prefix=CHECKHOTPATCHNOT2 %s
CHECKHOTPATCHNOT2: lld-link: error: /hotpatchcompatible: requires at least 6 bytes of /functionpadmin