1affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===- Linker.h -----------------------------------------------------------===// 2affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// 3affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// The MCLinker Project 4affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// 5affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// This file is distributed under the University of Illinois Open Source 6affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// License. See LICENSE.TXT for details. 7affc150dc44fab1911775a49636d0ce85333b634Zonr Chang// 8affc150dc44fab1911775a49636d0ce85333b634Zonr Chang//===----------------------------------------------------------------------===// 967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 10affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#ifndef ALONE_LINKER_H 11affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#define ALONE_LINKER_H 12affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 1367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao#include <string> 1467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 1567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaonamespace mcld { 1667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 1767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaoclass TargetLDBackend; 1867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaoclass MCLDDriver; 1967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaoclass MemoryFactory; 2067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaoclass MCLDInfo; 2167e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaoclass TreeIteratorBase; 2267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaoclass Input; 2367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 2467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaonamespace sys { namespace fs { 2567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 2667e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liaoclass Path; 2767e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 2867e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao} } // end namespace sys::fs 2967e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao 3067e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao} // end namespace mcld 31affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 32affc150dc44fab1911775a49636d0ce85333b634Zonr Changnamespace alone { 33affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 34affc150dc44fab1911775a49636d0ce85333b634Zonr Changclass MemoryFactory; 35affc150dc44fab1911775a49636d0ce85333b634Zonr Changclass LinkerConfig; 36affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 37affc150dc44fab1911775a49636d0ce85333b634Zonr Changclass Linker { 38affc150dc44fab1911775a49636d0ce85333b634Zonr Changpublic: 39affc150dc44fab1911775a49636d0ce85333b634Zonr Chang enum ErrorCode { 40affc150dc44fab1911775a49636d0ce85333b634Zonr Chang kSuccess, 41affc150dc44fab1911775a49636d0ce85333b634Zonr Chang kDoubleConfig, 42affc150dc44fab1911775a49636d0ce85333b634Zonr Chang kCreateBackend, 43affc150dc44fab1911775a49636d0ce85333b634Zonr Chang kDelegateLDInfo, 4467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao kFindNameSpec, 45affc150dc44fab1911775a49636d0ce85333b634Zonr Chang kOpenNameSpec, 46affc150dc44fab1911775a49636d0ce85333b634Zonr Chang kOpenObjectFile, 47affc150dc44fab1911775a49636d0ce85333b634Zonr Chang kNotConfig, 48affc150dc44fab1911775a49636d0ce85333b634Zonr Chang kNotSetUpOutput, 49affc150dc44fab1911775a49636d0ce85333b634Zonr Chang kOpenOutput, 50affc150dc44fab1911775a49636d0ce85333b634Zonr Chang kReadSections, 51affc150dc44fab1911775a49636d0ce85333b634Zonr Chang kReadSymbols, 52affc150dc44fab1911775a49636d0ce85333b634Zonr Chang kAddAdditionalSymbols, 53affc150dc44fab1911775a49636d0ce85333b634Zonr Chang kMaxErrorCode, 54affc150dc44fab1911775a49636d0ce85333b634Zonr Chang }; 55affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 56affc150dc44fab1911775a49636d0ce85333b634Zonr Chang static const char *GetErrorString(enum ErrorCode pErrCode); 57affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 58affc150dc44fab1911775a49636d0ce85333b634Zonr Changprivate: 59affc150dc44fab1911775a49636d0ce85333b634Zonr Chang mcld::TargetLDBackend *mBackend; 60affc150dc44fab1911775a49636d0ce85333b634Zonr Chang mcld::MCLDDriver *mDriver; 61affc150dc44fab1911775a49636d0ce85333b634Zonr Chang MemoryFactory *mMemAreaFactory; 6267e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao mcld::MCLDInfo *mLDInfo; 6367e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao mcld::TreeIteratorBase *mRoot; 6467e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao bool mShared; 6567e37f1be98c926645219cfb47fab9e90d8c725cShih-wei Liao std::string mSOName; 66affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 67affc150dc44fab1911775a49636d0ce85333b634Zonr Changpublic: 68affc150dc44fab1911775a49636d0ce85333b634Zonr Chang Linker(); 69affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 70affc150dc44fab1911775a49636d0ce85333b634Zonr Chang Linker(const LinkerConfig& pConfig); 71affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 72affc150dc44fab1911775a49636d0ce85333b634Zonr Chang ~Linker(); 73affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 74affc150dc44fab1911775a49636d0ce85333b634Zonr Chang enum ErrorCode config(const LinkerConfig& pConfig); 75affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 76affc150dc44fab1911775a49636d0ce85333b634Zonr Chang enum ErrorCode addNameSpec(const std::string &pNameSpec); 77affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 78affc150dc44fab1911775a49636d0ce85333b634Zonr Chang enum ErrorCode addObject(const std::string &pObjectPath); 79affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 80affc150dc44fab1911775a49636d0ce85333b634Zonr Chang enum ErrorCode addObject(void* pMemory, size_t pSize); 81affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 82affc150dc44fab1911775a49636d0ce85333b634Zonr Chang enum ErrorCode addCode(void* pMemory, size_t pSize); 83affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 84affc150dc44fab1911775a49636d0ce85333b634Zonr Chang enum ErrorCode setOutput(const std::string &pPath); 85affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 86affc150dc44fab1911775a49636d0ce85333b634Zonr Chang enum ErrorCode setOutput(int pFileHandler); 87affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 88affc150dc44fab1911775a49636d0ce85333b634Zonr Chang enum ErrorCode link(); 89affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 90affc150dc44fab1911775a49636d0ce85333b634Zonr Changprivate: 91affc150dc44fab1911775a49636d0ce85333b634Zonr Chang enum ErrorCode extractFiles(const LinkerConfig& pConfig); 92affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 93affc150dc44fab1911775a49636d0ce85333b634Zonr Chang enum ErrorCode openFile(const mcld::sys::fs::Path& pPath, 94affc150dc44fab1911775a49636d0ce85333b634Zonr Chang enum ErrorCode pCode, 95affc150dc44fab1911775a49636d0ce85333b634Zonr Chang mcld::Input& pInput); 96affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 97affc150dc44fab1911775a49636d0ce85333b634Zonr Chang void advanceRoot(); 98affc150dc44fab1911775a49636d0ce85333b634Zonr Chang}; 99affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 100affc150dc44fab1911775a49636d0ce85333b634Zonr Chang} // end namespace alone 101affc150dc44fab1911775a49636d0ce85333b634Zonr Chang 102affc150dc44fab1911775a49636d0ce85333b634Zonr Chang#endif // ALONE_LINKER_H 103