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