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:
Jonathan G Rennison
2020-01-06 18:45:51 +00:00
281 changed files with 2714 additions and 2467 deletions

View File

@@ -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 {