15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- MCLDInfo.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_LDINFO_H 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define MCLD_LDINFO_H 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h> 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <llvm/ADT/Triple.h> 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/Support/FileSystem.h> 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/Support/MemoryAreaFactory.h> 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/MC/MCLDOutput.h> 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/MC/MCLDOptions.h> 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/MC/MCLDInputTree.h> 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/MC/AttributeFactory.h> 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/MC/ContextFactory.h> 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/StrSymPool.h> 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <string> 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <cassert> 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class MCLDInfo 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \brief MCLDInfo is composed of argumments of MCLinker. 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * options() - the general options. 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * inputs() - the tree of inputs 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * bitcode() - the bitcode being linked 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * output() - the output file 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * inputFactory() - the list of all inputs 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * attrFactory() - the list of all attributes 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * contextFactory() - the list of all contexts. 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * memAreaFactory() - the list of all MemoryAreas. 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass MCLDInfo 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao explicit MCLDInfo(const std::string &pTripleString, 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t pAttrNum, 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t InputSize); 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao virtual ~MCLDInfo(); 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao GeneralOptions& options() 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_Options; } 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const GeneralOptions& options() const 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_Options; } 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao void setBitcode(const Input& pInput); 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Input& bitcode(); 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const Input& bitcode() const; 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Output& output() 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return *m_pOutput; } 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const Output& output() const 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return *m_pOutput; } 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao InputTree& inputs() 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return *m_pInputTree; } 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const InputTree& inputs() const 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return *m_pInputTree; } 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao InputFactory& inputFactory() 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return *m_pInputFactory; } 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const InputFactory& inputFactory() const 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return *m_pInputFactory; } 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao AttributeFactory& attrFactory() 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return *m_pAttrFactory; } 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const AttributeFactory& attrFactory() const 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return *m_pAttrFactory; } 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ContextFactory& contextFactory() 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return *m_pCntxtFactory; } 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const ContextFactory& contextFactory() const 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return *m_pCntxtFactory; } 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao MemoryAreaFactory& memAreaFactory() 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return *m_pMemAreaFactory; } 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const MemoryAreaFactory& memAreaFactory() const 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return *m_pMemAreaFactory; } 985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const llvm::Triple& triple() const 1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_Triple; } 1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao static const char* version(); 1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao void setNamePool(StrSymPool& pPool) 1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { m_pStrSymPool = &pPool; } 1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao StrSymPool& getStrSymPool() { 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != m_pStrSymPool); 1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *m_pStrSymPool; 1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const StrSymPool& getStrSymPool() const { 1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != m_pStrSymPool); 1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *m_pStrSymPool; 1155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprivate: 1185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // ----- General Options ----- // 1195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao GeneralOptions m_Options; 1205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao InputTree *m_pInputTree; 1215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Input* m_pBitcode; 1225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Output* m_pOutput; 1235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao llvm::Triple m_Triple; 1245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // ----- factories ----- // 1265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao InputFactory *m_pInputFactory; 1275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao AttributeFactory *m_pAttrFactory; 1285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ContextFactory *m_pCntxtFactory; 1295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao MemoryAreaFactory *m_pMemAreaFactory; 1305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // ----- string and symbols ----- // 1325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao StrSymPool* m_pStrSymPool; 1335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 1345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld 1365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 1385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 139