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//===----------------------------------------------------------------------===// 1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#ifndef MCLD_MC_INPUT_H_ 1437b74a387bb3993387029859c2d9d051c41c724eStephen Hines#define MCLD_MC_INPUT_H_ 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1637b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/Path.h" 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaonamespace mcld { 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass AttributeProxy; 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass Attribute; 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass InputFactory; 2322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liaoclass LDContext; 2437b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass MemoryArea; 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class Input 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * \brief Input provides the information of a input file. 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */ 2937b74a387bb3993387029859c2d9d051c41c724eStephen Hinesclass Input { 3037b74a387bb3993387029859c2d9d051c41c724eStephen Hines friend class InputFactory; 3137b74a387bb3993387029859c2d9d051c41c724eStephen Hines 3237b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 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 4537b74a387bb3993387029859c2d9d051c41c724eStephen Hines public: 4622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao explicit Input(llvm::StringRef pName); 4722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 4837b74a387bb3993387029859c2d9d051c41c724eStephen Hines Input(llvm::StringRef pName, const AttributeProxy& pAttr); 4922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 5022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao Input(llvm::StringRef pName, 5122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const sys::fs::Path& pPath, 5222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao unsigned int pType = Unknown, 5322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao off_t pFileOffset = 0); 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Input(llvm::StringRef pName, 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const sys::fs::Path& pPath, 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const AttributeProxy& pAttr, 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao unsigned int pType = Unknown, 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao off_t pFileOffset = 0); 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ~Input(); 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 6337b74a387bb3993387029859c2d9d051c41c724eStephen Hines const std::string& name() const { return m_Name; } 6422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6537b74a387bb3993387029859c2d9d051c41c724eStephen Hines void setName(const std::string& pName) { m_Name = pName; } 6622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6737b74a387bb3993387029859c2d9d051c41c724eStephen Hines const sys::fs::Path& path() const { return m_Path; } 6822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 6937b74a387bb3993387029859c2d9d051c41c724eStephen Hines void setPath(const sys::fs::Path& pPath) { m_Path = pPath; } 7022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7137b74a387bb3993387029859c2d9d051c41c724eStephen Hines void setType(unsigned int pType) { m_Type = pType; } 7222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7337b74a387bb3993387029859c2d9d051c41c724eStephen Hines unsigned int type() const { return m_Type; } 7422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7537b74a387bb3993387029859c2d9d051c41c724eStephen Hines bool isRecognized() const { return (m_Type != Unknown); } 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 7737b74a387bb3993387029859c2d9d051c41c724eStephen Hines bool hasAttribute() const { return (m_pAttr != NULL); } 7822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 7937b74a387bb3993387029859c2d9d051c41c724eStephen Hines const Attribute* attribute() const { return m_pAttr; } 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 8137b74a387bb3993387029859c2d9d051c41c724eStephen Hines bool isNeeded() const { return m_bNeeded; } 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 8337b74a387bb3993387029859c2d9d051c41c724eStephen Hines void setNeeded() { m_bNeeded = true; } 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 8537b74a387bb3993387029859c2d9d051c41c724eStephen Hines bool noExport() const { return m_bNoExport; } 860dea6bc96bb52346737966839ac68644f7939f58Stephen Hines 8737b74a387bb3993387029859c2d9d051c41c724eStephen Hines void setNoExport() { m_bNoExport = true; } 880dea6bc96bb52346737966839ac68644f7939f58Stephen Hines 8937b74a387bb3993387029859c2d9d051c41c724eStephen Hines off_t fileOffset() const { return m_fileOffset; } 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 9137b74a387bb3993387029859c2d9d051c41c724eStephen Hines void setFileOffset(off_t pFileOffset) { m_fileOffset = pFileOffset; } 925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 9322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao // ----- memory area ----- // 9437b74a387bb3993387029859c2d9d051c41c724eStephen Hines void setMemArea(MemoryArea* pMemArea) { m_pMemArea = pMemArea; } 9522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 9637b74a387bb3993387029859c2d9d051c41c724eStephen Hines bool hasMemArea() const { return (m_pMemArea != NULL); } 9722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 9822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const MemoryArea* memArea() const { return m_pMemArea; } 9937b74a387bb3993387029859c2d9d051c41c724eStephen Hines MemoryArea* memArea() { return m_pMemArea; } 10022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 10122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao // ----- context ----- // 10237b74a387bb3993387029859c2d9d051c41c724eStephen Hines void setContext(LDContext* pContext) { m_pContext = pContext; } 10322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 10437b74a387bb3993387029859c2d9d051c41c724eStephen Hines bool hasContext() const { return (m_pContext != NULL); } 10522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 10622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao const LDContext* context() const { return m_pContext; } 10737b74a387bb3993387029859c2d9d051c41c724eStephen Hines LDContext* context() { return m_pContext; } 10822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 10937b74a387bb3993387029859c2d9d051c41c724eStephen Hines private: 11022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao unsigned int m_Type; 11122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao std::string m_Name; 11222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao sys::fs::Path m_Path; 11337b74a387bb3993387029859c2d9d051c41c724eStephen Hines Attribute* m_pAttr; 1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao bool m_bNeeded; 1150dea6bc96bb52346737966839ac68644f7939f58Stephen Hines bool m_bNoExport; 1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao off_t m_fileOffset; 11722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao MemoryArea* m_pMemArea; 11822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao LDContext* m_pContext; 1195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao}; 1205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 12137b74a387bb3993387029859c2d9d051c41c724eStephen Hines} // namespace mcld 1225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 12337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#endif // MCLD_MC_INPUT_H_ 124