| //===-- AArch64AttributeParser.cpp - AArch64 Build Attributes PArser------===// | |
| // | |
| // 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/AArch64AttributeParser.h" | |
| #include "llvm/Support/AArch64BuildAttributes.h" | |
| std::vector<llvm::SubsectionAndTagToTagName> & | |
| llvm::AArch64AttributeParser::returnTagsNamesMap() { | |
| static std::vector<SubsectionAndTagToTagName> TagsNamesMap = { | |
| {"aeabi_pauthabi", 1, "Tag_PAuth_Platform"}, | |
| {"aeabi_pauthabi", 2, "Tag_PAuth_Schema"}, | |
| {"aeabi_feature_and_bits", 0, "Tag_Feature_BTI"}, | |
| {"aeabi_feature_and_bits", 1, "Tag_Feature_PAC"}, | |
| {"aeabi_feature_and_bits", 2, "Tag_Feature_GCS"}}; | |
| return TagsNamesMap; | |
| } | |
| llvm::AArch64BuildAttrSubsections llvm::extractBuildAttributesSubsections( | |
| const llvm::AArch64AttributeParser &Attributes) { | |
| llvm::AArch64BuildAttrSubsections SubSections; | |
| auto GetPauthValue = [&Attributes](unsigned Tag) { | |
| return Attributes.getAttributeValue("aeabi_pauthabi", Tag).value_or(0); | |
| }; | |
| SubSections.Pauth.TagPlatform = | |
| GetPauthValue(llvm::AArch64BuildAttributes::TAG_PAUTH_PLATFORM); | |
| SubSections.Pauth.TagSchema = | |
| GetPauthValue(llvm::AArch64BuildAttributes::TAG_PAUTH_SCHEMA); | |
| auto GetFeatureValue = [&Attributes](unsigned Tag) { | |
| return Attributes.getAttributeValue("aeabi_feature_and_bits", Tag) | |
| .value_or(0); | |
| }; | |
| SubSections.AndFeatures |= | |
| GetFeatureValue(llvm::AArch64BuildAttributes::TAG_FEATURE_BTI); | |
| SubSections.AndFeatures |= | |
| GetFeatureValue(llvm::AArch64BuildAttributes::TAG_FEATURE_PAC) << 1; | |
| SubSections.AndFeatures |= | |
| GetFeatureValue(llvm::AArch64BuildAttributes::TAG_FEATURE_GCS) << 2; | |
| return SubSections; | |
| } |