1*5f7ddb14SDimitry Andric //===- Symbol.cpp ---------------------------------------------------------===// 2*5f7ddb14SDimitry Andric // 3*5f7ddb14SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*5f7ddb14SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*5f7ddb14SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*5f7ddb14SDimitry Andric // 7*5f7ddb14SDimitry Andric //===----------------------------------------------------------------------===// 8*5f7ddb14SDimitry Andric // 9*5f7ddb14SDimitry Andric // Implements the Symbol. 10*5f7ddb14SDimitry Andric // 11*5f7ddb14SDimitry Andric //===----------------------------------------------------------------------===// 12*5f7ddb14SDimitry Andric 13*5f7ddb14SDimitry Andric #include "llvm/TextAPI/Symbol.h" 14*5f7ddb14SDimitry Andric #include <string> 15*5f7ddb14SDimitry Andric 16*5f7ddb14SDimitry Andric namespace llvm { 17*5f7ddb14SDimitry Andric namespace MachO { 18*5f7ddb14SDimitry Andric 19*5f7ddb14SDimitry Andric #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) dump(raw_ostream & OS) const20*5f7ddb14SDimitry AndricLLVM_DUMP_METHOD void Symbol::dump(raw_ostream &OS) const { 21*5f7ddb14SDimitry Andric std::string Result; 22*5f7ddb14SDimitry Andric if (isUndefined()) 23*5f7ddb14SDimitry Andric Result += "(undef) "; 24*5f7ddb14SDimitry Andric if (isWeakDefined()) 25*5f7ddb14SDimitry Andric Result += "(weak-def) "; 26*5f7ddb14SDimitry Andric if (isWeakReferenced()) 27*5f7ddb14SDimitry Andric Result += "(weak-ref) "; 28*5f7ddb14SDimitry Andric if (isThreadLocalValue()) 29*5f7ddb14SDimitry Andric Result += "(tlv) "; 30*5f7ddb14SDimitry Andric switch (Kind) { 31*5f7ddb14SDimitry Andric case SymbolKind::GlobalSymbol: 32*5f7ddb14SDimitry Andric Result += Name.str(); 33*5f7ddb14SDimitry Andric break; 34*5f7ddb14SDimitry Andric case SymbolKind::ObjectiveCClass: 35*5f7ddb14SDimitry Andric Result += "(ObjC Class) " + Name.str(); 36*5f7ddb14SDimitry Andric break; 37*5f7ddb14SDimitry Andric case SymbolKind::ObjectiveCClassEHType: 38*5f7ddb14SDimitry Andric Result += "(ObjC Class EH) " + Name.str(); 39*5f7ddb14SDimitry Andric break; 40*5f7ddb14SDimitry Andric case SymbolKind::ObjectiveCInstanceVariable: 41*5f7ddb14SDimitry Andric Result += "(ObjC IVar) " + Name.str(); 42*5f7ddb14SDimitry Andric break; 43*5f7ddb14SDimitry Andric } 44*5f7ddb14SDimitry Andric OS << Result; 45*5f7ddb14SDimitry Andric } 46*5f7ddb14SDimitry Andric #endif 47*5f7ddb14SDimitry Andric 48*5f7ddb14SDimitry Andric Symbol::const_filtered_target_range targets(ArchitectureSet Architectures) const49*5f7ddb14SDimitry AndricSymbol::targets(ArchitectureSet Architectures) const { 50*5f7ddb14SDimitry Andric std::function<bool(const Target &)> FN = 51*5f7ddb14SDimitry Andric [Architectures](const Target &Target) { 52*5f7ddb14SDimitry Andric return Architectures.has(Target.Arch); 53*5f7ddb14SDimitry Andric }; 54*5f7ddb14SDimitry Andric return make_filter_range(Targets, FN); 55*5f7ddb14SDimitry Andric } 56*5f7ddb14SDimitry Andric 57*5f7ddb14SDimitry Andric } // end namespace MachO. 58*5f7ddb14SDimitry Andric } // end namespace llvm. 59