brintos

brintos / llvm-project-archived public Read only

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