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_OBJECT_LOADER_H 180f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang#define BCC_EXECUTION_ENGINE_OBJECT_LOADER_H 190f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang 200f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang#include <cstddef> 210f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang 229795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao#include "bcc/Support/Log.h" 239795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao 249795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao#include <utils/Vector.h> 259795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao 260f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Changnamespace bcc { 270f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang 280f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Changclass FileBase; 290f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Changclass ObjectLoaderImpl; 300f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Changclass SymbolResolverInterface; 310f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang 320f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Changclass ObjectLoader { 339795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liaopublic: 349795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao enum SymbolType { 359795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao // TODO: More types. 369795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao kFunctionType, 379795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao kUnknownType, 389795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao }; 399795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao 400f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Changprivate: 410f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang ObjectLoaderImpl *mImpl; 420f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang 430f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang void *mDebugImage; 440f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang 450f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang ObjectLoader() : mImpl(NULL), mDebugImage(0) { } 460f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang 470f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Changpublic: 480f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang // Load from a in-memory object. pName is a descriptive name of this memory. 490f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang static ObjectLoader *Load(void *pMemStart, size_t pMemSize, const char *pName, 500f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang SymbolResolverInterface &pResolver, 510f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang bool pEnableGDBDebug); 520f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang 530f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang // Load from a file. 540f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang static ObjectLoader *Load(FileBase &pFile, 550f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang SymbolResolverInterface &pResolver, 560f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang bool pEnableGDBDebug); 570f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang 580f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang void *getSymbolAddress(const char *pName) const; 590f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang 609795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao size_t getSymbolSize(const char *pName) const; 619795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao 629795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao // Get the symbol name where the symbol is of the type pType. If kUnknownType 639795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao // is given, it returns all symbols' names in the object. 649795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao bool getSymbolNameList(android::Vector<const char *>& pNameList, 659795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao SymbolType pType = kUnknownType) const; 669795754a34648d962f00ced51183b759b9eaf2b2Shih-wei Liao 670f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang ~ObjectLoader(); 680f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang}; 690f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang 700f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang} // namespace bcc 710f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang 720f9cad99f9e3c4db42e9836cc0e316c3a84448f5Zonr Chang#endif // BCC_EXECUTION_ENGINE_OBJECT_LOADER_H 73