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