15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- MCLDInput.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// 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Input class inherits MCLDFile, which is used to represent a input file 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifndef MCLD_INPUT_H 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define MCLD_INPUT_H 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h> 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/Support/Path.h> 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld { 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass MemoryArea; 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass AttributeProxy; 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass Attribute; 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass InputFactory; 2722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass LDContext; 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class Input 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \brief Input provides the information of a input file. 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 3222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass Input 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaofriend class InputFactory; 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao enum Type { 3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Unknown, 3822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Object, 3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Exec, 4022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao DynObj, 4122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao CoreFile, 4222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Script, 4322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Archive, 4422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao External 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaopublic: 4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao explicit Input(llvm::StringRef pName); 4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Input(llvm::StringRef pName, 5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const AttributeProxy& pAttr); 5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Input(llvm::StringRef pName, 5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const sys::fs::Path& pPath, 5522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao unsigned int pType = Unknown, 5622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao off_t pFileOffset = 0); 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Input(llvm::StringRef pName, 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const sys::fs::Path& pPath, 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const AttributeProxy& pAttr, 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao unsigned int pType = Unknown, 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao off_t pFileOffset = 0); 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ~Input(); 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 6622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const std::string& name() const 6722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { return m_Name; } 6822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao void setName(const std::string& pName) 7022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { m_Name = pName; } 7122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const sys::fs::Path& path() const 7322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { return m_Path; } 7422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao void setPath(const sys::fs::Path& pPath) 7622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { m_Path = pPath; } 7722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao void setType(unsigned int pType) 7922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { m_Type = pType; } 8022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 8122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao unsigned int type() const 8222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { return m_Type; } 8322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao bool isRecognized() const 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return (m_Type != Unknown); } 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 8722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool hasAttribute() const 8822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { return (NULL != m_pAttr); } 8922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const Attribute* attribute() const 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_pAttr; } 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao bool isNeeded() const 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_bNeeded; } 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao void setNeeded() 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { m_bNeeded = true; } 985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao off_t fileOffset() const 1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_fileOffset; } 1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao void setFileOffset(off_t pFileOffset) 1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { m_fileOffset = pFileOffset; } 1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 10522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao // ----- memory area ----- // 10622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao void setMemArea(MemoryArea* pMemArea) 10722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { m_pMemArea = pMemArea; } 10822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 10922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool hasMemArea() const 11022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { return (NULL != m_pMemArea); } 11122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 11222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const MemoryArea* memArea() const { return m_pMemArea; } 11322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao MemoryArea* memArea() { return m_pMemArea; } 11422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 11522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao // ----- context ----- // 11622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao void setContext(LDContext* pContext) 11722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { m_pContext = pContext; } 11822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 11922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool hasContext() const 12022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { return (NULL != m_pContext); } 12122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 12222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const LDContext* context() const { return m_pContext; } 12322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDContext* context() { return m_pContext; } 12422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 1255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprivate: 12622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao unsigned int m_Type; 12722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao std::string m_Name; 12822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao sys::fs::Path m_Path; 1295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Attribute *m_pAttr; 1305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao bool m_bNeeded; 1315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao off_t m_fileOffset; 13222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao MemoryArea* m_pMemArea; 13322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDContext* m_pContext; 1345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 1355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld 13767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 1385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 1395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 140