1*581ba352SKai Wang //===-- ELFAttributes.cpp - ELF Attributes --------------------------------===//
2*581ba352SKai Wang //
3*581ba352SKai Wang // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*581ba352SKai Wang // See https://llvm.org/LICENSE.txt for license information.
5*581ba352SKai Wang // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*581ba352SKai Wang //
7*581ba352SKai Wang //===----------------------------------------------------------------------===//
8*581ba352SKai Wang
9*581ba352SKai Wang #include "llvm/Support/ELFAttributes.h"
10*581ba352SKai Wang #include "llvm/ADT/StringRef.h"
11*581ba352SKai Wang
12*581ba352SKai Wang using namespace llvm;
13*581ba352SKai Wang
attrTypeAsString(unsigned attr,TagNameMap tagNameMap,bool hasTagPrefix)14*581ba352SKai Wang StringRef ELFAttrs::attrTypeAsString(unsigned attr, TagNameMap tagNameMap,
15*581ba352SKai Wang bool hasTagPrefix) {
16*581ba352SKai Wang auto tagNameIt = find_if(
17*581ba352SKai Wang tagNameMap, [attr](const TagNameItem item) { return item.attr == attr; });
18*581ba352SKai Wang if (tagNameIt == tagNameMap.end())
19*581ba352SKai Wang return "";
20*581ba352SKai Wang StringRef tagName = tagNameIt->tagName;
21*581ba352SKai Wang return hasTagPrefix ? tagName : tagName.drop_front(4);
22*581ba352SKai Wang }
23*581ba352SKai Wang
attrTypeFromString(StringRef tag,TagNameMap tagNameMap)24*581ba352SKai Wang Optional<unsigned> ELFAttrs::attrTypeFromString(StringRef tag,
25*581ba352SKai Wang TagNameMap tagNameMap) {
26*581ba352SKai Wang bool hasTagPrefix = tag.startswith("Tag_");
27*581ba352SKai Wang auto tagNameIt =
28*581ba352SKai Wang find_if(tagNameMap, [tag, hasTagPrefix](const TagNameItem item) {
29*581ba352SKai Wang return item.tagName.drop_front(hasTagPrefix ? 0 : 4) == tag;
30*581ba352SKai Wang });
31*581ba352SKai Wang if (tagNameIt == tagNameMap.end())
32*581ba352SKai Wang return None;
33*581ba352SKai Wang return tagNameIt->attr;
34*581ba352SKai Wang }
35