1ee99c4d4SSivanShani-Arm //===-- AArch64BuildAttributes.cpp - AArch64 Build Attributes -------------===// 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 #include "llvm/Support/AArch64BuildAttributes.h" 10ee99c4d4SSivanShani-Arm #include "llvm/ADT/StringSwitch.h" 11ee99c4d4SSivanShani-Arm 125daecd4aSFangrui Song using namespace llvm; 13*de4bbbfdSSivanShani-Arm using namespace llvm::AArch64BuildAttrs; 14ee99c4d4SSivanShani-Arm 15*de4bbbfdSSivanShani-Arm StringRef AArch64BuildAttrs::getVendorName(unsigned Vendor) { 16ee99c4d4SSivanShani-Arm switch (Vendor) { 17ee99c4d4SSivanShani-Arm case AEABI_FEATURE_AND_BITS: 18ee99c4d4SSivanShani-Arm return "aeabi_feature_and_bits"; 19ee99c4d4SSivanShani-Arm case AEABI_PAUTHABI: 20ee99c4d4SSivanShani-Arm return "aeabi_pauthabi"; 21ee99c4d4SSivanShani-Arm case VENDOR_UNKNOWN: 22ee99c4d4SSivanShani-Arm return ""; 23ee99c4d4SSivanShani-Arm default: 24ee99c4d4SSivanShani-Arm assert(0 && "Vendor name error"); 25ee99c4d4SSivanShani-Arm return ""; 26ee99c4d4SSivanShani-Arm } 27ee99c4d4SSivanShani-Arm } 28*de4bbbfdSSivanShani-Arm VendorID AArch64BuildAttrs::getVendorID(StringRef Vendor) { 29ee99c4d4SSivanShani-Arm return StringSwitch<VendorID>(Vendor) 30ee99c4d4SSivanShani-Arm .Case("aeabi_feature_and_bits", AEABI_FEATURE_AND_BITS) 31ee99c4d4SSivanShani-Arm .Case("aeabi_pauthabi", AEABI_PAUTHABI) 32ee99c4d4SSivanShani-Arm .Default(VENDOR_UNKNOWN); 33ee99c4d4SSivanShani-Arm } 34ee99c4d4SSivanShani-Arm 35*de4bbbfdSSivanShani-Arm StringRef AArch64BuildAttrs::getOptionalStr(unsigned Optional) { 36ee99c4d4SSivanShani-Arm switch (Optional) { 37ee99c4d4SSivanShani-Arm case REQUIRED: 38ee99c4d4SSivanShani-Arm return "required"; 39ee99c4d4SSivanShani-Arm case OPTIONAL: 40ee99c4d4SSivanShani-Arm return "optional"; 41ee99c4d4SSivanShani-Arm case OPTIONAL_NOT_FOUND: 42ee99c4d4SSivanShani-Arm default: 43ee99c4d4SSivanShani-Arm return ""; 44ee99c4d4SSivanShani-Arm } 45ee99c4d4SSivanShani-Arm } 46*de4bbbfdSSivanShani-Arm SubsectionOptional AArch64BuildAttrs::getOptionalID(StringRef Optional) { 47ee99c4d4SSivanShani-Arm return StringSwitch<SubsectionOptional>(Optional) 48ee99c4d4SSivanShani-Arm .Case("required", REQUIRED) 49ee99c4d4SSivanShani-Arm .Case("optional", OPTIONAL) 50ee99c4d4SSivanShani-Arm .Default(OPTIONAL_NOT_FOUND); 51ee99c4d4SSivanShani-Arm } 52*de4bbbfdSSivanShani-Arm StringRef AArch64BuildAttrs::getSubsectionOptionalUnknownError() { 53ee99c4d4SSivanShani-Arm return "unknown AArch64 build attributes optionality, expected " 54ee99c4d4SSivanShani-Arm "required|optional"; 55ee99c4d4SSivanShani-Arm } 56ee99c4d4SSivanShani-Arm 57*de4bbbfdSSivanShani-Arm StringRef AArch64BuildAttrs::getTypeStr(unsigned Type) { 58ee99c4d4SSivanShani-Arm switch (Type) { 59ee99c4d4SSivanShani-Arm case ULEB128: 60ee99c4d4SSivanShani-Arm return "uleb128"; 61ee99c4d4SSivanShani-Arm case NTBS: 62ee99c4d4SSivanShani-Arm return "ntbs"; 63ee99c4d4SSivanShani-Arm case TYPE_NOT_FOUND: 64ee99c4d4SSivanShani-Arm default: 65ee99c4d4SSivanShani-Arm return ""; 66ee99c4d4SSivanShani-Arm } 67ee99c4d4SSivanShani-Arm } 68*de4bbbfdSSivanShani-Arm SubsectionType AArch64BuildAttrs::getTypeID(StringRef Type) { 69ee99c4d4SSivanShani-Arm return StringSwitch<SubsectionType>(Type) 70ee99c4d4SSivanShani-Arm .Cases("uleb128", "ULEB128", ULEB128) 71ee99c4d4SSivanShani-Arm .Cases("ntbs", "NTBS", NTBS) 72ee99c4d4SSivanShani-Arm .Default(TYPE_NOT_FOUND); 73ee99c4d4SSivanShani-Arm } 74*de4bbbfdSSivanShani-Arm StringRef AArch64BuildAttrs::getSubsectionTypeUnknownError() { 75ee99c4d4SSivanShani-Arm return "unknown AArch64 build attributes type, expected uleb128|ntbs"; 76ee99c4d4SSivanShani-Arm } 77ee99c4d4SSivanShani-Arm 78*de4bbbfdSSivanShani-Arm StringRef AArch64BuildAttrs::getPauthABITagsStr(unsigned PauthABITag) { 79ee99c4d4SSivanShani-Arm switch (PauthABITag) { 80ee99c4d4SSivanShani-Arm case TAG_PAUTH_PLATFORM: 81ee99c4d4SSivanShani-Arm return "Tag_PAuth_Platform"; 82ee99c4d4SSivanShani-Arm case TAG_PAUTH_SCHEMA: 83ee99c4d4SSivanShani-Arm return "Tag_PAuth_Schema"; 84ee99c4d4SSivanShani-Arm case PAUTHABI_TAG_NOT_FOUND: 85ee99c4d4SSivanShani-Arm default: 86ee99c4d4SSivanShani-Arm return ""; 87ee99c4d4SSivanShani-Arm } 88ee99c4d4SSivanShani-Arm } 895daecd4aSFangrui Song 90*de4bbbfdSSivanShani-Arm PauthABITags AArch64BuildAttrs::getPauthABITagsID(StringRef PauthABITag) { 91ee99c4d4SSivanShani-Arm return StringSwitch<PauthABITags>(PauthABITag) 92ee99c4d4SSivanShani-Arm .Case("Tag_PAuth_Platform", TAG_PAUTH_PLATFORM) 93ee99c4d4SSivanShani-Arm .Case("Tag_PAuth_Schema", TAG_PAUTH_SCHEMA) 94ee99c4d4SSivanShani-Arm .Default(PAUTHABI_TAG_NOT_FOUND); 95ee99c4d4SSivanShani-Arm } 96ee99c4d4SSivanShani-Arm 975daecd4aSFangrui Song StringRef 98*de4bbbfdSSivanShani-Arm AArch64BuildAttrs::getFeatureAndBitsTagsStr(unsigned FeatureAndBitsTag) { 99ee99c4d4SSivanShani-Arm switch (FeatureAndBitsTag) { 100ee99c4d4SSivanShani-Arm case TAG_FEATURE_BTI: 101ee99c4d4SSivanShani-Arm return "Tag_Feature_BTI"; 102ee99c4d4SSivanShani-Arm case TAG_FEATURE_PAC: 103ee99c4d4SSivanShani-Arm return "Tag_Feature_PAC"; 104ee99c4d4SSivanShani-Arm case TAG_FEATURE_GCS: 105ee99c4d4SSivanShani-Arm return "Tag_Feature_GCS"; 106ee99c4d4SSivanShani-Arm case FEATURE_AND_BITS_TAG_NOT_FOUND: 107ee99c4d4SSivanShani-Arm default: 108ee99c4d4SSivanShani-Arm return ""; 109ee99c4d4SSivanShani-Arm } 110ee99c4d4SSivanShani-Arm } 1115daecd4aSFangrui Song 1125daecd4aSFangrui Song FeatureAndBitsTags 113*de4bbbfdSSivanShani-Arm AArch64BuildAttrs::getFeatureAndBitsTagsID(StringRef FeatureAndBitsTag) { 114ee99c4d4SSivanShani-Arm return StringSwitch<FeatureAndBitsTags>(FeatureAndBitsTag) 115ee99c4d4SSivanShani-Arm .Case("Tag_Feature_BTI", TAG_FEATURE_BTI) 116ee99c4d4SSivanShani-Arm .Case("Tag_Feature_PAC", TAG_FEATURE_PAC) 117ee99c4d4SSivanShani-Arm .Case("Tag_Feature_GCS", TAG_FEATURE_GCS) 118ee99c4d4SSivanShani-Arm .Default(FEATURE_AND_BITS_TAG_NOT_FOUND); 119ee99c4d4SSivanShani-Arm } 120