15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- LDSymbol.h ---------------------------------------------------------===// 25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// The MCLinker Project 45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source 65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details. 75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifndef MCLD_LD_SYMBOL_H 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define MCLD_LD_SYMBOL_H 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h> 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 15cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <cassert> 16cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 17cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <mcld/ADT/Uncopyable.h> 18cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <mcld/LD/ResolveInfo.h> 19cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao#include <mcld/LD/FragmentRef.h> 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class LDSymbol 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \brief LDSymbol provides a consistent abstraction for different formats 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * in different targets. 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass LDSymbol 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // FIXME: use SizeTrait<32> or SizeTrait<64> instead of big type 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao typedef ResolveInfo::SizeType SizeType; 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao typedef uint64_t ValueType; 34cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao typedef FragmentRef::Offset Offset; 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSymbol(); 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSymbol(const LDSymbol& pCopy); 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao LDSymbol& operator=(const LDSymbol& pCopy); 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ~LDSymbol(); 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // ----- observers ----- // 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const char* name() const { 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != m_pResolveInfo); 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_pResolveInfo->name(); 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao unsigned int nameSize() const { 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != m_pResolveInfo); 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_pResolveInfo->nameSize(); 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::StringRef str() const { 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != m_pResolveInfo); 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return llvm::StringRef(m_pResolveInfo->name(), m_pResolveInfo->nameSize()); 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao bool isDyn() const { 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != m_pResolveInfo); 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_pResolveInfo->isDyn(); 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao unsigned int type() const { 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != m_pResolveInfo); 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_pResolveInfo->type(); 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao unsigned int desc() const { 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != m_pResolveInfo); 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_pResolveInfo->desc(); 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao unsigned int binding() const { 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != m_pResolveInfo); 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_pResolveInfo->binding(); 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao uint8_t other() const { 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != m_pResolveInfo); 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_pResolveInfo->other(); 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao uint8_t visibility() const { 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != m_pResolveInfo); 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_pResolveInfo->other(); 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ValueType value() const 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_Value; } 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 89cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao const FragmentRef* fragRef() const 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_pFragRef; } 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao SizeType size() const 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_pResolveInfo->size(); } 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ResolveInfo* resolveInfo() 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_pResolveInfo; } 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 98affc150dc44fab1911775a49636d0ce85333b634Zonr Chang const ResolveInfo* resolveInfo() const 995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_pResolveInfo; } 1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao bool hasFragRef() const 1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return (NULL != m_pFragRef); } 1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // ----- modifiers ----- // 1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao void setSize(SizeType pSize) { 1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != m_pResolveInfo); 1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pResolveInfo->setSize(pSize); 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao void setValue(ValueType pValue) 1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { m_Value = pValue; } 112affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 113cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao void setFragmentRef(FragmentRef* pFragmentRef); 1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao void setResolveInfo(const ResolveInfo& pInfo); 1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprivate: 1185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // ----- Symbol's fields ----- // 1195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ResolveInfo* m_pResolveInfo; 120cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao FragmentRef* m_pFragRef; 1215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ValueType m_Value; 1225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 1245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace mcld 1265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 128affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 129