mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-14 10:05:44 -04:00
Add support for cross compiling to windows for ARM. No clue if it actually works at all though.
This commit is contained in:
parent
e29e8e1ae9
commit
2484ff0117
43
src/Logger.c
43
src/Logger.c
@ -179,10 +179,13 @@ struct SymbolAndName { IMAGEHLP_SYMBOL Symbol; char Name[256]; };
|
||||
|
||||
static int GetFrames(CONTEXT* ctx, cc_uintptr* addrs, int max) {
|
||||
STACKFRAME frame = { 0 };
|
||||
DWORD type;
|
||||
frame.AddrPC.Mode = AddrModeFlat;
|
||||
frame.AddrFrame.Mode = AddrModeFlat;
|
||||
frame.AddrStack.Mode = AddrModeFlat;
|
||||
HANDLE process, thread;
|
||||
int count, type;
|
||||
CONTEXT copy;
|
||||
|
||||
frame.AddrPC.Mode = AddrModeFlat;
|
||||
frame.AddrFrame.Mode = AddrModeFlat;
|
||||
frame.AddrStack.Mode = AddrModeFlat;
|
||||
|
||||
#if defined _M_IX86
|
||||
type = IMAGE_FILE_MACHINE_I386;
|
||||
@ -195,13 +198,12 @@ static int GetFrames(CONTEXT* ctx, cc_uintptr* addrs, int max) {
|
||||
frame.AddrFrame.Offset = ctx->Rsp;
|
||||
frame.AddrStack.Offset = ctx->Rsp;
|
||||
#else
|
||||
#error "Unknown CPU architecture"
|
||||
/* Always available after XP, so use that */
|
||||
return RtlCaptureStackBackTrace(0, max, (void**)addrs, NULL);
|
||||
#endif
|
||||
|
||||
HANDLE process = GetCurrentProcess();
|
||||
HANDLE thread = GetCurrentThread();
|
||||
int count;
|
||||
CONTEXT copy = *ctx;
|
||||
process = GetCurrentProcess();
|
||||
thread = GetCurrentThread();
|
||||
copy = *ctx;
|
||||
|
||||
for (count = 0; count < max; count++) {
|
||||
if (!StackWalk(type, process, thread, &frame, ©, NULL, SymFunctionTableAccess, SymGetModuleBase, NULL)) break;
|
||||
@ -354,11 +356,12 @@ String_Format4(str, "r28=%x r29=%x r30=%x r31=%x" _NL, REG_GNUM(28), REG_GNUM(29
|
||||
String_Format3(str, "pc =%x lr =%x ctr=%x" _NL, REG_GET_PC(), REG_GET_LR(), REG_GET_CTR());
|
||||
|
||||
#define 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));
|
||||
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());\
|
||||
String_Format3(str, "ip =%x sp =%x lr =%x" _NL, REG_GET_IP(),REG_GET(sp,Sp),REG_GET(lr,Lr));\
|
||||
String_Format1(str, "pc =%x" _NL, REG_GET(pc,Pc));
|
||||
|
||||
#define 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)); \
|
||||
@ -390,6 +393,12 @@ static void PrintRegisters(String* str, void* ctx) {
|
||||
#elif defined _M_X64
|
||||
#define REG_GET(reg, ign) &r->R ## reg
|
||||
Dump_X64()
|
||||
#elif defined _M_ARM
|
||||
#define REG_GNUM(num) &r->R ## num
|
||||
#define REG_GET(ign,reg) &r-> ## reg
|
||||
#define REG_GET_FP() &r->R11
|
||||
#define REG_GET_IP() &r->R12
|
||||
Dump_ARM32()
|
||||
#else
|
||||
#error "Unknown CPU architecture"
|
||||
#endif
|
||||
@ -457,7 +466,9 @@ static void PrintRegisters(String* str, void* ctx) {
|
||||
Dump_ARM64()
|
||||
#elif defined __arm__
|
||||
#define REG_GNUM(num) &r.arm_r##num
|
||||
#define REG_GET(reg, ign) &r.arm_##reg
|
||||
#define REG_GET(reg,ign) &r.arm_##reg
|
||||
#define REG_GET_FP() &r.arm_fp
|
||||
#define REG_GET_IP() &r.arm_ip
|
||||
Dump_ARM32()
|
||||
#elif defined __sparc__
|
||||
#define REG_GET(ign, reg) &r.gregs[REG_##reg]
|
||||
|
Loading…
x
Reference in New Issue
Block a user