xref: /llvm-project/llvm/include/llvm/Support/AArch64BuildAttributes.h (revision de4bbbfdccb6172c563b07889ecfb06bc4974a7e)
1ee99c4d4SSivanShani-Arm //===-- AArch64BuildAttributes.h - AARch64 Build Attributes -----*- C++ -*-===//
2ee99c4d4SSivanShani-Arm //
3ee99c4d4SSivanShani-Arm // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4ee99c4d4SSivanShani-Arm // See https://llvm.org/LICENSE.txt for license information.
5ee99c4d4SSivanShani-Arm // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6ee99c4d4SSivanShani-Arm //
7ee99c4d4SSivanShani-Arm //===----------------------------------------------------------------------===//
8ee99c4d4SSivanShani-Arm //
9ee99c4d4SSivanShani-Arm // This file contains enumerations and support routines for AArch64 build
10ee99c4d4SSivanShani-Arm // attributes as defined in Build Attributes for the AArch64 document.
11ee99c4d4SSivanShani-Arm //
12ee99c4d4SSivanShani-Arm // Build Attributes for the Arm® 64-bit Architecture (AArch64) 2024Q1
13ee99c4d4SSivanShani-Arm //
14ee99c4d4SSivanShani-Arm // https://github.com/ARM-software/abi-aa/pull/230
15ee99c4d4SSivanShani-Arm //
16ee99c4d4SSivanShani-Arm //===----------------------------------------------------------------------===//
17ee99c4d4SSivanShani-Arm 
18ee99c4d4SSivanShani-Arm #ifndef LLVM_SUPPORT_AARCH64BUILDATTRIBUTES_H
19ee99c4d4SSivanShani-Arm #define LLVM_SUPPORT_AARCH64BUILDATTRIBUTES_H
20ee99c4d4SSivanShani-Arm 
21ee99c4d4SSivanShani-Arm #include "llvm/ADT/StringRef.h"
22ee99c4d4SSivanShani-Arm 
23ee99c4d4SSivanShani-Arm namespace llvm {
24ee99c4d4SSivanShani-Arm 
25*de4bbbfdSSivanShani-Arm namespace AArch64BuildAttrs {
26ee99c4d4SSivanShani-Arm 
27ee99c4d4SSivanShani-Arm /// AArch64 build attributes vendors IDs (a.k.a subsection name)
28ee99c4d4SSivanShani-Arm enum VendorID : unsigned {
29ee99c4d4SSivanShani-Arm   AEABI_FEATURE_AND_BITS = 0,
30ee99c4d4SSivanShani-Arm   AEABI_PAUTHABI = 1,
31ee99c4d4SSivanShani-Arm   VENDOR_UNKNOWN = 404 // Treated as a private subsection name
32ee99c4d4SSivanShani-Arm };
33ee99c4d4SSivanShani-Arm StringRef getVendorName(unsigned const Vendor);
34ee99c4d4SSivanShani-Arm VendorID getVendorID(StringRef const Vendor);
35ee99c4d4SSivanShani-Arm 
36ee99c4d4SSivanShani-Arm enum SubsectionOptional : unsigned {
37ee99c4d4SSivanShani-Arm   REQUIRED = 0,
38ee99c4d4SSivanShani-Arm   OPTIONAL = 1,
39ee99c4d4SSivanShani-Arm   OPTIONAL_NOT_FOUND = 404
40ee99c4d4SSivanShani-Arm };
41ee99c4d4SSivanShani-Arm StringRef getOptionalStr(unsigned Optional);
42ee99c4d4SSivanShani-Arm SubsectionOptional getOptionalID(StringRef Optional);
43ee99c4d4SSivanShani-Arm StringRef getSubsectionOptionalUnknownError();
44ee99c4d4SSivanShani-Arm 
45ee99c4d4SSivanShani-Arm enum SubsectionType : unsigned { ULEB128 = 0, NTBS = 1, TYPE_NOT_FOUND = 404 };
46ee99c4d4SSivanShani-Arm StringRef getTypeStr(unsigned Type);
47ee99c4d4SSivanShani-Arm SubsectionType getTypeID(StringRef Type);
48ee99c4d4SSivanShani-Arm StringRef getSubsectionTypeUnknownError();
49ee99c4d4SSivanShani-Arm 
50ee99c4d4SSivanShani-Arm enum PauthABITags : unsigned {
51ee99c4d4SSivanShani-Arm   TAG_PAUTH_PLATFORM = 1,
52ee99c4d4SSivanShani-Arm   TAG_PAUTH_SCHEMA = 2,
53ee99c4d4SSivanShani-Arm   PAUTHABI_TAG_NOT_FOUND = 404
54ee99c4d4SSivanShani-Arm };
55ee99c4d4SSivanShani-Arm StringRef getPauthABITagsStr(unsigned PauthABITag);
56ee99c4d4SSivanShani-Arm PauthABITags getPauthABITagsID(StringRef PauthABITag);
57ee99c4d4SSivanShani-Arm 
58ee99c4d4SSivanShani-Arm enum FeatureAndBitsTags : unsigned {
59ee99c4d4SSivanShani-Arm   TAG_FEATURE_BTI = 0,
60ee99c4d4SSivanShani-Arm   TAG_FEATURE_PAC = 1,
61ee99c4d4SSivanShani-Arm   TAG_FEATURE_GCS = 2,
62ee99c4d4SSivanShani-Arm   FEATURE_AND_BITS_TAG_NOT_FOUND = 404
63ee99c4d4SSivanShani-Arm };
64ee99c4d4SSivanShani-Arm StringRef getFeatureAndBitsTagsStr(unsigned FeatureAndBitsTag);
65ee99c4d4SSivanShani-Arm FeatureAndBitsTags getFeatureAndBitsTagsID(StringRef FeatureAndBitsTag);
66ee99c4d4SSivanShani-Arm 
67ee99c4d4SSivanShani-Arm enum FeatureAndBitsFlag : unsigned {
68ee99c4d4SSivanShani-Arm   Feature_BTI_Flag = 1 << 0,
69ee99c4d4SSivanShani-Arm   Feature_PAC_Flag = 1 << 1,
70ee99c4d4SSivanShani-Arm   Feature_GCS_Flag = 1 << 2
71ee99c4d4SSivanShani-Arm };
72*de4bbbfdSSivanShani-Arm } // namespace AArch64BuildAttrs
73ee99c4d4SSivanShani-Arm } // namespace llvm
74ee99c4d4SSivanShani-Arm 
75ee99c4d4SSivanShani-Arm #endif // LLVM_SUPPORT_AARCH64BUILDATTRIBUTES_H