; Copyright (c) 2010 The Chromium Authors. All rights reserved. ; Use of this source code is governed by a BSD-style license that can be ; found in the LICENSE file. ; ; Tag the exception handler as an SEH handler in case the executable ; is linked with /SAFESEH (which is the default). ; ; MASM 8.0 inserts an additional leading underscore in front of names ; and this is an attempted fix until we understand why. ; MASM 10.0 fixed this. IF @version LT 800 OR @version GE 1000 _ExceptionBarrierHandler PROTO .SAFESEH _ExceptionBarrierHandler _ExceptionBarrierReportOnlyModuleHandler PROTO .SAFESEH _ExceptionBarrierReportOnlyModuleHandler _ExceptionBarrierCallCustomHandler PROTO .SAFESEH _ExceptionBarrierCallCustomHandler ELSE ExceptionBarrierHandler PROTO .SAFESEH ExceptionBarrierHandler ExceptionBarrierReportOnlyModuleHandler PROTO .SAFESEH ExceptionBarrierReportOnlyModuleHandler ExceptionBarrierCallCustomHandler PROTO .SAFESEH ExceptionBarrierCallCustomHandler ENDIF .586 .MODEL FLAT, STDCALL ASSUME FS:NOTHING .CODE ; extern "C" void WINAPI RegisterExceptionRecord( ; EXCEPTION_REGISTRATION *registration, ; ExceptionHandlerFunc func); RegisterExceptionRecord PROC registration:DWORD, func:DWORD OPTION PROLOGUE:None OPTION EPILOGUE:None mov edx, DWORD PTR [esp + 4] ; edx is registration mov eax, DWORD PTR [esp + 8] ; eax is func mov DWORD PTR [edx + 4], eax mov eax, FS:[0] mov DWORD PTR [edx], eax mov FS:[0], edx ret 8 RegisterExceptionRecord ENDP ; extern "C" void UnregisterExceptionRecord( ; EXCEPTION_REGISTRATION *registration); UnregisterExceptionRecord PROC registration:DWORD OPTION PROLOGUE:None OPTION EPILOGUE:None mov edx, DWORD PTR [esp + 4] mov eax, [edx] mov FS:[0], eax ret 4 UnregisterExceptionRecord ENDP END