1/* 2 * Copyright 2016, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef ELF_SYMBOL_LOOKUP_H 6#define ELF_SYMBOL_LOOKUP_H 7 8 9#include <Referenceable.h> 10 11#include "ElfFile.h" 12#include "SymbolInfo.h" 13 14 15class ElfSymbolLookupSource : public BReferenceable { 16public: 17 virtual ssize_t Read(uint64 address, void* buffer, 18 size_t size) = 0; 19}; 20 21 22class ElfSymbolLookup { 23public: 24 static const uint32 kGetSymbolCountFromHash = ~(uint32)0; 25 26public: 27 virtual ~ElfSymbolLookup(); 28 29 static status_t Create(ElfSymbolLookupSource* source, 30 uint64 symbolTable, uint64 symbolHash, 31 uint64 stringTable, uint32 symbolCount, 32 uint32 symbolTableEntrySize, 33 uint64 textDelta, bool is64Bit, 34 bool swappedByteOrder, bool cacheSource, 35 ElfSymbolLookup*& _lookup); 36 37 virtual status_t Init(bool cacheSource) = 0; 38 virtual status_t NextSymbolInfo(uint32& index, 39 SymbolInfo& _info) = 0; 40 virtual status_t GetSymbolInfo(const char* name, 41 uint32 symbolType, SymbolInfo& _info) = 0; 42}; 43 44 45#endif // ELF_SYMBOL_LOOKUP_H 46