1/*
2 * Copyright 2012, Rene Gollent, rene@gollent.com.
3 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
4 * Distributed under the terms of the MIT License.
5 */
6#ifndef DWARF_STACK_FRAME_DEBUG_INFO_H
7#define DWARF_STACK_FRAME_DEBUG_INFO_H
8
9
10#include <image.h>
11#include <String.h>
12
13#include "StackFrameDebugInfo.h"
14
15
16class CompilationUnit;
17class CpuState;
18class DIEFormalParameter;
19class DIESubprogram;
20class DIEType;
21class DIEVariable;
22class DwarfFile;
23class DwarfTargetInterface;
24class DwarfTypeContext;
25class DwarfTypeFactory;
26class FunctionID;
27class GlobalTypeCache;
28class GlobalTypeLookup;
29struct LocationDescription;
30class ObjectID;
31class RegisterMap;
32class Variable;
33
34
35class DwarfStackFrameDebugInfo : public StackFrameDebugInfo {
36public:
37								DwarfStackFrameDebugInfo(
38									Architecture* architecture,
39									image_id imageID, DwarfFile* file,
40									CompilationUnit* compilationUnit,
41									DIESubprogram* subprogramEntry,
42									GlobalTypeLookup* typeLookup,
43									GlobalTypeCache* typeCache,
44									target_addr_t instructionPointer,
45									target_addr_t framePointer,
46									target_addr_t relocationDelta,
47									DwarfTargetInterface* targetInterface,
48									RegisterMap* fromDwarfRegisterMap);
49								~DwarfStackFrameDebugInfo();
50
51			status_t			Init();
52
53			status_t			CreateParameter(FunctionID* functionID,
54									DIEFormalParameter* parameterEntry,
55									Variable*& _parameter);
56									// returns reference
57			status_t			CreateLocalVariable(FunctionID* functionID,
58									DIEVariable* variableEntry,
59									Variable*& _variable);
60									// returns reference
61			status_t			CreateReturnValue(FunctionID* functionID,
62									DIEType* returnType,
63									ValueLocation* location,
64									CpuState* state,
65									Variable*& _variable);
66									// returns reference
67
68private:
69			struct DwarfFunctionParameterID;
70			struct DwarfLocalVariableID;
71			struct DwarfReturnValueID;
72
73private:
74			status_t			_CreateVariable(ObjectID* id,
75									const BString& name, DIEType* typeEntry,
76									LocationDescription* locationDescription,
77									Variable*& _variable);
78
79	template<typename EntryType>
80	static	DIEType*			_GetDIEType(EntryType* entry);
81
82private:
83			DwarfTypeContext*	fTypeContext;
84			GlobalTypeLookup*	fTypeLookup;
85			GlobalTypeCache*	fTypeCache;
86			DwarfTypeFactory*	fTypeFactory;
87};
88
89
90#endif	// DWARF_STACK_FRAME_DEBUG_INFO_H
91