162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2019 Arm Limited 462306a36Sopenharmony_ci * Original author: Dave Martin <Dave.Martin@arm.com> 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#ifndef ASSEMBLER_H 862306a36Sopenharmony_ci#define ASSEMBLER_H 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#define NT_GNU_PROPERTY_TYPE_0 5 1162306a36Sopenharmony_ci#define GNU_PROPERTY_AARCH64_FEATURE_1_AND 0xc0000000 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/* Bits for GNU_PROPERTY_AARCH64_FEATURE_1_BTI */ 1462306a36Sopenharmony_ci#define GNU_PROPERTY_AARCH64_FEATURE_1_BTI (1U << 0) 1562306a36Sopenharmony_ci#define GNU_PROPERTY_AARCH64_FEATURE_1_PAC (1U << 1) 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci.macro startfn name:req 1962306a36Sopenharmony_ci .globl \name 2062306a36Sopenharmony_ci\name: 2162306a36Sopenharmony_ci .macro endfn 2262306a36Sopenharmony_ci .size \name, . - \name 2362306a36Sopenharmony_ci .type \name, @function 2462306a36Sopenharmony_ci .purgem endfn 2562306a36Sopenharmony_ci .endm 2662306a36Sopenharmony_ci.endm 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci.macro emit_aarch64_feature_1_and 2962306a36Sopenharmony_ci .pushsection .note.gnu.property, "a" 3062306a36Sopenharmony_ci .align 3 3162306a36Sopenharmony_ci .long 2f - 1f 3262306a36Sopenharmony_ci .long 6f - 3f 3362306a36Sopenharmony_ci .long NT_GNU_PROPERTY_TYPE_0 3462306a36Sopenharmony_ci1: .string "GNU" 3562306a36Sopenharmony_ci2: 3662306a36Sopenharmony_ci .align 3 3762306a36Sopenharmony_ci3: .long GNU_PROPERTY_AARCH64_FEATURE_1_AND 3862306a36Sopenharmony_ci .long 5f - 4f 3962306a36Sopenharmony_ci4: 4062306a36Sopenharmony_ci#if BTI 4162306a36Sopenharmony_ci .long GNU_PROPERTY_AARCH64_FEATURE_1_PAC | \ 4262306a36Sopenharmony_ci GNU_PROPERTY_AARCH64_FEATURE_1_BTI 4362306a36Sopenharmony_ci#else 4462306a36Sopenharmony_ci .long 0 4562306a36Sopenharmony_ci#endif 4662306a36Sopenharmony_ci5: 4762306a36Sopenharmony_ci .align 3 4862306a36Sopenharmony_ci6: 4962306a36Sopenharmony_ci .popsection 5062306a36Sopenharmony_ci.endm 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci.macro paciasp 5362306a36Sopenharmony_ci hint 0x19 5462306a36Sopenharmony_ci.endm 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci.macro autiasp 5762306a36Sopenharmony_ci hint 0x1d 5862306a36Sopenharmony_ci.endm 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci.macro __bti_ 6162306a36Sopenharmony_ci hint 0x20 6262306a36Sopenharmony_ci.endm 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci.macro __bti_c 6562306a36Sopenharmony_ci hint 0x22 6662306a36Sopenharmony_ci.endm 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci.macro __bti_j 6962306a36Sopenharmony_ci hint 0x24 7062306a36Sopenharmony_ci.endm 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci.macro __bti_jc 7362306a36Sopenharmony_ci hint 0x26 7462306a36Sopenharmony_ci.endm 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci.macro bti what= 7762306a36Sopenharmony_ci __bti_\what 7862306a36Sopenharmony_ci.endm 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_ci#endif /* ! ASSEMBLER_H */ 81