[clang] [llvm] [LLVM][Clang][AArch64] Implement AArch64 build attributes (PR #118771)

Oliver Stannard via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 13 03:26:55 PST 2025


================
@@ -0,0 +1,140 @@
+//===-- 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"
+
+namespace llvm {
+namespace AArch64BuildAttributes {
+// AArch64 build attributes
+StringRef getSubsectionTag() { return "aeabi_subsection"; }
+StringRef getAttrTag() { return "aeabi_attribute"; }
+
+StringRef getVendorName(unsigned Vendor) {
+  switch (Vendor) {
+  case AEABI_FEATURE_AND_BITS:
+    return VendorName[AEABI_FEATURE_AND_BITS];
+  case AEABI_PAUTHABI:
+    return VendorName[AEABI_PAUTHABI];
+  case VENDOR_UNKNOWN:
+    return "";
+  default:
+    assert(0 && "Vendor name error");
+    return "";
+  }
+}
+VendorID getVendorID(StringRef Vendor) {
+  if (Vendor == VendorName[AEABI_FEATURE_AND_BITS]) {
+    return AEABI_FEATURE_AND_BITS;
+  }
+  if (Vendor == VendorName[AEABI_PAUTHABI]) {
+    return AEABI_PAUTHABI;
+  }
+  return VENDOR_UNKNOWN;
+}
+
+StringRef getOptionalStr(unsigned Optional) {
+  switch (Optional) {
+  case REQUIRED:
+    return OptionalStr[REQUIRED];
+  case OPTIONAL:
+    return OptionalStr[OPTIONAL];
+  case OPTIONAL_NOT_FOUND:
+    [[fallthrough]];
+  default:
+    return "";
+  }
+}
+SubsectionOptional getOptionalID(StringRef Optional) {
+  if (Optional == OptionalStr[REQUIRED])
+    return REQUIRED;
+  if (Optional == OptionalStr[OPTIONAL])
+    return OPTIONAL;
+  return OPTIONAL_NOT_FOUND;
+}
+StringRef getSubsectionOptionalUnknownError() {
+  return "unknown AArch64 build attributes optionality, expecting "
+         "required|optional";
+}
+
+StringRef getTypeStr(unsigned Type) {
+  switch (Type) {
+  case ULEB128:
+    return TypeStr[ULEB128];
+  case NTBS:
+    return TypeStr[NTBS];
+  case TYPE_NOT_FOUND:
+    [[fallthrough]];
+  default:
+    return "";
+  }
+}
+SubsectionType getTypeID(StringRef Type) {
+  if (Type == TypeStr[ULEB128] || Type == (TypeStr[ULEB128].upper()))
+    return ULEB128;
+  if (Type == TypeStr[NTBS] || Type == (TypeStr[NTBS].upper()))
+    return NTBS;
+  return TYPE_NOT_FOUND;
+}
+StringRef getSubsectionTypeUnknownError() {
+  return "unknown AArch64 build attributes type, expecting uleb128|ntbs";
+}
+
+StringRef getPauthABITagsStr(unsigned PauthABITag) {
+  switch (PauthABITag) {
+  case TAG_PAUTH_PLATFORM:
+    return PauthABITagsStr[TAG_PAUTH_PLATFORM - 1]; // Tag_PAuth_Platform = 1 in
+                                                    // accordance with the spec
+  case TAG_PAUTH_SCHEMA:
+    return PauthABITagsStr[TAG_PAUTH_SCHEMA - 1]; // Tag_PAuth_Schema = 2 in
+                                                  // accordance with the spec
+  case PAUTHABI_TAG_NOT_FOUND:
+    [[fallthrough]];
+  default:
+    return "";
+  }
+}
+PauthABITags getPauthABITagsID(StringRef PauthABITag) {
+  if (PauthABITag == PauthABITagsStr[TAG_PAUTH_PLATFORM - 1])
+    return TAG_PAUTH_PLATFORM;
+  if (PauthABITag == PauthABITagsStr[TAG_PAUTH_SCHEMA - 1])
+    return TAG_PAUTH_SCHEMA;
+  return PAUTHABI_TAG_NOT_FOUND;
+}
+StringRef getPauthabiTagError() {
----------------
ostannard wrote:

Unused.

https://github.com/llvm/llvm-project/pull/118771


More information about the llvm-commits mailing list