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