64 lines
1.5 KiB
C
64 lines
1.5 KiB
C
|
// Copyright 2020 Dolphin Emulator Project
|
||
|
// Licensed under GPLv2+
|
||
|
// Refer to the license.txt file included.
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#include <array>
|
||
|
#include <memory>
|
||
|
#include <optional>
|
||
|
#include <string>
|
||
|
#include <vector>
|
||
|
|
||
|
#include "Common/CommonTypes.h"
|
||
|
|
||
|
namespace Common::Debug
|
||
|
{
|
||
|
struct PartialContext
|
||
|
{
|
||
|
std::optional<std::array<u32, 32>> gpr;
|
||
|
std::optional<u32> cr;
|
||
|
std::optional<u32> lr;
|
||
|
std::optional<u32> ctr;
|
||
|
std::optional<u32> xer;
|
||
|
std::optional<std::array<double, 32>> fpr;
|
||
|
std::optional<u64> fpscr;
|
||
|
std::optional<u32> srr0;
|
||
|
std::optional<u32> srr1;
|
||
|
std::optional<u16> dummy;
|
||
|
std::optional<u16> state;
|
||
|
std::optional<std::array<u32, 8>> gqr;
|
||
|
std::optional<std::array<double, 32>> psf;
|
||
|
};
|
||
|
|
||
|
class ThreadView
|
||
|
{
|
||
|
public:
|
||
|
virtual ~ThreadView() = default;
|
||
|
|
||
|
enum class API
|
||
|
{
|
||
|
OSThread, // Nintendo SDK thread
|
||
|
LWPThread, // devkitPro libogc thread
|
||
|
};
|
||
|
|
||
|
virtual PartialContext GetContext() const = 0;
|
||
|
virtual u32 GetAddress() const = 0;
|
||
|
virtual u16 GetState() const = 0;
|
||
|
virtual bool IsSuspended() const = 0;
|
||
|
virtual bool IsDetached() const = 0;
|
||
|
virtual s32 GetBasePriority() const = 0;
|
||
|
virtual s32 GetEffectivePriority() const = 0;
|
||
|
virtual u32 GetStackStart() const = 0;
|
||
|
virtual u32 GetStackEnd() const = 0;
|
||
|
virtual std::size_t GetStackSize() const = 0;
|
||
|
virtual s32 GetErrno() const = 0;
|
||
|
// Implementation specific, used to store arbitrary data
|
||
|
virtual std::string GetSpecific() const = 0;
|
||
|
virtual bool IsValid() const = 0;
|
||
|
};
|
||
|
|
||
|
using Threads = std::vector<std::unique_ptr<ThreadView>>;
|
||
|
|
||
|
} // namespace Common::Debug
|