mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-16 19:15:14 -04:00
attempt to register dump for PowerPC OSX and ARM linux. Completely untested.
This commit is contained in:
parent
ac7b99eeab
commit
dd0b35d1d5
18
src/Camera.c
18
src/Camera.c
@ -151,7 +151,7 @@ static Vector3 FirstPersonCamera_GetPosition(float t) {
|
||||
}
|
||||
|
||||
static bool FirstPersonCamera_Zoom(float amount) { return false; }
|
||||
struct Camera Camera_FirstPerson = {
|
||||
static struct Camera cam_FirstPerson = {
|
||||
false,
|
||||
PerspectiveCamera_GetProjection, PerspectiveCamera_GetView,
|
||||
FirstPersonCamera_GetOrientation, FirstPersonCamera_GetPosition,
|
||||
@ -203,7 +203,7 @@ static bool ThirdPersonCamera_Zoom(float amount) {
|
||||
return true;
|
||||
}
|
||||
|
||||
struct Camera Camera_ThirdPerson = {
|
||||
static struct Camera cam_ThirdPerson = {
|
||||
true,
|
||||
PerspectiveCamera_GetProjection, PerspectiveCamera_GetView,
|
||||
ThirdPersonCamera_GetOrientation, ThirdPersonCamera_GetPosition,
|
||||
@ -211,7 +211,7 @@ struct Camera Camera_ThirdPerson = {
|
||||
Camera_AcquireFocus, Camera_LoseFocus,
|
||||
PerspectiveCamera_GetPickedBlock, ThirdPersonCamera_Zoom,
|
||||
};
|
||||
struct Camera Camera_ForwardThird = {
|
||||
static struct Camera cam_ForwardThird = {
|
||||
true,
|
||||
PerspectiveCamera_GetProjection, PerspectiveCamera_GetView,
|
||||
ThirdPersonCamera_GetOrientation, ThirdPersonCamera_GetPosition,
|
||||
@ -225,11 +225,11 @@ struct Camera Camera_ForwardThird = {
|
||||
*-----------------------------------------------------General camera------------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
void Camera_Init(void) {
|
||||
Camera_Register(&Camera_FirstPerson);
|
||||
Camera_Register(&Camera_ThirdPerson);
|
||||
Camera_Register(&Camera_ForwardThird);
|
||||
Camera_Register(&cam_FirstPerson);
|
||||
Camera_Register(&cam_ThirdPerson);
|
||||
Camera_Register(&cam_ForwardThird);
|
||||
|
||||
Camera.Active = &Camera_FirstPerson;
|
||||
Camera.Active = &cam_FirstPerson;
|
||||
Event_RegisterMouseMove(&MouseEvents.RawMoved, NULL, Camera_RawMouseMovedHandler);
|
||||
|
||||
Camera.Sensitivity = Options_GetInt(OPT_SENSITIVITY, 1, 100, 30);
|
||||
@ -242,9 +242,9 @@ void Camera_CycleActive(void) {
|
||||
if (Game_ClassicMode) return;
|
||||
Camera.Active = Camera.Active->Next;
|
||||
|
||||
cam_isForwardThird = Camera.Active == &Camera_ForwardThird;
|
||||
cam_isForwardThird = Camera.Active == &cam_ForwardThird;
|
||||
if (!p->Hacks.CanUseThirdPersonCamera || !p->Hacks.Enabled) {
|
||||
Camera.Active = &Camera_FirstPerson;
|
||||
Camera.Active = &cam_FirstPerson;
|
||||
}
|
||||
|
||||
/* reset rotation offset when changing cameras */
|
||||
|
@ -5,8 +5,6 @@ VisualStudioVersion = 14.0.25420.1
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ClassiCube", "ClassiCube.vcxproj", "{8A7D82BD-178A-4785-B41B-70EDE998920A}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Pony", "..\..\PonyModel\Pony.vcxproj", "{8FCE93C4-A65B-4542-A4CC-EEE6A73E0901}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
@ -23,14 +21,6 @@ Global
|
||||
{8A7D82BD-178A-4785-B41B-70EDE998920A}.Release|x64.Build.0 = Release|x64
|
||||
{8A7D82BD-178A-4785-B41B-70EDE998920A}.Release|x86.ActiveCfg = Release|Win32
|
||||
{8A7D82BD-178A-4785-B41B-70EDE998920A}.Release|x86.Build.0 = Release|Win32
|
||||
{8FCE93C4-A65B-4542-A4CC-EEE6A73E0901}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{8FCE93C4-A65B-4542-A4CC-EEE6A73E0901}.Debug|x64.Build.0 = Debug|x64
|
||||
{8FCE93C4-A65B-4542-A4CC-EEE6A73E0901}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{8FCE93C4-A65B-4542-A4CC-EEE6A73E0901}.Debug|x86.Build.0 = Debug|Win32
|
||||
{8FCE93C4-A65B-4542-A4CC-EEE6A73E0901}.Release|x64.ActiveCfg = Release|x64
|
||||
{8FCE93C4-A65B-4542-A4CC-EEE6A73E0901}.Release|x64.Build.0 = Release|x64
|
||||
{8FCE93C4-A65B-4542-A4CC-EEE6A73E0901}.Release|x86.ActiveCfg = Release|Win32
|
||||
{8FCE93C4-A65B-4542-A4CC-EEE6A73E0901}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
134
src/Logger.c
134
src/Logger.c
@ -14,11 +14,11 @@
|
||||
#define NOSERVICE
|
||||
#define NOMCX
|
||||
#define NOIME
|
||||
|
||||
#include <windows.h>
|
||||
#include <imagehlp.h>
|
||||
#define _NL "\r\n"
|
||||
#endif
|
||||
|
||||
/* POSIX can be shared between unix-ish systems */
|
||||
#ifdef CC_BUILD_POSIX
|
||||
#if defined CC_BUILD_OPENBSD
|
||||
@ -31,7 +31,6 @@
|
||||
#else
|
||||
#include <ucontext.h>
|
||||
#endif
|
||||
|
||||
#include <execinfo.h>
|
||||
#include <stdlib.h>
|
||||
#include <fcntl.h>
|
||||
@ -232,7 +231,40 @@ String_Format3(&str, "r8 =%x r9 =%x r10=%x" _NL, REG_GET(8,8), REG_GET(9,9),
|
||||
String_Format3(&str, "r11=%x r12=%x r13=%x" _NL, REG_GET(11,11), REG_GET(12,12), REG_GET(13,13));\
|
||||
String_Format2(&str, "r14=%x r15=%x" _NL, REG_GET(14,14), REG_GET(15,15));
|
||||
|
||||
#if defined CC_BUILD_WIN
|
||||
#define Logger_Dump_PPC() \
|
||||
String_Format4(&str, "r0 =%x r1 =%x r2 =%x r3 =%x" _NL, REG_GNUM(0), REG_GNUM(1), REG_GNUM(2), REG_GNUM(3)); \
|
||||
String_Format4(&str, "r4 =%x r5 =%x r6 =%x r7 =%x" _NL, REG_GNUM(4), REG_GNUM(5), REG_GNUM(6), REG_GNUM(7)); \
|
||||
String_Format4(&str, "r8 =%x r9 =%x r10=%x r11=%x" _NL, REG_GNUM(8), REG_GNUM(9), REG_GNUM(10), REG_GNUM(11)); \
|
||||
String_Format4(&str, "r12=%x r13=%x r14=%x r15=%x" _NL, REG_GNUM(12), REG_GNUM(13), REG_GNUM(14), REG_GNUM(15)); \
|
||||
String_Format4(&str, "r16=%x r17=%x r18=%x r19=%x" _NL, REG_GNUM(16), REG_GNUM(17), REG_GNUM(18), REG_GNUM(19)); \
|
||||
String_Format4(&str, "r20=%x r21=%x r22=%x r23=%x" _NL, REG_GNUM(20), REG_GNUM(21), REG_GNUM(22), REG_GNUM(23)); \
|
||||
String_Format4(&str, "r24=%x r25=%x r26=%x r27=%x" _NL, REG_GNUM(24), REG_GNUM(25), REG_GNUM(26), REG_GNUM(27)); \
|
||||
String_Format4(&str, "r28=%x r29=%x r30=%x r31=%x" _NL, REG_GNUM(28), REG_GNUM(29), REG_GNUM(30), REG_GNUM(31)); \
|
||||
String_Format3(&str, "pc =%x lr =%x ctr=%x" _NL, REG_GET(srr0, SRR0), REG_GET(lr, LR), REG_GET(ctr,CTR));
|
||||
|
||||
#define Logger_Dump_ARM32() \
|
||||
String_Format3(&str, "r0 =%x r1 =%x r2 =%x" _NL, REG_GNUM(0), REG_GNUM(1), REG_GNUM(2));\
|
||||
String_Format3(&str, "r3 =%x r4 =%x r5 =%x" _NL, REG_GNUM(3), REG_GNUM(4), REG_GNUM(5));\
|
||||
String_Format3(&str, "r6 =%x r7 =%x r8 =%x" _NL, REG_GNUM(6), REG_GNUM(7), REG_GNUM(8));\
|
||||
String_Format3(&str, "r9 =%x r10=%x fp =%x" _NL, REG_GNUM(9), REG_GNUM(10), REG_GET(fp,FP));\
|
||||
String_Format3(&str, "sp =%x lr =%x pc =%x" _NL, REG_GET(sp,SP), REG_GET(lr,LR), REG_GET(pc,PC));
|
||||
|
||||
#define Logger_Dump_ARM64() \
|
||||
String_Format4(&str, "r0 =%x r1 =%x r2 =%x r3 =%x" _NL, REG_GNUM(0), REG_GNUM(1), REG_GNUM(2), REG_GNUM(3)); \
|
||||
String_Format4(&str, "r4 =%x r5 =%x r6 =%x r7 =%x" _NL, REG_GNUM(4), REG_GNUM(5), REG_GNUM(6), REG_GNUM(7)); \
|
||||
String_Format4(&str, "r8 =%x r9 =%x r10=%x r11=%x" _NL, REG_GNUM(8), REG_GNUM(9), REG_GNUM(10), REG_GNUM(11)); \
|
||||
String_Format4(&str, "r12=%x r13=%x r14=%x r15=%x" _NL, REG_GNUM(12), REG_GNUM(13), REG_GNUM(14), REG_GNUM(15)); \
|
||||
String_Format4(&str, "r16=%x r17=%x r18=%x r19=%x" _NL, REG_GNUM(16), REG_GNUM(17), REG_GNUM(18), REG_GNUM(19)); \
|
||||
String_Format4(&str, "r20=%x r21=%x r22=%x r23=%x" _NL, REG_GNUM(20), REG_GNUM(21), REG_GNUM(22), REG_GNUM(23)); \
|
||||
String_Format4(&str, "r24=%x r25=%x r26=%x r27=%x" _NL, REG_GNUM(24), REG_GNUM(25), REG_GNUM(26), REG_GNUM(27)); \
|
||||
String_Format3(&str, "r28=%x r29=%x r30=%x" _NL, REG_GNUM(28), REG_GNUM(29), REG_GNUM(30)); \
|
||||
String_Format2(&str, "sp =%x pc =%x" _NL, REG_GET(sp,SP), REG_GET(pc,PC));
|
||||
|
||||
#if defined CC_BUILD_WEB
|
||||
static void Logger_DumpBacktrace(String* str, void* ctx) { }
|
||||
static void Logger_DumpRegisters(void* ctx) { }
|
||||
static void Logger_DumpMisc(void* ctx) { }
|
||||
#elif defined CC_BUILD_WIN
|
||||
struct StackPointers { uintptr_t Instruction, Frame, Stack; };
|
||||
struct SymbolAndName { IMAGEHLP_SYMBOL Symbol; char Name[256]; };
|
||||
|
||||
@ -366,8 +398,7 @@ static void Logger_DumpMisc(void* ctx) {
|
||||
EnumerateLoadedModules(process, Logger_DumpModule, NULL);
|
||||
}
|
||||
|
||||
#endif
|
||||
#ifdef CC_BUILD_POSIX
|
||||
#elif defined CC_BUILD_POSIX
|
||||
static void Logger_Backtrace(String* backtrace_, void* ctx) {
|
||||
String str; char strBuffer[384];
|
||||
void* addrs[40];
|
||||
@ -423,37 +454,55 @@ static void Logger_DumpRegisters(void* ctx) {
|
||||
/* NetBSD: See /usr/include/i386/mcontext.h */
|
||||
|
||||
#if defined __i386__
|
||||
#if defined CC_BUILD_LINUX
|
||||
#define REG_GET(ign, reg) &r.gregs[REG_E##reg]
|
||||
#elif defined CC_BUILD_OSX
|
||||
#define REG_GET(reg, ign) &r->__ss.__e##reg
|
||||
#elif defined CC_BUILD_SOLARIS
|
||||
#define REG_GET(ign, reg) &r.gregs[reg]
|
||||
#elif defined CC_BUILD_FREEBSD
|
||||
#define REG_GET(reg, ign) &r.mc_e##reg
|
||||
#elif defined CC_BUILD_OPENBSD
|
||||
#define REG_GET(reg, ign) &r.sc_e##reg
|
||||
#elif defined CC_BUILD_NETBSD
|
||||
#define REG_GET(ign, reg) &r.__gregs[_REG_E##reg]
|
||||
#endif
|
||||
#if defined CC_BUILD_LINUX
|
||||
#define REG_GET(ign, reg) &r.gregs[REG_E##reg]
|
||||
#elif defined CC_BUILD_OSX
|
||||
#define REG_GET(reg, ign) &r->__ss.__e##reg
|
||||
#elif defined CC_BUILD_SOLARIS
|
||||
#define REG_GET(ign, reg) &r.gregs[E##reg]
|
||||
#elif defined CC_BUILD_FREEBSD
|
||||
#define REG_GET(reg, ign) &r.mc_e##reg
|
||||
#elif defined CC_BUILD_OPENBSD
|
||||
#define REG_GET(reg, ign) &r.sc_e##reg
|
||||
#elif defined CC_BUILD_NETBSD
|
||||
#define REG_GET(ign, reg) &r.__gregs[_REG_E##reg]
|
||||
#endif
|
||||
Logger_Dump_X86()
|
||||
#elif defined __x86_64__
|
||||
#if defined CC_BUILD_LINUX
|
||||
#define REG_GET(ign, reg) &r.gregs[REG_R##reg]
|
||||
#elif defined CC_BUILD_OSX
|
||||
#define REG_GET(reg, ign) &r->__ss.__r##reg
|
||||
#elif defined CC_BUILD_SOLARIS
|
||||
#define REG_GET(ign, reg) &r.gregs[REG_R##reg]
|
||||
#elif defined CC_BUILD_FREEBSD
|
||||
#define REG_GET(reg, ign) &r.mc_r##reg
|
||||
#elif defined CC_BUILD_OPENBSD
|
||||
#define REG_GET(reg, ign) &r.sc_r##reg
|
||||
#elif defined CC_BUILD_NETBSD
|
||||
#define REG_GET(ign, reg) &r.__gregs[_REG_R##reg]
|
||||
#endif
|
||||
#if defined CC_BUILD_LINUX
|
||||
#define REG_GET(ign, reg) &r.gregs[REG_R##reg]
|
||||
#elif defined CC_BUILD_OSX
|
||||
#define REG_GET(reg, ign) &r->__ss.__r##reg
|
||||
#elif defined CC_BUILD_SOLARIS
|
||||
#define REG_GET(ign, reg) &r.gregs[REG_R##reg]
|
||||
#elif defined CC_BUILD_FREEBSD
|
||||
#define REG_GET(reg, ign) &r.mc_r##reg
|
||||
#elif defined CC_BUILD_OPENBSD
|
||||
#define REG_GET(reg, ign) &r.sc_r##reg
|
||||
#elif defined CC_BUILD_NETBSD
|
||||
#define REG_GET(ign, reg) &r.__gregs[_REG_R##reg]
|
||||
#endif
|
||||
Logger_Dump_X64()
|
||||
#elif defined __powerpc__
|
||||
#if defined CC_BUILD_OSX
|
||||
#define REG_GNUM(num) &r->__ss.__r##num
|
||||
#define REG_GET(reg, ign) &r->__ss.__##reg
|
||||
#endif
|
||||
Logger_Dump_PPC()
|
||||
#elif defined __aarch64__
|
||||
#if defined CC_BUILD_LINUX
|
||||
#define REG_GNUM(num) &r.regs[num]
|
||||
#define REG_GET(reg, ign) &r.##reg
|
||||
#endif
|
||||
Logger_Dump_ARM64()
|
||||
#elif defined __arm__
|
||||
#if defined CC_BUILD_LINUX
|
||||
#define REG_GNUM(num) &r.arm_r##num
|
||||
#define REG_GET(reg, ign) &r.arm_##reg
|
||||
#endif
|
||||
Logger_Dump_ARM32()
|
||||
#else
|
||||
#error "Unknown machine type"
|
||||
#error "Unknown ISA/architecture"
|
||||
#endif
|
||||
|
||||
Logger_Log(&str);
|
||||
@ -483,18 +532,18 @@ static void Logger_DumpMisc(void* ctx) {
|
||||
static void Logger_DumpMisc(void* ctx) { }
|
||||
#endif
|
||||
#endif
|
||||
#ifdef CC_BUILD_WEB
|
||||
static void Logger_DumpBacktrace(String* str, void* ctx) { }
|
||||
static void Logger_DumpRegisters(void* ctx) { }
|
||||
static void Logger_DumpMisc(void* ctx) { }
|
||||
#endif
|
||||
|
||||
/*########################################################################################################################*
|
||||
*------------------------------------------------------Error handling-----------------------------------------------------*
|
||||
*#########################################################################################################################*/
|
||||
static void Logger_AbortCommon(ReturnCode result, const char* raw_msg, void* ctx);
|
||||
|
||||
#ifdef CC_BUILD_WIN
|
||||
#if defined CC_BUILD_WEB
|
||||
void Logger_Hook(void) { }
|
||||
void Logger_Abort2(ReturnCode result, const char* raw_msg) {
|
||||
Logger_AbortCommon(result, raw_msg, NULL);
|
||||
}
|
||||
#elif defined CC_BUILD_WIN
|
||||
static LONG WINAPI Logger_UnhandledFilter(struct _EXCEPTION_POINTERS* pInfo) {
|
||||
String msg; char msgBuffer[STRING_SIZE * 2 + 1];
|
||||
uint32_t code;
|
||||
@ -561,8 +610,7 @@ void Logger_Abort2(ReturnCode result, const char* raw_msg) {
|
||||
#if _MSC_VER
|
||||
#pragma optimize ("", on)
|
||||
#endif
|
||||
#endif
|
||||
#ifdef CC_BUILD_POSIX
|
||||
#elif defined CC_BUILD_POSIX
|
||||
static void Logger_SignalHandler(int sig, siginfo_t* info, void* ctx) {
|
||||
String msg; char msgBuffer[STRING_SIZE * 2 + 1];
|
||||
int type, code;
|
||||
@ -605,12 +653,6 @@ void Logger_Abort2(ReturnCode result, const char* raw_msg) {
|
||||
Logger_AbortCommon(result, raw_msg, &ctx);
|
||||
}
|
||||
#endif
|
||||
#ifdef CC_BUILD_WEB
|
||||
void Logger_Hook(void) { }
|
||||
void Logger_Abort2(ReturnCode result, const char* raw_msg) {
|
||||
Logger_AbortCommon(result, raw_msg, NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*########################################################################################################################*
|
||||
|
Loading…
x
Reference in New Issue
Block a user