1/*===------ cet.h -Control-flow Enforcement Technology feature ------------=== 2 * Add x86 feature with IBT and/or SHSTK bits to ELF program property if they 3 * are enabled. Otherwise, contents in this header file are unused. This file 4 * is mainly design for assembly source code which want to enable CET. 5 * 6 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 7 * See https://llvm.org/LICENSE.txt for license information. 8 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 9 * 10 *===-----------------------------------------------------------------------=== 11 */ 12#ifndef __CET_H 13#define __CET_H 14 15#ifdef __ASSEMBLER__ 16 17#ifndef __CET__ 18# define _CET_ENDBR 19#endif 20 21#ifdef __CET__ 22 23# ifdef __LP64__ 24# if __CET__ & 0x1 25# define _CET_ENDBR endbr64 26# else 27# define _CET_ENDBR 28# endif 29# else 30# if __CET__ & 0x1 31# define _CET_ENDBR endbr32 32# else 33# define _CET_ENDBR 34# endif 35# endif 36 37 38# ifdef __LP64__ 39# define __PROPERTY_ALIGN 3 40# else 41# define __PROPERTY_ALIGN 2 42# endif 43 44 .pushsection ".note.gnu.property", "a" 45 .p2align __PROPERTY_ALIGN 46 .long 1f - 0f /* name length. */ 47 .long 4f - 1f /* data length. */ 48 /* NT_GNU_PROPERTY_TYPE_0. */ 49 .long 5 /* note type. */ 500: 51 .asciz "GNU" /* vendor name. */ 521: 53 .p2align __PROPERTY_ALIGN 54 /* GNU_PROPERTY_X86_FEATURE_1_AND. */ 55 .long 0xc0000002 /* pr_type. */ 56 .long 3f - 2f /* pr_datasz. */ 572: 58 /* GNU_PROPERTY_X86_FEATURE_1_XXX. */ 59 .long __CET__ 603: 61 .p2align __PROPERTY_ALIGN 624: 63 .popsection 64#endif 65#endif 66#endif 67