193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao/* 252acbab46d32526a42f9015f175ea9a552426966Shih-wei Liao * Copyright 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 2452acbab46d32526a42f9015f175ea9a552426966Shih-wei Liaoclass Module; 25ca4f96c0f1fcf7a2bdc5a432b751befff149f73dShih-wei Liaoclass IRBuilder; 2652acbab46d32526a42f9015f175ea9a552426966Shih-wei Liaoclass LinkerConfig; 27ca4f96c0f1fcf7a2bdc5a432b751befff149f73dShih-wei Liaoclass Linker; 28f0407796f0c3e16065db7fd61a2b09e27aaac24dShih-wei Liaoclass Input; 2952acbab46d32526a42f9015f175ea9a552426966Shih-wei Liaoclass MemoryArea; 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 LinkerConfig; 4293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 4393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liaoclass Linker { 4493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liaopublic: 4593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode { 4693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kSuccess, 4793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kDoubleConfig, 4893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kDelegateLDInfo, 498fe71dd4cd49c426cafa73ab21ab7a95dd15254aShih-wei Liao kFindNameSpec, 5093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kOpenObjectFile, 51ca4f96c0f1fcf7a2bdc5a432b751befff149f73dShih-wei Liao kOpenMemory, 5293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kNotConfig, 5393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kNotSetUpOutput, 5493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kOpenOutput, 5593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kReadSections, 5693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kReadSymbols, 5793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao kAddAdditionalSymbols, 5852acbab46d32526a42f9015f175ea9a552426966Shih-wei Liao kMaxErrorCode 5993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao }; 6093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 6193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao static const char *GetErrorString(enum ErrorCode pErrCode); 6293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 6393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liaoprivate: 6452acbab46d32526a42f9015f175ea9a552426966Shih-wei Liao const mcld::LinkerConfig *mLDConfig; 6552acbab46d32526a42f9015f175ea9a552426966Shih-wei Liao mcld::Module *mModule; 66ca4f96c0f1fcf7a2bdc5a432b751befff149f73dShih-wei Liao mcld::Linker *mLinker; 67ca4f96c0f1fcf7a2bdc5a432b751befff149f73dShih-wei Liao mcld::IRBuilder *mBuilder; 6893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao std::string mSOName; 69ca4f96c0f1fcf7a2bdc5a432b751befff149f73dShih-wei Liao std::string mOutputPath; 70ca4f96c0f1fcf7a2bdc5a432b751befff149f73dShih-wei Liao int mOutputHandler; 7193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 7293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liaopublic: 7393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao Linker(); 7493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 7593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao Linker(const LinkerConfig& pConfig); 7693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 7793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao ~Linker(); 7893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 7993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode config(const LinkerConfig& pConfig); 8093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 8193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode addNameSpec(const std::string &pNameSpec); 8293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 8393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode addObject(const std::string &pObjectPath); 8493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 8593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode addObject(void* pMemory, size_t pSize); 8693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 8793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode addCode(void* pMemory, size_t pSize); 8893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 8993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode setOutput(const std::string &pPath); 9093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 9193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode setOutput(int pFileHandler); 9293c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 9393c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode link(); 9493c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 9593c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liaoprivate: 9693c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao enum ErrorCode extractFiles(const LinkerConfig& pConfig); 9793c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao}; 9893c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 9993c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao} // end namespace bcc 10093c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao 10193c8832a6916a54d984764bf83a8a77cbae4143bShih-wei Liao#endif // BCC_LINKER_H 102