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