root/src/kits/debugger/debug_info/DebuggerImageDebugInfo.h
/*
 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
 * Copyright 2013-2014, Rene Gollent, rene@gollent.com.
 * Distributed under the terms of the MIT License.
 */
#ifndef DEBUGGER_IMAGE_DEBUG_INFO_H
#define DEBUGGER_IMAGE_DEBUG_INFO_H


#include "ImageInfo.h"
#include "SpecificImageDebugInfo.h"


class Architecture;
class DebuggerInterface;
class SymbolInfo;


class DebuggerImageDebugInfo : public SpecificImageDebugInfo {
public:
                                                                DebuggerImageDebugInfo(
                                                                        const ImageInfo& imageInfo,
                                                                        DebuggerInterface* debuggerInterface,
                                                                        Architecture* architecture);
        virtual                                         ~DebuggerImageDebugInfo();

                        status_t                        Init();

        virtual status_t                        GetFunctions(
                                                                        const BObjectList<SymbolInfo, true>& symbols,
                                                                        BObjectList<FunctionDebugInfo>& functions);
        virtual status_t                        GetType(GlobalTypeCache* cache,
                                                                        const BString& name,
                                                                        const TypeLookupConstraints& constraints,
                                                                        Type*& _type);
        virtual bool                            HasType(const BString& name,
                                                                        const TypeLookupConstraints& constraints)
                                                                        const;

        virtual AddressSectionType      GetAddressSectionType(target_addr_t address);
        virtual status_t                        CreateFrame(Image* image,
                                                                        FunctionInstance* functionInstance,
                                                                        CpuState* cpuState,
                                                                        bool getFullFrameInfo,
                                                                        ReturnValueInfoList* returnValueInfos,
                                                                        StackFrame*& _previousFrame,
                                                                        CpuState*& _previousCpuState);
        virtual status_t                        GetStatement(FunctionDebugInfo* function,
                                                                        target_addr_t address,
                                                                        Statement*& _statement);
        virtual status_t                        GetStatementAtSourceLocation(
                                                                        FunctionDebugInfo* function,
                                                                        const SourceLocation& sourceLocation,
                                                                        Statement*& _statement);

        virtual status_t                        GetSourceLanguage(FunctionDebugInfo* function,
                                                                        SourceLanguage*& _language);

        virtual ssize_t                         ReadCode(target_addr_t address, void* buffer,
                                                                        size_t size);

        virtual status_t                        AddSourceCodeInfo(LocatableFile* file,
                                                                        FileSourceCode* sourceCode);

private:
                        ImageInfo                       fImageInfo;
                        DebuggerInterface*      fDebuggerInterface;
                        Architecture*           fArchitecture;
};


#endif  // DEBUGGER_IMAGE_DEBUG_INFO_H