ReXGlue SDK
Loading...
Searching...
No Matches
exception_handler.h File Reference
#include <functional>
#include <vector>
#include <rex/assert.h>
#include <rex/platform.h>
#include <rex/types.h>
#include <signal.h>

Go to the source code of this file.

Classes

struct  rex::platform::VectorRegister
class  rex::platform::HostThreadContext
class  rex::platform::Exception
class  rex::platform::ExceptionHandler

Namespaces

namespace  rex
namespace  rex::platform

Enumerations

enum class  rex::platform::ARM64Register : u8 {
  kX0 , kX1 , kX2 , kX3 ,
  kX4 , kX5 , kX6 , kX7 ,
  kX8 , kX9 , kX10 , kX11 ,
  kX12 , kX13 , kX14 , kX15 ,
  kX16 , kX17 , kX18 , kX19 ,
  kX20 , kX21 , kX22 , kX23 ,
  kX24 , kX25 , kX26 , kX27 ,
  kX28 , rex::platform::kX29 , rex::platform::kX30 , kSP ,
  kPC , kPstate , kFpsr , kFpcr ,
  rex::platform::kV0 , kV1 , kV2 , kV3 ,
  kV4 , kV5 , kV6 , kV7 ,
  kV8 , kV9 , kV10 , kV11 ,
  kV12 , kV13 , kV14 , kV15 ,
  kV16 , kV17 , kV18 , kV19 ,
  kV20 , kV21 , kV22 , kV23 ,
  kV24 , kV25 , kV26 , kV27 ,
  kV28 , kV29 , kV30 , kV31
}
enum class  rex::platform::HostRegister
enum class  rex::platform::ARM64LoadStoreOp : u32 {
  rex::platform::kSTRBW = UINT32_C(0x00000000) , rex::platform::kSTRHW = UINT32_C(0x40000000) , rex::platform::kSTRW = UINT32_C(0x80000000) , rex::platform::kSTRX = UINT32_C(0xC0000000) ,
  rex::platform::kLDRBW = UINT32_C(0x00400000) , rex::platform::kLDRHW = UINT32_C(0x40400000) , rex::platform::kLDRW = UINT32_C(0x80400000) , rex::platform::kLDRX = UINT32_C(0xC0400000) ,
  rex::platform::kLDRSBX = UINT32_C(0x00800000) , rex::platform::kLDRSHX = UINT32_C(0x40800000) , rex::platform::kLDRSWX = UINT32_C(0x80800000) , rex::platform::kLDRSBW = UINT32_C(0x00C00000) ,
  rex::platform::kLDRSHW = UINT32_C(0x40C00000) , rex::platform::kSTRB = UINT32_C(0x04000000) , rex::platform::kSTRH = UINT32_C(0x44000000) , rex::platform::kSTRS = UINT32_C(0x84000000) ,
  rex::platform::kSTRD = UINT32_C(0xC4000000) , rex::platform::kSTRQ = UINT32_C(0x04800000) , rex::platform::kLDRB = UINT32_C(0x04400000) , rex::platform::kLDRH = UINT32_C(0x44400000) ,
  rex::platform::kLDRS = UINT32_C(0x84400000) , rex::platform::kLDRD = UINT32_C(0xC4400000) , rex::platform::kLDRQ = UINT32_C(0x04C00000) , rex::platform::kPRFM = UINT32_C(0xC0800000)
}
enum class  rex::platform::ARM64LoadStoreOffsetFixed : u32 { rex::platform::kUnscaledOffset = UINT32_C(0x38000000) , rex::platform::kPostIndex = UINT32_C(0x38000400) , rex::platform::kPreIndex = UINT32_C(0x38000C00) , kRegisterOffset = UINT32_C(0x38200800) }

Functions

bool rex::platform::IsARM64LoadPrefetchStore (u32 instruction, bool &is_store_out)
u64 rex::platform::SignalPC (void *signal_context)
void rex::platform::ReportFatalSignal (int signal_number, siginfo_t *info, void *signal_context)
void rex::platform::ForwardSignal (struct sigaction &original, int signal_number, siginfo_t *info, void *signal_context)
void rex::platform::DieWithDefaultDisposition (int signal_number)

Variables

constexpr u32 rex::platform::kARM64LoadLiteralFMask = UINT32_C(0x3B000000)
constexpr u32 rex::platform::kARM64LoadLiteralFixed = UINT32_C(0x18000000)
constexpr u32 rex::platform::kARM64LoadStoreAnyFMask = UINT32_C(0x0A000000)
constexpr u32 rex::platform::kARM64LoadStoreAnyFixed = UINT32_C(0x08000000)
constexpr u32 rex::platform::kARM64LoadStorePairAnyFMask = UINT32_C(0x3A000000)
constexpr u32 rex::platform::kARM64LoadStorePairAnyFixed = UINT32_C(0x28000000)
constexpr u32 rex::platform::kARM64LoadStorePairLoadBit = UINT32_C(1) << 22
constexpr u32 rex::platform::kARM64LoadStoreMask = UINT32_C(0xC4C00000)
constexpr u32 rex::platform::kARM64LoadStoreOffsetFMask = UINT32_C(0x3B200C00)
constexpr u32 rex::platform::kARM64LoadStoreUnsignedOffsetFMask = UINT32_C(0x3B000000)
constexpr u32 rex::platform::kARM64LoadStoreUnsignedOffsetFixed = UINT32_C(0x39000000)

Detailed Description

License
BSD 3-Clause License See LICENSE file in the project root for full license text.
Remarks
Derived from Xenia's xenia/base/exception_handler.h (Ben Vanik, 2022).