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