summaryrefslogtreecommitdiff
path: root/src/os
diff options
context:
space:
mode:
authormichi_cc <michi_cc@openttd.org>2010-08-23 18:19:15 +0000
committermichi_cc <michi_cc@openttd.org>2010-08-23 18:19:15 +0000
commita7e8b67c7c96d7e76b495ce2bed9f5f423870522 (patch)
tree330f12d82f0eeea9438a47ef4bfe17a8821f758f /src/os
parent56e05d1e2cc3feb2b08f7f87494c6ebe1f79e775 (diff)
downloadopenttd-a7e8b67c7c96d7e76b495ce2bed9f5f423870522.tar.xz
(svn r20598) -Codechange: [Win32] Replace the external x64 asm with a built-in Windows function.
Diffstat (limited to 'src/os')
-rw-r--r--src/os/windows/crashlog_win.cpp19
-rw-r--r--src/os/windows/masm64.rules266
-rw-r--r--src/os/windows/win64.asm8
3 files changed, 14 insertions, 279 deletions
diff --git a/src/os/windows/crashlog_win.cpp b/src/os/windows/crashlog_win.cpp
index 4bdb984f8..11791528b 100644
--- a/src/os/windows/crashlog_win.cpp
+++ b/src/os/windows/crashlog_win.cpp
@@ -10,6 +10,12 @@
/** @file crashlog_win.cpp Implementation of a crashlogger for Windows */
#include "../../stdafx.h"
+#if defined(_MSC_VER) && defined(_M_AMD64)
+/* Redefine WinNT version to get RtlCaptureContext prototype. */
+#undef _WIN32_WINNT
+#undef NTDDI_VERSION
+#define _WIN32_WINNT _WIN32_WINNT_WINXP
+#endif /* defined(_MSC_VER) && defined(_M_AMD64) */
#include "../../crashlog.h"
#include "win32.h"
#include "../../core/alloc_func.hpp"
@@ -408,10 +414,6 @@ static LONG WINAPI ExceptionHandler(EXCEPTION_POINTERS *ep)
return EXCEPTION_EXECUTE_HANDLER;
}
-#ifdef _M_AMD64
-extern "C" void *_get_safe_esp();
-#endif
-
static void CDECL CustomAbort(int signal)
{
RaiseException(0xE1212012, 0, 0, NULL);
@@ -421,7 +423,14 @@ static void CDECL CustomAbort(int signal)
{
#if defined(_MSC_VER)
#ifdef _M_AMD64
- _safe_esp = _get_safe_esp();
+ CONTEXT ctx;
+ RtlCaptureContext(&ctx);
+
+ /* The stack pointer for AMD64 must always be 16-byte aligned inside a
+ * 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. */
+ _safe_esp = (void *)(ctx.Rsp - 8);
#else
_asm {
mov _safe_esp, esp
diff --git a/src/os/windows/masm64.rules b/src/os/windows/masm64.rules
deleted file mode 100644
index 62e6e0f8b..000000000
--- a/src/os/windows/masm64.rules
+++ /dev/null
@@ -1,266 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<VisualStudioToolFile
- Name="Microsoft Macro Assembler 64"
- Version="8.00"
- >
- <Rules>
- <CustomBuildRule
- Name="MASM AMD64"
- DisplayName="Microsoft Macro Assembler for AMD64"
- CommandLine="ml64.exe /c [AllOptions] [AdditionalOptions] /Ta[inputs]"
- Outputs="[$ObjectFileName]"
- FileExtensions="*.asm"
- ExecutionDescription="Assembling..."
- >
- <Properties>
- <BooleanProperty
- Name="NoLogo"
- DisplayName="Suppress Startup Banner"
- Description="Suppress the display of the startup banner and information messages. (/nologo)"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/nologo"
- DefaultValue="true"
- />
- <StringProperty
- Name="ObjectFileName"
- DisplayName="Object File Name"
- PropertyPageName="Object File"
- Description="Specifies the name of the output object file. (/Fo:[file])"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/Fo&quot;[value]&quot;"
- DefaultValue="$(IntDir)\$(InputName).obj"
- />
- <BooleanProperty
- Name="PreserveIdentifierCase"
- DisplayName="Preserve Identifier Case"
- PropertyPageName="Identifiers"
- Description="Preserves case of all user identifiers. (/Cp)"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/Cp"
- />
- <BooleanProperty
- Name="PreservePublicAndExternSymbolCase"
- DisplayName="Preserve Public and Extern Symbol Case"
- PropertyPageName="Identifiers"
- Description="Preserves case in public and extern symbols. (/Cx)"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/Cx"
- />
- <StringProperty
- Name="PreprocessorDefinitions"
- DisplayName="Preprocessor Definitions"
- Description="Defines a text macro with the given name. (/D[symbol])"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/D&quot;[value]&quot;"
- Delimited="true"
- Inheritable="true"
- />
- <BooleanProperty
- Name="GeneratePreprocessedSourceListing"
- DisplayName="Generate Preprocessed Source Listing"
- PropertyPageName="Listing File"
- Description="Generates a preprocessed source listing to the Output Window. (/EP)"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/EP"
- />
- <StringProperty
- Name="AssembledCodeListingFile"
- DisplayName="Assembled Code Listing File"
- PropertyPageName="Listing File"
- Description="Generates an assembled code listing file. (/Fl[file])"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/Fl&quot;[value]&quot;"
- />
- <StringProperty
- Name="SourceBrowserFile"
- DisplayName="Source Browser File"
- PropertyPageName="Source Browser File"
- Description="Generates a source browser .sbr file. (/Fr[file])"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/Fr&quot;[value]&quot;"
- />
- <StringProperty
- Name="ExtendedSourceBrowserFile"
- DisplayName="Extended Source Browser File"
- PropertyPageName="Source Browser File"
- Description="Generates an extended form of a source browser .sbr file. (/FR[file])"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/FR&quot;[value]&quot;"
- />
- <StringProperty
- Name="IncludePaths"
- DisplayName="Include Paths"
- Description="Sets path for include file. A maximum of 10 /I options is allowed. (/I [path])"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/I &quot;[value]&quot;"
- Delimited="true"
- Inheritable="true"
- />
- <BooleanProperty
- Name="ListAllAvailableInformation"
- DisplayName="List All Available Information"
- PropertyPageName="Listing File"
- Description="Turns on listing of all available information. (/Sa)"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/Sa"
- />
- <BooleanProperty
- Name="AddInstructionTimings"
- DisplayName="Add Instruction Timings"
- PropertyPageName="Listing File"
- Description="Adds instruction timings to listing file. (/Sc)"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/Sc"
- />
- <BooleanProperty
- Name="AddFirstPassListing"
- DisplayName="Add First Pass Listing"
- PropertyPageName="Listing File"
- Description="Adds first-pass listing to listing file. (/Sf)"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/Sf"
- />
- <IntegerProperty
- Name="SourceListingLineWidth"
- DisplayName="Source Listing Line Width"
- PropertyPageName="Listing File"
- Description="Sets the line width of source listing in characters per line. Range is 60 to 255 or 0. Default is 0. Same as PAGE width. (/Sl [width])"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/Sl [value]"
- />
- <BooleanProperty
- Name="DisableSymbolTable"
- DisplayName="Disable Symbol Table"
- PropertyPageName="Listing File"
- Description="Turns off symbol table when producing a listing. (/Sn)"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/Sn"
- />
- <IntegerProperty
- Name="SourceListingPageLength"
- DisplayName="Source Listing Page Length"
- PropertyPageName="Listing File"
- Description="Sets the page length of source listing in lines per page. Range is 10 to 255 or 0. Default is 0. Same as PAGE length. (/Sp [length])"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/Sp [value]"
- />
- <StringProperty
- Name="SourceListingSubTitle"
- DisplayName="Source Listing Subtitle"
- PropertyPageName="Listing File"
- Description="Specifies subtitle text for source listing. Same as SUBTITLE text. (/Ss [subtitle])"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/Ss [value]"
- />
- <StringProperty
- Name="SourceListingTitle"
- DisplayName="Source Listing Title"
- PropertyPageName="Listing File"
- Description="Specifies title for source listing. Same as TITLE text. (/St [title])"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/St [value]"
- />
- <BooleanProperty
- Name="EnableFalseConditionalsInListing"
- DisplayName="Enable False Conditionals In Listing"
- PropertyPageName="Listing File"
- Description="Turns on false conditionals in listing. (/Sx)"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/Sx"
- />
- <EnumProperty
- Name="WarningLevel"
- DisplayName="Warning Level"
- Description="Sets the warning level, where level = 0, 1, 2, or 3. (/W0, /W1, /W2, /W3)"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- >
- <Values>
- <EnumValue
- Value="0"
- Switch="/W0"
- DisplayName="Warning Level 0 (/W0)"
- />
- <EnumValue
- Value="1"
- Switch="/W1"
- DisplayName="Warning Level 1 (/W1)"
- />
- <EnumValue
- Value="2"
- Switch="/W2"
- DisplayName="Warning Level 2 (/W2)"
- />
- <EnumValue
- Value="3"
- Switch="/W3"
- DisplayName="Warning Level 3 (/W3)"
- />
- </Values>
- </EnumProperty>
- <BooleanProperty
- Name="TreatWarningsAsErrors"
- DisplayName="Treat Warnings As Errors"
- Description="Returns an error code if warnings are generated. (/WX)"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/WX"
- />
- <BooleanProperty
- Name="GenerateLineInformation"
- DisplayName="Generate Line Information"
- PropertyPageName="Object File"
- Description="Generates line-number information in object file. (/Zd)"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/Zd"
- />
- <BooleanProperty
- Name="MakeAllSymbolsPublic"
- DisplayName="Make All Symbols Public"
- PropertyPageName="Object File"
- Description="Makes all symbols public. (/Zf)"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/Zf"
- />
- <BooleanProperty
- Name="GenerateCodeViewInformation"
- DisplayName="Generate CodeView Information"
- PropertyPageName="Object File"
- Description="Generates CodeView information in object file. (/Zi)"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/Zi"
- />
- <EnumProperty
- Name="PackAlignmentBoundary"
- DisplayName="Pack Alignment Boundary"
- PropertyPageName="Advanced"
- Description="Packs structures on the specified byte boundary. The alignment can be 1, 2, or 4. (/Zp1, /Zp2, /Zp4)"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- >
- <Values>
- <EnumValue
- Value="0"
- Switch="/Zp1"
- DisplayName="One Byte Boundary (/Zp1)"
- />
- <EnumValue
- Value="1"
- Switch="/Zp2"
- DisplayName="Two Byte Boundary (/Zp2)"
- />
- <EnumValue
- Value="2"
- Switch="/Zp4"
- DisplayName="Four Byte Boundary (/Zp4)"
- />
- </Values>
- </EnumProperty>
- <BooleanProperty
- Name="PerformSyntaxCheckOnly"
- DisplayName="Perform Syntax Check Only"
- Description="Performs a syntax check only. (/Zs)"
- HelpURL="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmasm/html/vclrfml.asp"
- Switch="/Zs"
- />
- </Properties>
- </CustomBuildRule>
- </Rules>
-</VisualStudioToolFile>
diff --git a/src/os/windows/win64.asm b/src/os/windows/win64.asm
deleted file mode 100644
index d95bc3898..000000000
--- a/src/os/windows/win64.asm
+++ /dev/null
@@ -1,8 +0,0 @@
- .CODE
-
-PUBLIC _get_safe_esp
-_get_safe_esp:
- MOV RAX,RSP
- RET
-
- END