xenia-canary/src/xenia/cpu/function.h

64 lines
1.8 KiB
C
Raw Normal View History

/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2013 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
2015-03-24 15:25:58 +00:00
#ifndef XENIA_CPU_FUNCTION_H_
#define XENIA_CPU_FUNCTION_H_
2014-07-14 05:28:00 +00:00
#include <memory>
#include <mutex>
#include <vector>
2015-03-24 15:25:58 +00:00
#include "xenia/cpu/debug_info.h"
#include "xenia/cpu/thread_state.h"
namespace xe {
namespace cpu {
2013-12-23 06:03:06 +00:00
class Breakpoint;
class FunctionInfo;
class Function {
public:
Function(FunctionInfo* symbol_info);
virtual ~Function();
uint32_t address() const { return address_; }
FunctionInfo* symbol_info() const { return symbol_info_; }
2014-07-14 05:28:00 +00:00
DebugInfo* debug_info() const { return debug_info_.get(); }
void set_debug_info(std::unique_ptr<DebugInfo> debug_info) {
debug_info_ = std::move(debug_info);
}
2013-12-23 06:03:06 +00:00
int AddBreakpoint(Breakpoint* breakpoint);
int RemoveBreakpoint(Breakpoint* breakpoint);
int Call(ThreadState* thread_state, uint32_t return_address);
protected:
Breakpoint* FindBreakpoint(uint32_t address);
2013-12-23 06:03:06 +00:00
virtual int AddBreakpointImpl(Breakpoint* breakpoint) { return 0; }
virtual int RemoveBreakpointImpl(Breakpoint* breakpoint) { return 0; }
virtual int CallImpl(ThreadState* thread_state, uint32_t return_address) = 0;
protected:
uint32_t address_;
FunctionInfo* symbol_info_;
2014-07-14 05:28:00 +00:00
std::unique_ptr<DebugInfo> debug_info_;
2013-12-23 06:03:06 +00:00
// TODO(benvanik): move elsewhere? DebugData?
std::mutex lock_;
2013-12-23 06:03:06 +00:00
std::vector<Breakpoint*> breakpoints_;
};
} // namespace cpu
} // namespace xe
2015-03-24 15:25:58 +00:00
#endif // XENIA_CPU_FUNCTION_H_