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