|  | //===-- AArch64BuildAttributes.cpp - AArch64 Build Attributes -------------===// | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #include "llvm/Support/AArch64BuildAttributes.h" | 
|  | #include "llvm/ADT/StringSwitch.h" | 
|  |  | 
|  | using namespace llvm; | 
|  | using namespace llvm::AArch64BuildAttributes; | 
|  |  | 
|  | StringRef AArch64BuildAttributes::getVendorName(unsigned Vendor) { | 
|  | switch (Vendor) { | 
|  | case AEABI_FEATURE_AND_BITS: | 
|  | return "aeabi_feature_and_bits"; | 
|  | case AEABI_PAUTHABI: | 
|  | return "aeabi_pauthabi"; | 
|  | case VENDOR_UNKNOWN: | 
|  | return ""; | 
|  | default: | 
|  | assert(0 && "Vendor name error"); | 
|  | return ""; | 
|  | } | 
|  | } | 
|  | VendorID AArch64BuildAttributes::getVendorID(StringRef Vendor) { | 
|  | return StringSwitch<VendorID>(Vendor) | 
|  | .Case("aeabi_feature_and_bits", AEABI_FEATURE_AND_BITS) | 
|  | .Case("aeabi_pauthabi", AEABI_PAUTHABI) | 
|  | .Default(VENDOR_UNKNOWN); | 
|  | } | 
|  |  | 
|  | StringRef AArch64BuildAttributes::getOptionalStr(unsigned Optional) { | 
|  | switch (Optional) { | 
|  | case REQUIRED: | 
|  | return "required"; | 
|  | case OPTIONAL: | 
|  | return "optional"; | 
|  | case OPTIONAL_NOT_FOUND: | 
|  | default: | 
|  | return ""; | 
|  | } | 
|  | } | 
|  | SubsectionOptional AArch64BuildAttributes::getOptionalID(StringRef Optional) { | 
|  | return StringSwitch<SubsectionOptional>(Optional) | 
|  | .Case("required", REQUIRED) | 
|  | .Case("optional", OPTIONAL) | 
|  | .Default(OPTIONAL_NOT_FOUND); | 
|  | } | 
|  | StringRef AArch64BuildAttributes::getSubsectionOptionalUnknownError() { | 
|  | return "unknown AArch64 build attributes optionality, expected " | 
|  | "required|optional"; | 
|  | } | 
|  |  | 
|  | StringRef AArch64BuildAttributes::getTypeStr(unsigned Type) { | 
|  | switch (Type) { | 
|  | case ULEB128: | 
|  | return "uleb128"; | 
|  | case NTBS: | 
|  | return "ntbs"; | 
|  | case TYPE_NOT_FOUND: | 
|  | default: | 
|  | return ""; | 
|  | } | 
|  | } | 
|  | SubsectionType AArch64BuildAttributes::getTypeID(StringRef Type) { | 
|  | return StringSwitch<SubsectionType>(Type) | 
|  | .Cases("uleb128", "ULEB128", ULEB128) | 
|  | .Cases("ntbs", "NTBS", NTBS) | 
|  | .Default(TYPE_NOT_FOUND); | 
|  | } | 
|  | StringRef AArch64BuildAttributes::getSubsectionTypeUnknownError() { | 
|  | return "unknown AArch64 build attributes type, expected uleb128|ntbs"; | 
|  | } | 
|  |  | 
|  | StringRef AArch64BuildAttributes::getPauthABITagsStr(unsigned PauthABITag) { | 
|  | switch (PauthABITag) { | 
|  | case TAG_PAUTH_PLATFORM: | 
|  | return "Tag_PAuth_Platform"; | 
|  | case TAG_PAUTH_SCHEMA: | 
|  | return "Tag_PAuth_Schema"; | 
|  | case PAUTHABI_TAG_NOT_FOUND: | 
|  | default: | 
|  | return ""; | 
|  | } | 
|  | } | 
|  |  | 
|  | PauthABITags AArch64BuildAttributes::getPauthABITagsID(StringRef PauthABITag) { | 
|  | return StringSwitch<PauthABITags>(PauthABITag) | 
|  | .Case("Tag_PAuth_Platform", TAG_PAUTH_PLATFORM) | 
|  | .Case("Tag_PAuth_Schema", TAG_PAUTH_SCHEMA) | 
|  | .Default(PAUTHABI_TAG_NOT_FOUND); | 
|  | } | 
|  |  | 
|  | StringRef | 
|  | AArch64BuildAttributes::getFeatureAndBitsTagsStr(unsigned FeatureAndBitsTag) { | 
|  | switch (FeatureAndBitsTag) { | 
|  | case TAG_FEATURE_BTI: | 
|  | return "Tag_Feature_BTI"; | 
|  | case TAG_FEATURE_PAC: | 
|  | return "Tag_Feature_PAC"; | 
|  | case TAG_FEATURE_GCS: | 
|  | return "Tag_Feature_GCS"; | 
|  | case FEATURE_AND_BITS_TAG_NOT_FOUND: | 
|  | default: | 
|  | return ""; | 
|  | } | 
|  | } | 
|  |  | 
|  | FeatureAndBitsTags | 
|  | AArch64BuildAttributes::getFeatureAndBitsTagsID(StringRef FeatureAndBitsTag) { | 
|  | return StringSwitch<FeatureAndBitsTags>(FeatureAndBitsTag) | 
|  | .Case("Tag_Feature_BTI", TAG_FEATURE_BTI) | 
|  | .Case("Tag_Feature_PAC", TAG_FEATURE_PAC) | 
|  | .Case("Tag_Feature_GCS", TAG_FEATURE_GCS) | 
|  | .Default(FEATURE_AND_BITS_TAG_NOT_FOUND); | 
|  | } |