Merge branch 'master' into jgrpp
# Conflicts: # config.lib # projects/openttd_vs140.vcxproj # projects/openttd_vs140.vcxproj.filters # projects/openttd_vs141.vcxproj # projects/openttd_vs141.vcxproj.filters # projects/openttd_vs142.vcxproj # projects/openttd_vs142.vcxproj.filters # src/aircraft_cmd.cpp # src/base_station_base.h # src/core/pool_type.hpp # src/disaster_vehicle.cpp # src/economy.cpp # src/engine.cpp # src/group.h # src/group_cmd.cpp # src/group_gui.cpp # src/lang/english.txt # src/lang/german.txt # src/linkgraph/linkgraph_gui.cpp # src/network/network_command.cpp # src/network/network_server.cpp # src/openttd.cpp # src/order_cmd.cpp # src/road_cmd.cpp # src/saveload/afterload.cpp # src/saveload/cargopacket_sl.cpp # src/saveload/linkgraph_sl.cpp # src/saveload/order_sl.cpp # src/saveload/station_sl.cpp # src/saveload/town_sl.cpp # src/saveload/vehicle_sl.cpp # src/screenshot.cpp # src/screenshot.h # src/settings_gui.cpp # src/settings_type.h # src/smallmap_gui.cpp # src/station.cpp # src/station_cmd.cpp # src/table/settings.ini # src/toolbar_gui.cpp # src/town_cmd.cpp # src/train.h # src/train_cmd.cpp # src/train_gui.cpp # src/vehicle.cpp # src/vehicle_base.h # src/vehiclelist.cpp # src/window_type.h
This commit is contained in:
@@ -300,7 +300,7 @@ static char *PrintModuleInfo(char *output, const char *last, HMODULE mod)
|
||||
ep->ContextRecord->Rip,
|
||||
ep->ContextRecord->EFlags
|
||||
);
|
||||
#else
|
||||
#elif defined(_M_IX86)
|
||||
buffer += seprintf(buffer, last,
|
||||
" EAX: %.8X EBX: %.8X ECX: %.8X EDX: %.8X\n"
|
||||
" ESI: %.8X EDI: %.8X EBP: %.8X ESP: %.8X\n"
|
||||
@@ -316,13 +316,57 @@ static char *PrintModuleInfo(char *output, const char *last, HMODULE mod)
|
||||
(int)ep->ContextRecord->Eip,
|
||||
(int)ep->ContextRecord->EFlags
|
||||
);
|
||||
#elif defined(_M_ARM64)
|
||||
buffer += seprintf(buffer, last,
|
||||
" X0: %.16I64X X1: %.16I64X X2: %.16I64X X3: %.16I64X\n"
|
||||
" X4: %.16I64X X5: %.16I64X X6: %.16I64X X7: %.16I64X\n"
|
||||
" X8: %.16I64X X9: %.16I64X X10: %.16I64X X11: %.16I64X\n"
|
||||
" X12: %.16I64X X13: %.16I64X X14: %.16I64X X15: %.16I64X\n"
|
||||
" X16: %.16I64X X17: %.16I64X X18: %.16I64X X19: %.16I64X\n"
|
||||
" X20: %.16I64X X21: %.16I64X X22: %.16I64X X23: %.16I64X\n"
|
||||
" X24: %.16I64X X25: %.16I64X X26: %.16I64X X27: %.16I64X\n"
|
||||
" X28: %.16I64X Fp: %.16I64X Lr: %.16I64X\n",
|
||||
ep->ContextRecord->X0,
|
||||
ep->ContextRecord->X1,
|
||||
ep->ContextRecord->X2,
|
||||
ep->ContextRecord->X3,
|
||||
ep->ContextRecord->X4,
|
||||
ep->ContextRecord->X5,
|
||||
ep->ContextRecord->X6,
|
||||
ep->ContextRecord->X7,
|
||||
ep->ContextRecord->X8,
|
||||
ep->ContextRecord->X9,
|
||||
ep->ContextRecord->X10,
|
||||
ep->ContextRecord->X11,
|
||||
ep->ContextRecord->X12,
|
||||
ep->ContextRecord->X13,
|
||||
ep->ContextRecord->X14,
|
||||
ep->ContextRecord->X15,
|
||||
ep->ContextRecord->X16,
|
||||
ep->ContextRecord->X17,
|
||||
ep->ContextRecord->X18,
|
||||
ep->ContextRecord->X19,
|
||||
ep->ContextRecord->X20,
|
||||
ep->ContextRecord->X21,
|
||||
ep->ContextRecord->X22,
|
||||
ep->ContextRecord->X23,
|
||||
ep->ContextRecord->X24,
|
||||
ep->ContextRecord->X25,
|
||||
ep->ContextRecord->X26,
|
||||
ep->ContextRecord->X27,
|
||||
ep->ContextRecord->X28,
|
||||
ep->ContextRecord->Fp,
|
||||
ep->ContextRecord->Lr
|
||||
);
|
||||
#endif
|
||||
|
||||
buffer += seprintf(buffer, last, "\n Bytes at instruction pointer:\n");
|
||||
#ifdef _M_AMD64
|
||||
byte *b = (byte*)ep->ContextRecord->Rip;
|
||||
#else
|
||||
#elif defined(_M_IX86)
|
||||
byte *b = (byte*)ep->ContextRecord->Eip;
|
||||
#elif defined(_M_ARM64)
|
||||
byte *b = (byte*)ep->ContextRecord->Pc;
|
||||
#endif
|
||||
for (int i = 0; i != 24; i++) {
|
||||
if (IsBadReadPtr(b, 1)) {
|
||||
@@ -340,8 +384,10 @@ static char *PrintModuleInfo(char *output, const char *last, HMODULE mod)
|
||||
buffer += seprintf(buffer, last, "Stack trace:\n");
|
||||
#ifdef _M_AMD64
|
||||
uint32 *b = (uint32*)ep->ContextRecord->Rsp;
|
||||
#else
|
||||
#elif defined(_M_IX86)
|
||||
uint32 *b = (uint32*)ep->ContextRecord->Esp;
|
||||
#elif defined(_M_ARM64)
|
||||
uint32 *b = (uint32*)ep->ContextRecord->Sp;
|
||||
#endif
|
||||
for (int j = 0; j != 24; j++) {
|
||||
for (int i = 0; i != 8; i++) {
|
||||
@@ -415,10 +461,14 @@ char *CrashLogWindows::AppendDecodedStacktrace(char *buffer, const char *last) c
|
||||
frame.AddrPC.Offset = ep->ContextRecord->Rip;
|
||||
frame.AddrFrame.Offset = ep->ContextRecord->Rbp;
|
||||
frame.AddrStack.Offset = ep->ContextRecord->Rsp;
|
||||
#else
|
||||
#elif defined(_M_IX86)
|
||||
frame.AddrPC.Offset = ep->ContextRecord->Eip;
|
||||
frame.AddrFrame.Offset = ep->ContextRecord->Ebp;
|
||||
frame.AddrStack.Offset = ep->ContextRecord->Esp;
|
||||
#elif defined(_M_ARM64)
|
||||
frame.AddrPC.Offset = ep->ContextRecord->Pc;
|
||||
frame.AddrFrame.Offset = ep->ContextRecord->Fp;
|
||||
frame.AddrStack.Offset = ep->ContextRecord->Sp;
|
||||
#endif
|
||||
frame.AddrPC.Mode = AddrModeFlat;
|
||||
frame.AddrFrame.Mode = AddrModeFlat;
|
||||
@@ -599,9 +649,12 @@ static LONG WINAPI ExceptionHandler(EXCEPTION_POINTERS *ep)
|
||||
#ifdef _M_AMD64
|
||||
ep->ContextRecord->Rip = (DWORD64)ShowCrashlogWindow;
|
||||
ep->ContextRecord->Rsp = (DWORD64)_safe_esp;
|
||||
#else
|
||||
#elif defined(_M_IX86)
|
||||
ep->ContextRecord->Eip = (DWORD)ShowCrashlogWindow;
|
||||
ep->ContextRecord->Esp = (DWORD)_safe_esp;
|
||||
#elif defined(_M_ARM64)
|
||||
ep->ContextRecord->Pc = (DWORD64)ShowCrashlogWindow;
|
||||
ep->ContextRecord->Sp = (DWORD64)_safe_esp;
|
||||
#endif
|
||||
return EXCEPTION_CONTINUE_EXECUTION;
|
||||
}
|
||||
@@ -628,7 +681,7 @@ static void CDECL CustomAbort(int signal)
|
||||
|
||||
/* static */ void CrashLog::InitialiseCrashLog()
|
||||
{
|
||||
#ifdef _M_AMD64
|
||||
#if defined(_M_AMD64) || defined(_M_ARM64)
|
||||
CONTEXT ctx;
|
||||
RtlCaptureContext(&ctx);
|
||||
|
||||
@@ -636,7 +689,11 @@ static void CDECL CustomAbort(int signal)
|
||||
* function. As we are simulating a function call with the safe ESP value,
|
||||
* we need to subtract 8 for the imaginary return address otherwise stack
|
||||
* alignment would be wrong in the called function. */
|
||||
#if defined(_M_ARM64)
|
||||
_safe_esp = (void *)(ctx.Sp - 8);
|
||||
#else
|
||||
_safe_esp = (void *)(ctx.Rsp - 8);
|
||||
#endif
|
||||
#else
|
||||
#if defined(_MSC_VER)
|
||||
_asm {
|
||||
|
Reference in New Issue
Block a user