LINK_FLAGS = /nologo /DEBUG shell32.lib
CL_FLAGS = /nologo /Zi /O2 /W3 /DFACTOR_DEBUG
!ELSE
-LINK_FLAGS = /nologo /safeseh:no shell32.lib
+LINK_FLAGS = /nologo /safeseh shell32.lib
CL_FLAGS = /nologo /O2 /W3
!ENDIF
+ML_FLAGS = /nologo /safeseh
+
EXE_OBJS = vm\main-windows-nt.obj vm\factor.res
DLL_OBJS = vm\os-windows-nt.obj \
vm\profiler.obj \
vm\quotations.obj \
vm\run.obj \
+ vm\safeseh.obj \
vm\strings.obj \
vm\to_tenured_collector.obj \
vm\tuples.obj \
.c.obj:
cl $(CL_FLAGS) /Fo$@ /c $<
+.asm.obj:
+ ml $(ML_FLAGS) /Fo$@ /c $<
+
.rs.res:
rc $<
return ExceptionContinueExecution;
}
-LONG exception_handler(PEXCEPTION_RECORD e, void *frame, PCONTEXT c, void *dispatch)
+extern "C" LONG exception_handler(PEXCEPTION_RECORD e, void *frame, PCONTEXT c, void *dispatch)
{
return current_vm()->exception_handler(e,frame,c,dispatch);
}
#define FACTOR_DLL NULL
-LONG exception_handler(PEXCEPTION_RECORD e, void *frame, PCONTEXT c, void *dispatch);
+extern "C" LONG exception_handler(PEXCEPTION_RECORD e, void *frame, PCONTEXT c, void *dispatch);
// SSE traps raise these exception codes, which are defined in internal NT headers
// but not winbase.h
--- /dev/null
+.386\r
+.model flat\r
+exception_handler proto\r
+.safeseh exception_handler\r
+end\r