167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao//===- TestLinker.h -------------------------------------------------------===// 267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao// 367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao// The MCLinker Project 467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao// 567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao// This file is distributed under the University of Illinois Open Source 667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao// License. See LICENSE.TXT for details. 767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao// 867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao//===----------------------------------------------------------------------===// 967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#ifndef MCLD_TEST_LINKER_H 1067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#define MCLD_TEST_LINKER_H 1167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 1267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <gtest.h> 1367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 1467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <string> 1567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <list> 1667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 1767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <mcld/MC/MCLDDriver.h> 1867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <mcld/MC/MCLinker.h> 1967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <mcld/LD/DiagnosticPrinter.h> 2067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <mcld/LD/DiagnosticLineInfo.h> 2167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <mcld/Support/TargetRegistry.h> 2267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <mcld/Support/Path.h> 2367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 2467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaonamespace mcld { 2567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 2667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaoclass MCLDInfo; 2767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaoclass TargetLDBackend; 2867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaoclass RegionFactory; 2967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 3067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaonamespace test 3167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao{ 3267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 3367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaoclass TestLinker 3467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao{ 3567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaopublic: 3667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao TestLinker(); 3767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 3867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao ~TestLinker(); 3967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 4067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao bool initialize(const std::string &pTriple); 4167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 4267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao MCLDInfo* config() { 4367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao assert(NULL != m_pInfo); 4467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao return m_pInfo; 4567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao } 4667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 4767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao const MCLDInfo* config() const { 4867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao assert(NULL != m_pInfo); 4967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao return m_pInfo; 5067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao } 5167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 52cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao // ----- search directories ----- // 53cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao void addSearchDir(const std::string &pPath); 54cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 55cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao void setSysRoot(const mcld::sys::fs::Path &pPath); 56cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 57cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao // ----- input operators ----- // 5867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao void addObject(const std::string &pPath); 5967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 6067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao void addObject(const mcld::sys::fs::Path &pPath) 6167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao { addObject(pPath.native()); } 6267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 6367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao void addObject(void* pMemBuffer, size_t pSize); 6467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 6567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao void addObject(int pFileHandler); 6667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 6767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao void addNameSpec(const std::string &pNameSpec); 6867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 6967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao bool setOutput(const std::string &pPath); 7067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 7167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao bool setOutput(int pFileHandler); 7267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 73cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao bool setOutput(const sys::fs::Path &pPath); 74cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao 7567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao /// getDriver 7667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao MCLDDriver* getDriver() { 7767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao assert(NULL != m_pDriver); 7867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao return m_pDriver; 7967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao } 8067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 8167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao /// getDriver 8267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao const MCLDDriver* getDriver() const { 8367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao assert(NULL != m_pDriver); 8467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao return m_pDriver; 8567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao } 8667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 8767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao /// getLinker 8867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao MCLinker* getLinker() { 8967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao assert(NULL != m_pDriver); 9067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao return m_pDriver->getLinker(); 9167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao } 9267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 9367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao /// getLinker 9467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao const MCLinker* getLinker() const { 9567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao assert(NULL != m_pDriver); 9667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao return m_pDriver->getLinker(); 9767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao } 9867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 9967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaoprivate: 10067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao void advanceRoot(); 10167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 10267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaoprivate: 10367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao const mcld::Target* m_pTarget; 10467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao mcld::MCLDDriver *m_pDriver; 10567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao mcld::MCLDInfo* m_pInfo; 10667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao mcld::DiagnosticLineInfo* m_pDiagLineInfo; 10767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao mcld::DiagnosticPrinter* m_pDiagPrinter; 10867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao mcld::TargetLDBackend* m_pBackend; 10967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao mcld::InputTree::iterator m_Root; 11067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao mcld::RegionFactory* m_pRegionFactory; 111cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao mcld::MemoryAreaFactory* m_pMemAreaFactory; 11267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 11367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao std::list<mcld::FileHandle*> m_FileHandleList; 11467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao std::list<mcld::MemoryArea*> m_MemAreaList; 11567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 11667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao}; 11767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 11867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao} // namespace of test 11967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao} // namespace of mcld 12067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#endif 12167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 122