187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//===- Input.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//===----------------------------------------------------------------------===// 1387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#ifndef MCLD_MC_INPUT_H 1487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#define MCLD_MC_INPUT_H 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao#include <mcld/Support/Path.h> 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld { 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass MemoryArea; 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass AttributeProxy; 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass Attribute; 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass InputFactory; 2422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass LDContext; 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class Input 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \brief Input provides the information of a input file. 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 2922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass Input 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaofriend class InputFactory; 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic: 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao enum Type { 3422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Unknown, 3587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines Binary, 3622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Object, 3722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Exec, 3822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao DynObj, 3922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao CoreFile, 4022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Script, 4122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Archive, 4222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao External 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao }; 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaopublic: 4622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao explicit Input(llvm::StringRef pName); 4722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 4822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Input(llvm::StringRef pName, 4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const AttributeProxy& pAttr); 5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Input(llvm::StringRef pName, 5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const sys::fs::Path& pPath, 5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao unsigned int pType = Unknown, 5422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao off_t pFileOffset = 0); 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Input(llvm::StringRef pName, 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const sys::fs::Path& pPath, 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const AttributeProxy& pAttr, 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao unsigned int pType = Unknown, 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao off_t pFileOffset = 0); 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ~Input(); 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 6422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const std::string& name() const 6522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { return m_Name; } 6622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao void setName(const std::string& pName) 6822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { m_Name = pName; } 6922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const sys::fs::Path& path() const 7122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { return m_Path; } 7222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao void setPath(const sys::fs::Path& pPath) 7422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { m_Path = pPath; } 7522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao void setType(unsigned int pType) 7722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { m_Type = pType; } 7822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao unsigned int type() const 8022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { return m_Type; } 8122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao bool isRecognized() const 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return (m_Type != Unknown); } 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 8522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool hasAttribute() const 8622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { return (NULL != m_pAttr); } 8722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const Attribute* attribute() const 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_pAttr; } 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao bool isNeeded() const 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_bNeeded; } 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao void setNeeded() 955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { m_bNeeded = true; } 965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 97a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines bool noExport() const 98a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines { return m_bNoExport; } 99a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines 100a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines void setNoExport() 101a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines { m_bNoExport = true; } 102a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines 1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao off_t fileOffset() const 1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { return m_fileOffset; } 1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao void setFileOffset(off_t pFileOffset) 1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao { m_fileOffset = pFileOffset; } 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 10922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao // ----- memory area ----- // 11022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao void setMemArea(MemoryArea* pMemArea) 11122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { m_pMemArea = pMemArea; } 11222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 11322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool hasMemArea() const 11422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { return (NULL != m_pMemArea); } 11522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 11622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const MemoryArea* memArea() const { return m_pMemArea; } 11722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao MemoryArea* memArea() { return m_pMemArea; } 11822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 11922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao // ----- context ----- // 12022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao void setContext(LDContext* pContext) 12122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { m_pContext = pContext; } 12222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 12322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao bool hasContext() const 12422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao { return (NULL != m_pContext); } 12522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 12622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const LDContext* context() const { return m_pContext; } 12722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDContext* context() { return m_pContext; } 12822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 1295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprivate: 13022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao unsigned int m_Type; 13122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao std::string m_Name; 13222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao sys::fs::Path m_Path; 1335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Attribute *m_pAttr; 1345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao bool m_bNeeded; 135a790f0a8f3175183bea088389b3e4ae41813e192Stephen Hines bool m_bNoExport; 1365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao off_t m_fileOffset; 13722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao MemoryArea* m_pMemArea; 13822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDContext* m_pContext; 1395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 1405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld 14267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 1435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif 1445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 145