10f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang/*
20f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang * Copyright 2012, The Android Open Source Project
30f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang *
40f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang * Licensed under the Apache License, Version 2.0 (the "License");
50f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang * you may not use this file except in compliance with the License.
60f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang * You may obtain a copy of the License at
70f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang *
80f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang *     http://www.apache.org/licenses/LICENSE-2.0
90f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang *
100f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang * Unless required by applicable law or agreed to in writing, software
110f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang * distributed under the License is distributed on an "AS IS" BASIS,
120f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang * See the License for the specific language governing permissions and
140f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang * limitations under the License.
150f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang */
160f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang
170f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang#ifndef BCC_EXECUTION_ENGINE_ELF_OBJECT_LOADER_IMPL_H
180f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang#define BCC_EXECUTION_ENGINE_ELF_OBJECT_LOADER_IMPL_H
190f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang
200f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang#include "ObjectLoaderImpl.h"
210f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang
220f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang// ELFObject and ELFSectionSymTab comes from librsloader. They're both
230f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang// defined under global scope without a namespace enclosed.
240f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Changtemplate <unsigned Bitwidth>
250f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Changclass ELFObject;
260f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang
270f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Changtemplate <unsigned Bitwidth>
280f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Changclass ELFSectionSymTab;
290f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang
300f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Changnamespace bcc {
310f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang
320f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Changclass ELFObjectLoaderImpl : public ObjectLoaderImpl {
330f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Changprivate:
340f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang  ELFObject<32> *mObject;
350f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang  ELFSectionSymTab<32> *mSymTab;
360f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang
370f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Changpublic:
380f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang  ELFObjectLoaderImpl() : ObjectLoaderImpl(), mObject(NULL), mSymTab(NULL) { }
390f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang
400f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang  virtual bool load(const void *pMem, size_t pMemSize);
410f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang
420f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang  virtual bool relocate(SymbolResolverInterface &pResolver);
430f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang
440f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang  virtual bool prepareDebugImage(void *pDebugImg, size_t pDebugImgSize);
450f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang
460f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang  virtual void *getSymbolAddress(const char *pName) const;
470f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang
489795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao  virtual size_t getSymbolSize(const char *pName) const;
499795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao
509795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao  virtual bool getSymbolNameList(android::Vector<const char *>& pNameList,
519795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao                                 ObjectLoader::SymbolType pType) const;
520f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang  ~ELFObjectLoaderImpl();
530f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang};
540f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang
550f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang} // end namespace bcc
560f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang
570f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang#endif // BCC_EXECUTION_ENGINE_ELF_OBJECT_LOADER_IMPL_H
58