xref: /llvm-project/llvm/lib/Support/ELFAttributes.cpp (revision bcb685e11945946335c2dc6265779f0226491b49)
1581ba352SKai Wang //===-- ELFAttributes.cpp - ELF Attributes --------------------------------===//
2581ba352SKai Wang //
3581ba352SKai Wang // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4581ba352SKai Wang // See https://llvm.org/LICENSE.txt for license information.
5581ba352SKai Wang // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6581ba352SKai Wang //
7581ba352SKai Wang //===----------------------------------------------------------------------===//
8581ba352SKai Wang 
9581ba352SKai Wang #include "llvm/Support/ELFAttributes.h"
10581ba352SKai Wang #include "llvm/ADT/StringRef.h"
11581ba352SKai Wang 
12581ba352SKai Wang using namespace llvm;
13581ba352SKai Wang 
attrTypeAsString(unsigned attr,TagNameMap tagNameMap,bool hasTagPrefix)14581ba352SKai Wang StringRef ELFAttrs::attrTypeAsString(unsigned attr, TagNameMap tagNameMap,
15581ba352SKai Wang                                      bool hasTagPrefix) {
16581ba352SKai Wang   auto tagNameIt = find_if(
17581ba352SKai Wang       tagNameMap, [attr](const TagNameItem item) { return item.attr == attr; });
18581ba352SKai Wang   if (tagNameIt == tagNameMap.end())
19581ba352SKai Wang     return "";
20581ba352SKai Wang   StringRef tagName = tagNameIt->tagName;
21581ba352SKai Wang   return hasTagPrefix ? tagName : tagName.drop_front(4);
22581ba352SKai Wang }
23581ba352SKai Wang 
attrTypeFromString(StringRef tag,TagNameMap tagNameMap)2474034588SFangrui Song std::optional<unsigned> ELFAttrs::attrTypeFromString(StringRef tag,
25581ba352SKai Wang                                                      TagNameMap tagNameMap) {
26*bcb685e1SSimon Pilgrim   bool hasTagPrefix = tag.starts_with("Tag_");
27581ba352SKai Wang   auto tagNameIt =
28581ba352SKai Wang       find_if(tagNameMap, [tag, hasTagPrefix](const TagNameItem item) {
29581ba352SKai Wang         return item.tagName.drop_front(hasTagPrefix ? 0 : 4) == tag;
30581ba352SKai Wang       });
31581ba352SKai Wang   if (tagNameIt == tagNameMap.end())
32aadaafacSKazu Hirata     return std::nullopt;
33581ba352SKai Wang   return tagNameIt->attr;
34581ba352SKai Wang }
35