| /*===------ cet.h -Control-flow Enforcement Technology  feature ------------=== | 
 |  * Add x86 feature with IBT and/or SHSTK bits to ELF program property if they | 
 |  * are enabled. Otherwise, contents in this header file are unused. This file | 
 |  * is mainly design for assembly source code which want to enable CET. | 
 |  * | 
 |  * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
 |  * See https://llvm.org/LICENSE.txt for license information. | 
 |  * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
 |  * | 
 |  *===-----------------------------------------------------------------------=== | 
 |  */ | 
 | #ifndef __CET_H | 
 | #define __CET_H | 
 |  | 
 | #ifdef __ASSEMBLER__ | 
 |  | 
 | #ifndef __CET__ | 
 | # define _CET_ENDBR | 
 | #endif | 
 |  | 
 | #ifdef __CET__ | 
 |  | 
 | # ifdef __LP64__ | 
 | #  if __CET__ & 0x1 | 
 | #    define _CET_ENDBR endbr64 | 
 | #  else | 
 | #    define _CET_ENDBR | 
 | #  endif | 
 | # else | 
 | #  if __CET__ & 0x1 | 
 | #    define _CET_ENDBR endbr32 | 
 | #  else | 
 | #    define _CET_ENDBR | 
 | #  endif | 
 | # endif | 
 |  | 
 |  | 
 | #  ifdef __LP64__ | 
 | #   define __PROPERTY_ALIGN 3 | 
 | #  else | 
 | #   define __PROPERTY_ALIGN 2 | 
 | #  endif | 
 |  | 
 | 	.pushsection ".note.gnu.property", "a" | 
 | 	.p2align __PROPERTY_ALIGN | 
 | 	.long 1f - 0f		/* name length.  */ | 
 | 	.long 4f - 1f		/* data length.  */ | 
 | 	/* NT_GNU_PROPERTY_TYPE_0.   */ | 
 | 	.long 5			/* note type.  */ | 
 | 0: | 
 | 	.asciz "GNU"		/* vendor name.  */ | 
 | 1: | 
 | 	.p2align __PROPERTY_ALIGN | 
 | 	/* GNU_PROPERTY_X86_FEATURE_1_AND.  */ | 
 | 	.long 0xc0000002	/* pr_type.  */ | 
 | 	.long 3f - 2f		/* pr_datasz.  */ | 
 | 2: | 
 | 	/* GNU_PROPERTY_X86_FEATURE_1_XXX.  */ | 
 | 	.long __CET__ | 
 | 3: | 
 | 	.p2align __PROPERTY_ALIGN | 
 | 4: | 
 | 	.popsection | 
 | #endif | 
 | #endif | 
 | #endif |