35 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
//===-- ELFAttributes.cpp - ELF 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/ELFAttributes.h"
 | 
						|
#include "llvm/ADT/StringRef.h"
 | 
						|
 | 
						|
using namespace llvm;
 | 
						|
 | 
						|
StringRef ELFAttrs::attrTypeAsString(unsigned attr, TagNameMap tagNameMap,
 | 
						|
                                     bool hasTagPrefix) {
 | 
						|
  auto tagNameIt = find_if(
 | 
						|
      tagNameMap, [attr](const TagNameItem item) { return item.attr == attr; });
 | 
						|
  if (tagNameIt == tagNameMap.end())
 | 
						|
    return "";
 | 
						|
  StringRef tagName = tagNameIt->tagName;
 | 
						|
  return hasTagPrefix ? tagName : tagName.drop_front(4);
 | 
						|
}
 | 
						|
 | 
						|
Optional<unsigned> ELFAttrs::attrTypeFromString(StringRef tag,
 | 
						|
                                                TagNameMap tagNameMap) {
 | 
						|
  bool hasTagPrefix = tag.startswith("Tag_");
 | 
						|
  auto tagNameIt =
 | 
						|
      find_if(tagNameMap, [tag, hasTagPrefix](const TagNameItem item) {
 | 
						|
        return item.tagName.drop_front(hasTagPrefix ? 0 : 4) == tag;
 | 
						|
      });
 | 
						|
  if (tagNameIt == tagNameMap.end())
 | 
						|
    return None;
 | 
						|
  return tagNameIt->attr;
 | 
						|
}
 |