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