| // ---- /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 |