From bd2b022d305d12bf8da7fc7de0ed7a61b066dc5a Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Wed, 12 Oct 2016 00:54:34 -0400 Subject: [PATCH] Fix X86 MASM assembly under Visual Studio 2013 (Issue 321) --- rdrand.asm | 42 ++++++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/rdrand.asm b/rdrand.asm index 9fcf6e0a..76c07646 100644 --- a/rdrand.asm +++ b/rdrand.asm @@ -74,12 +74,13 @@ OPTION LANGUAGE:C OPTION PROLOGUE:NONE OPTION EPILOGUE:NONE -;; Base relative (in): arg1, byte* buffer -;; Base relative (in): arg2, size_t bsize -;; Base relative (in): arg3, unsigned int safety +;; Caller pushes on stack following CDECL (right to left) +;; arg1: byte* buffer +;; arg2: size_t bsize +;; arg3: unsigned int safety ;; EAX (out): success (1), failure (0) -MASM_RRA_GenerateBlock PROC arg1:DWORD,arg2:DWORD,arg3:DWORD +MASM_RRA_GenerateBlock PROC ;; arg1:DWORD, arg2:DWORD, arg3:DWORD MWSIZE EQU 04h ;; machine word size buffer EQU edi @@ -88,9 +89,9 @@ MASM_RRA_GenerateBlock PROC arg1:DWORD,arg2:DWORD,arg3:DWORD Load_Arguments: - mov buffer, arg1 - mov bsize, arg2 - mov safety, arg3 + mov buffer, [esp+04h] ;; arg1 + mov bsize, [esp+08h] ;; arg2 + mov safety, [esp+0Ch] ;; arg3 Validate_Pointer: @@ -182,6 +183,9 @@ MASM_RRA_GenerateBlock ENDP ENDIF ;; _M_X86 +OPTION PROLOGUE:PrologueDef +OPTION EPILOGUE:EpilogueDef + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -307,6 +311,9 @@ MASM_RRA_GenerateBlock ENDP ENDIF ;; _M_X64 +OPTION PROLOGUE:PrologueDef +OPTION EPILOGUE:EpilogueDef + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -318,12 +325,13 @@ OPTION LANGUAGE:C OPTION PROLOGUE:NONE OPTION EPILOGUE:NONE -;; Base relative (in): arg1, byte* buffer -;; Base relative (in): arg2, size_t bsize -;; Base relative (in): arg3, unsigned int safety +;; Caller pushes on stack following CDECL (right to left) +;; arg1: byte* buffer +;; arg2: size_t bsize +;; arg3: unsigned int safety ;; EAX (out): success (1), failure (0) -MASM_RSA_GenerateBlock PROC arg1:DWORD,arg2:DWORD,arg3:DWORD +MASM_RSA_GenerateBlock PROC ;; arg1:DWORD, arg2:DWORD, arg3:DWORD MWSIZE EQU 04h ;; machine word size buffer EQU edi @@ -332,9 +340,9 @@ MASM_RSA_GenerateBlock PROC arg1:DWORD,arg2:DWORD,arg3:DWORD Load_Arguments: - mov buffer, arg1 - mov bsize, arg2 - mov safety, arg3 + mov buffer, [esp+04h] ;; arg1 + mov bsize, [esp+08h] ;; arg2 + mov safety, [esp+0Ch] ;; arg3 Validate_Pointer: @@ -426,6 +434,9 @@ MASM_RSA_GenerateBlock ENDP ENDIF ;; _M_X86 +OPTION PROLOGUE:PrologueDef +OPTION EPILOGUE:EpilogueDef + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -551,6 +562,9 @@ MASM_RSA_GenerateBlock ENDP ENDIF ;; _M_X64 +OPTION PROLOGUE:PrologueDef +OPTION EPILOGUE:EpilogueDef + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;