| //===-- 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); |
| } |