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