MachThreadContext_x86_64.h   [plain text]


//===-- MachThreadContext_x86_64.h ------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef liblldb_MachThreadContext_x86_64_h_
#define liblldb_MachThreadContext_x86_64_h_

#if defined (__i386__) || defined (__x86_64__)

#include "MachThreadContext.h"
#include "RegisterContextMach_x86_64.h"

class ThreadMacOSX;

class MachThreadContext_x86_64 : public MachThreadContext
{
public:
    static MachThreadContext*
    Create(const lldb_private::ArchSpec &arch_spec, ThreadMacOSX &thread);

    // Class init function
    static void
    Initialize();

    // Instance init function
    void
    InitializeInstance();

    MachThreadContext_x86_64 (ThreadMacOSX &thread);

    virtual
    ~MachThreadContext_x86_64();

    virtual lldb::RegisterContextSP
    CreateRegisterContext (lldb_private::StackFrame *frame) const;

    virtual void
    ThreadWillResume ();

    virtual bool
    ShouldStop ();

    virtual void
    RefreshStateAfterStop ();

    virtual bool
    NotifyException (MachException::Data& exc);

    virtual size_t
    GetStackFrameData (lldb_private::StackFrame *first_frame, std::vector<std::pair<lldb::addr_t, lldb::addr_t> >& fp_pc_pairs);

protected:
//    kern_return_t EnableHardwareSingleStep (bool enable);
    uint32_t m_flags_reg;
private:
    DISALLOW_COPY_AND_ASSIGN (MachThreadContext_x86_64);
};

//#if defined (__x86_64__)
//typedef MachThreadContext_x86_64    DNBArch;
//#endif

#endif    // defined (__i386__) || defined (__x86_64__)
#endif    // #ifndef liblldb_MachThreadContext_x86_64_h_