1ee99c4d4SSivanShani-Arm //===-- AArch64BuildAttributes.h - AARch64 Build Attributes -----*- C++ -*-===// 2ee99c4d4SSivanShani-Arm // 3ee99c4d4SSivanShani-Arm // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4ee99c4d4SSivanShani-Arm // See https://llvm.org/LICENSE.txt for license information. 5ee99c4d4SSivanShani-Arm // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6ee99c4d4SSivanShani-Arm // 7ee99c4d4SSivanShani-Arm //===----------------------------------------------------------------------===// 8ee99c4d4SSivanShani-Arm // 9ee99c4d4SSivanShani-Arm // This file contains enumerations and support routines for AArch64 build 10ee99c4d4SSivanShani-Arm // attributes as defined in Build Attributes for the AArch64 document. 11ee99c4d4SSivanShani-Arm // 12ee99c4d4SSivanShani-Arm // Build Attributes for the Arm® 64-bit Architecture (AArch64) 2024Q1 13ee99c4d4SSivanShani-Arm // 14ee99c4d4SSivanShani-Arm // https://github.com/ARM-software/abi-aa/pull/230 15ee99c4d4SSivanShani-Arm // 16ee99c4d4SSivanShani-Arm //===----------------------------------------------------------------------===// 17ee99c4d4SSivanShani-Arm 18ee99c4d4SSivanShani-Arm #ifndef LLVM_SUPPORT_AARCH64BUILDATTRIBUTES_H 19ee99c4d4SSivanShani-Arm #define LLVM_SUPPORT_AARCH64BUILDATTRIBUTES_H 20ee99c4d4SSivanShani-Arm 21ee99c4d4SSivanShani-Arm #include "llvm/ADT/StringRef.h" 22ee99c4d4SSivanShani-Arm 23ee99c4d4SSivanShani-Arm namespace llvm { 24ee99c4d4SSivanShani-Arm 25*de4bbbfdSSivanShani-Arm namespace AArch64BuildAttrs { 26ee99c4d4SSivanShani-Arm 27ee99c4d4SSivanShani-Arm /// AArch64 build attributes vendors IDs (a.k.a subsection name) 28ee99c4d4SSivanShani-Arm enum VendorID : unsigned { 29ee99c4d4SSivanShani-Arm AEABI_FEATURE_AND_BITS = 0, 30ee99c4d4SSivanShani-Arm AEABI_PAUTHABI = 1, 31ee99c4d4SSivanShani-Arm VENDOR_UNKNOWN = 404 // Treated as a private subsection name 32ee99c4d4SSivanShani-Arm }; 33ee99c4d4SSivanShani-Arm StringRef getVendorName(unsigned const Vendor); 34ee99c4d4SSivanShani-Arm VendorID getVendorID(StringRef const Vendor); 35ee99c4d4SSivanShani-Arm 36ee99c4d4SSivanShani-Arm enum SubsectionOptional : unsigned { 37ee99c4d4SSivanShani-Arm REQUIRED = 0, 38ee99c4d4SSivanShani-Arm OPTIONAL = 1, 39ee99c4d4SSivanShani-Arm OPTIONAL_NOT_FOUND = 404 40ee99c4d4SSivanShani-Arm }; 41ee99c4d4SSivanShani-Arm StringRef getOptionalStr(unsigned Optional); 42ee99c4d4SSivanShani-Arm SubsectionOptional getOptionalID(StringRef Optional); 43ee99c4d4SSivanShani-Arm StringRef getSubsectionOptionalUnknownError(); 44ee99c4d4SSivanShani-Arm 45ee99c4d4SSivanShani-Arm enum SubsectionType : unsigned { ULEB128 = 0, NTBS = 1, TYPE_NOT_FOUND = 404 }; 46ee99c4d4SSivanShani-Arm StringRef getTypeStr(unsigned Type); 47ee99c4d4SSivanShani-Arm SubsectionType getTypeID(StringRef Type); 48ee99c4d4SSivanShani-Arm StringRef getSubsectionTypeUnknownError(); 49ee99c4d4SSivanShani-Arm 50ee99c4d4SSivanShani-Arm enum PauthABITags : unsigned { 51ee99c4d4SSivanShani-Arm TAG_PAUTH_PLATFORM = 1, 52ee99c4d4SSivanShani-Arm TAG_PAUTH_SCHEMA = 2, 53ee99c4d4SSivanShani-Arm PAUTHABI_TAG_NOT_FOUND = 404 54ee99c4d4SSivanShani-Arm }; 55ee99c4d4SSivanShani-Arm StringRef getPauthABITagsStr(unsigned PauthABITag); 56ee99c4d4SSivanShani-Arm PauthABITags getPauthABITagsID(StringRef PauthABITag); 57ee99c4d4SSivanShani-Arm 58ee99c4d4SSivanShani-Arm enum FeatureAndBitsTags : unsigned { 59ee99c4d4SSivanShani-Arm TAG_FEATURE_BTI = 0, 60ee99c4d4SSivanShani-Arm TAG_FEATURE_PAC = 1, 61ee99c4d4SSivanShani-Arm TAG_FEATURE_GCS = 2, 62ee99c4d4SSivanShani-Arm FEATURE_AND_BITS_TAG_NOT_FOUND = 404 63ee99c4d4SSivanShani-Arm }; 64ee99c4d4SSivanShani-Arm StringRef getFeatureAndBitsTagsStr(unsigned FeatureAndBitsTag); 65ee99c4d4SSivanShani-Arm FeatureAndBitsTags getFeatureAndBitsTagsID(StringRef FeatureAndBitsTag); 66ee99c4d4SSivanShani-Arm 67ee99c4d4SSivanShani-Arm enum FeatureAndBitsFlag : unsigned { 68ee99c4d4SSivanShani-Arm Feature_BTI_Flag = 1 << 0, 69ee99c4d4SSivanShani-Arm Feature_PAC_Flag = 1 << 1, 70ee99c4d4SSivanShani-Arm Feature_GCS_Flag = 1 << 2 71ee99c4d4SSivanShani-Arm }; 72*de4bbbfdSSivanShani-Arm } // namespace AArch64BuildAttrs 73ee99c4d4SSivanShani-Arm } // namespace llvm 74ee99c4d4SSivanShani-Arm 75ee99c4d4SSivanShani-Arm #endif // LLVM_SUPPORT_AARCH64BUILDATTRIBUTES_H