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