120 lines · cpp
1//===-- AArch64BuildAttributes.cpp - AArch64 Build Attributes -------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "llvm/Support/AArch64BuildAttributes.h"10#include "llvm/ADT/StringSwitch.h"11 12using namespace llvm;13using namespace llvm::AArch64BuildAttributes;14 15StringRef AArch64BuildAttributes::getVendorName(unsigned Vendor) {16 switch (Vendor) {17 case AEABI_FEATURE_AND_BITS:18 return "aeabi_feature_and_bits";19 case AEABI_PAUTHABI:20 return "aeabi_pauthabi";21 case VENDOR_UNKNOWN:22 return "";23 default:24 assert(0 && "Vendor name error");25 return "";26 }27}28VendorID AArch64BuildAttributes::getVendorID(StringRef Vendor) {29 return StringSwitch<VendorID>(Vendor)30 .Case("aeabi_feature_and_bits", AEABI_FEATURE_AND_BITS)31 .Case("aeabi_pauthabi", AEABI_PAUTHABI)32 .Default(VENDOR_UNKNOWN);33}34 35StringRef AArch64BuildAttributes::getOptionalStr(unsigned Optional) {36 switch (Optional) {37 case REQUIRED:38 return "required";39 case OPTIONAL:40 return "optional";41 case OPTIONAL_NOT_FOUND:42 default:43 return "";44 }45}46SubsectionOptional AArch64BuildAttributes::getOptionalID(StringRef Optional) {47 return StringSwitch<SubsectionOptional>(Optional)48 .Case("required", REQUIRED)49 .Case("optional", OPTIONAL)50 .Default(OPTIONAL_NOT_FOUND);51}52StringRef AArch64BuildAttributes::getSubsectionOptionalUnknownError() {53 return "unknown AArch64 build attributes optionality, expected "54 "required|optional";55}56 57StringRef AArch64BuildAttributes::getTypeStr(unsigned Type) {58 switch (Type) {59 case ULEB128:60 return "uleb128";61 case NTBS:62 return "ntbs";63 case TYPE_NOT_FOUND:64 default:65 return "";66 }67}68SubsectionType AArch64BuildAttributes::getTypeID(StringRef Type) {69 return StringSwitch<SubsectionType>(Type)70 .Cases({"uleb128", "ULEB128"}, ULEB128)71 .Cases({"ntbs", "NTBS"}, NTBS)72 .Default(TYPE_NOT_FOUND);73}74StringRef AArch64BuildAttributes::getSubsectionTypeUnknownError() {75 return "unknown AArch64 build attributes type, expected uleb128|ntbs";76}77 78StringRef AArch64BuildAttributes::getPauthABITagsStr(unsigned PauthABITag) {79 switch (PauthABITag) {80 case TAG_PAUTH_PLATFORM:81 return "Tag_PAuth_Platform";82 case TAG_PAUTH_SCHEMA:83 return "Tag_PAuth_Schema";84 case PAUTHABI_TAG_NOT_FOUND:85 default:86 return "";87 }88}89 90PauthABITags AArch64BuildAttributes::getPauthABITagsID(StringRef PauthABITag) {91 return StringSwitch<PauthABITags>(PauthABITag)92 .Case("Tag_PAuth_Platform", TAG_PAUTH_PLATFORM)93 .Case("Tag_PAuth_Schema", TAG_PAUTH_SCHEMA)94 .Default(PAUTHABI_TAG_NOT_FOUND);95}96 97StringRef98AArch64BuildAttributes::getFeatureAndBitsTagsStr(unsigned FeatureAndBitsTag) {99 switch (FeatureAndBitsTag) {100 case TAG_FEATURE_BTI:101 return "Tag_Feature_BTI";102 case TAG_FEATURE_PAC:103 return "Tag_Feature_PAC";104 case TAG_FEATURE_GCS:105 return "Tag_Feature_GCS";106 case FEATURE_AND_BITS_TAG_NOT_FOUND:107 default:108 return "";109 }110}111 112FeatureAndBitsTags113AArch64BuildAttributes::getFeatureAndBitsTagsID(StringRef FeatureAndBitsTag) {114 return StringSwitch<FeatureAndBitsTags>(FeatureAndBitsTag)115 .Case("Tag_Feature_BTI", TAG_FEATURE_BTI)116 .Case("Tag_Feature_PAC", TAG_FEATURE_PAC)117 .Case("Tag_Feature_GCS", TAG_FEATURE_GCS)118 .Default(FEATURE_AND_BITS_TAG_NOT_FOUND);119}120