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