diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/os/windows/crashlog_win.cpp | 19 | ||||
-rw-r--r-- | src/os/windows/masm64.rules | 266 | ||||
-rw-r--r-- | src/os/windows/win64.asm | 8 |
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"[value]"" - 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"[value]"" - 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"[value]"" - /> - <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"[value]"" - /> - <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"[value]"" - /> - <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 "[value]"" - 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 |