1 //===-- AArch64BuildAttributes.cpp - AArch64 Build Attributes -------------===//
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-exception
7 //===----------------------------------------------------------------------===//
9 #include "llvm/Support/AArch64BuildAttributes.h"
10 #include "llvm/ADT/StringSwitch.h"
13 using namespace llvm::AArch64BuildAttrs
;
15 StringRef
AArch64BuildAttrs::getVendorName(unsigned Vendor
) {
17 case AEABI_FEATURE_AND_BITS
:
18 return "aeabi_feature_and_bits";
20 return "aeabi_pauthabi";
24 assert(0 && "Vendor name error");
28 VendorID
AArch64BuildAttrs::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
);
35 StringRef
AArch64BuildAttrs::getOptionalStr(unsigned Optional
) {
41 case OPTIONAL_NOT_FOUND
:
46 SubsectionOptional
AArch64BuildAttrs::getOptionalID(StringRef Optional
) {
47 return StringSwitch
<SubsectionOptional
>(Optional
)
48 .Case("required", REQUIRED
)
49 .Case("optional", OPTIONAL
)
50 .Default(OPTIONAL_NOT_FOUND
);
52 StringRef
AArch64BuildAttrs::getSubsectionOptionalUnknownError() {
53 return "unknown AArch64 build attributes optionality, expected "
57 StringRef
AArch64BuildAttrs::getTypeStr(unsigned Type
) {
68 SubsectionType
AArch64BuildAttrs::getTypeID(StringRef Type
) {
69 return StringSwitch
<SubsectionType
>(Type
)
70 .Cases("uleb128", "ULEB128", ULEB128
)
71 .Cases("ntbs", "NTBS", NTBS
)
72 .Default(TYPE_NOT_FOUND
);
74 StringRef
AArch64BuildAttrs::getSubsectionTypeUnknownError() {
75 return "unknown AArch64 build attributes type, expected uleb128|ntbs";
78 StringRef
AArch64BuildAttrs::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
:
90 PauthABITags
AArch64BuildAttrs::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
);
98 AArch64BuildAttrs::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
:
113 AArch64BuildAttrs::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
);