You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
2.9 KiB
124 lines
2.9 KiB
//===- Input.h ------------------------------------------------------------===//
|
|
//
|
|
// The MCLinker Project
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Input class inherits MCLDFile, which is used to represent a input file
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#ifndef MCLD_MC_INPUT_H_
|
|
#define MCLD_MC_INPUT_H_
|
|
|
|
#include "mcld/Support/Path.h"
|
|
|
|
namespace mcld {
|
|
|
|
class AttributeProxy;
|
|
class Attribute;
|
|
class InputFactory;
|
|
class LDContext;
|
|
class MemoryArea;
|
|
|
|
/** \class Input
|
|
* \brief Input provides the information of a input file.
|
|
*/
|
|
class Input {
|
|
friend class InputFactory;
|
|
|
|
public:
|
|
enum Type {
|
|
Unknown,
|
|
Binary,
|
|
Object,
|
|
Exec,
|
|
DynObj,
|
|
CoreFile,
|
|
Script,
|
|
Archive,
|
|
External
|
|
};
|
|
|
|
public:
|
|
explicit Input(llvm::StringRef pName);
|
|
|
|
Input(llvm::StringRef pName, const AttributeProxy& pAttr);
|
|
|
|
Input(llvm::StringRef pName,
|
|
const sys::fs::Path& pPath,
|
|
unsigned int pType = Unknown,
|
|
off_t pFileOffset = 0);
|
|
|
|
Input(llvm::StringRef pName,
|
|
const sys::fs::Path& pPath,
|
|
const AttributeProxy& pAttr,
|
|
unsigned int pType = Unknown,
|
|
off_t pFileOffset = 0);
|
|
|
|
~Input();
|
|
|
|
const std::string& name() const { return m_Name; }
|
|
|
|
void setName(const std::string& pName) { m_Name = pName; }
|
|
|
|
const sys::fs::Path& path() const { return m_Path; }
|
|
|
|
void setPath(const sys::fs::Path& pPath) { m_Path = pPath; }
|
|
|
|
void setType(unsigned int pType) { m_Type = pType; }
|
|
|
|
unsigned int type() const { return m_Type; }
|
|
|
|
bool isRecognized() const { return (m_Type != Unknown); }
|
|
|
|
bool hasAttribute() const { return (m_pAttr != NULL); }
|
|
|
|
const Attribute* attribute() const { return m_pAttr; }
|
|
|
|
bool isNeeded() const { return m_bNeeded; }
|
|
|
|
void setNeeded() { m_bNeeded = true; }
|
|
|
|
bool noExport() const { return m_bNoExport; }
|
|
|
|
void setNoExport() { m_bNoExport = true; }
|
|
|
|
off_t fileOffset() const { return m_fileOffset; }
|
|
|
|
void setFileOffset(off_t pFileOffset) { m_fileOffset = pFileOffset; }
|
|
|
|
// ----- memory area ----- //
|
|
void setMemArea(MemoryArea* pMemArea) { m_pMemArea = pMemArea; }
|
|
|
|
bool hasMemArea() const { return (m_pMemArea != NULL); }
|
|
|
|
const MemoryArea* memArea() const { return m_pMemArea; }
|
|
MemoryArea* memArea() { return m_pMemArea; }
|
|
|
|
// ----- context ----- //
|
|
void setContext(LDContext* pContext) { m_pContext = pContext; }
|
|
|
|
bool hasContext() const { return (m_pContext != NULL); }
|
|
|
|
const LDContext* context() const { return m_pContext; }
|
|
LDContext* context() { return m_pContext; }
|
|
|
|
private:
|
|
unsigned int m_Type;
|
|
std::string m_Name;
|
|
sys::fs::Path m_Path;
|
|
Attribute* m_pAttr;
|
|
bool m_bNeeded;
|
|
bool m_bNoExport;
|
|
off_t m_fileOffset;
|
|
MemoryArea* m_pMemArea;
|
|
LDContext* m_pContext;
|
|
};
|
|
|
|
} // namespace mcld
|
|
|
|
#endif // MCLD_MC_INPUT_H_
|