193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao/* 293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * Copyright 2010-2012, The Android Open Source Project 393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * 493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * Licensed under the Apache License, Version 2.0 (the "License"); 593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * you may not use this file except in compliance with the License. 693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * You may obtain a copy of the License at 793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * 893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * http://www.apache.org/licenses/LICENSE-2.0 993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * 1093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * Unless required by applicable law or agreed to in writing, software 1193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * distributed under the License is distributed on an "AS IS" BASIS, 1293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * See the License for the specific language governing permissions and 1493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao * limitations under the License. 1593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao */ 1693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 1793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao#ifndef BCC_LINKER_H 1893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao#define BCC_LINKER_H 1993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 20f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liao#include <string> 21f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liao 22f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liaonamespace mcld { 23f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liao 24f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liaoclass TargetLDBackend; 25f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liaoclass MCLDDriver; 26f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liaoclass MemoryFactory; 27f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liaoclass MCLDInfo; 28f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liaoclass TreeIteratorBase; 29f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liaoclass Input; 30f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liao 31f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liaonamespace sys { namespace fs { 32f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liao 33f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liaoclass Path; 34f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liao 35f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liao} } // end namespace sys::fs 36f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liao 37f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liao} // end namespace mcld 3893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 3993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liaonamespace bcc { 4093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 4193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liaoclass MemoryFactory; 4293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liaoclass LinkerConfig; 4393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 4493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liaoclass Linker { 4593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liaopublic: 4693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode { 4793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kSuccess, 4893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kDoubleConfig, 4993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kCreateBackend, 5093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kDelegateLDInfo, 518fe71dd4cd49c426cafa73ab21ab7a95dd15254aShih-wei Liao kFindNameSpec, 5293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kOpenNameSpec, 5393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kOpenObjectFile, 5493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kNotConfig, 5593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kNotSetUpOutput, 5693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kOpenOutput, 5793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kReadSections, 5893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kReadSymbols, 5993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kAddAdditionalSymbols, 6093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kMaxErrorCode, 6193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao }; 6293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 6393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao static const char *GetErrorString(enum ErrorCode pErrCode); 6493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 6593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liaoprivate: 6693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao mcld::TargetLDBackend *mBackend; 6793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao mcld::MCLDDriver *mDriver; 6893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao MemoryFactory *mMemAreaFactory; 6993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao mcld::MCLDInfo *mLDInfo; 70f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liao mcld::TreeIteratorBase *mRoot; 7193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao bool mShared; 7293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao std::string mSOName; 7393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 7493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liaopublic: 7593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao Linker(); 7693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 7793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao Linker(const LinkerConfig& pConfig); 7893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 7993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao ~Linker(); 8093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 8193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode config(const LinkerConfig& pConfig); 8293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 8393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode addNameSpec(const std::string &pNameSpec); 8493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 8593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode addObject(const std::string &pObjectPath); 8693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 8793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode addObject(void* pMemory, size_t pSize); 8893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 8993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode addCode(void* pMemory, size_t pSize); 9093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 9193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode setOutput(const std::string &pPath); 9293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 9393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode setOutput(int pFileHandler); 9493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 9593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode link(); 9693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 9793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liaoprivate: 9893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode extractFiles(const LinkerConfig& pConfig); 9993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 10093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode openFile(const mcld::sys::fs::Path& pPath, 10193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode pCode, 10293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao mcld::Input& pInput); 10393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 10493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao void advanceRoot(); 10593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao}; 10693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 10793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao} // end namespace bcc 10893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 10993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao#endif // BCC_LINKER_H 110