msvcrt: Implement _local_unwind for x86_64.
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index a6cfaa3..4192ff6 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -844,6 +844,7 @@
@ cdecl _lfind(ptr ptr ptr long ptr) msvcrt._lfind
@ stub _lfind_s
@ cdecl _loaddll(str) msvcrt._loaddll
+@ cdecl -arch=x86_64 _local_unwind(ptr ptr) msvcrt._local_unwind
@ cdecl -i386 _local_unwind2(ptr long) msvcrt._local_unwind2
@ cdecl -i386 _local_unwind4(ptr ptr long) msvcrt._local_unwind4
@ cdecl _localtime32(ptr) msvcrt._localtime32
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index c9f62f0..2158734 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -690,6 +690,7 @@
@ cdecl _lfind(ptr ptr ptr long ptr) msvcrt._lfind
@ stub _lfind_s
@ cdecl _loaddll(str) msvcrt._loaddll
+@ cdecl -arch=x86_64 _local_unwind(ptr ptr) msvcrt._local_unwind
@ cdecl -i386 _local_unwind2(ptr long) msvcrt._local_unwind2
@ cdecl -i386 _local_unwind4(ptr ptr long) msvcrt._local_unwind4
@ cdecl _localtime32(ptr) msvcrt._localtime32
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index 5f09767..1bb525d 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -678,6 +678,7 @@
@ cdecl _lfind(ptr ptr ptr long ptr) msvcrt._lfind
@ stub _lfind_s
@ cdecl _loaddll(str) msvcrt._loaddll
+@ cdecl -arch=x86_64 _local_unwind(ptr ptr) msvcrt._local_unwind
@ cdecl -i386 _local_unwind2(ptr long) msvcrt._local_unwind2
@ cdecl -i386 _local_unwind4(ptr ptr long) msvcrt._local_unwind4
@ cdecl _localtime32(ptr) msvcrt._localtime32
diff --git a/dlls/msvcrt/except.c b/dlls/msvcrt/except.c
index 7404089..422e3fa 100644
--- a/dlls/msvcrt/except.c
+++ b/dlls/msvcrt/except.c
@@ -605,6 +605,15 @@
longjmp_set_regs( jmp, retval );
}
+/*******************************************************************
+ * _local_unwind (MSVCRT.@)
+ */
+void __cdecl _local_unwind( void *frame, void *target )
+{
+ CONTEXT context;
+ RtlUnwindEx( frame, target, NULL, 0, &context, NULL );
+}
+
#endif /* __x86_64__ */
static MSVCRT___sighandler_t sighandlers[MSVCRT_NSIG] = { MSVCRT_SIG_DFL };
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index 3b36d77..5d065fb 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -627,7 +627,7 @@
@ cdecl _lfind(ptr ptr ptr long ptr)
# stub _lfind_s(ptr ptr ptr long ptr ptr)
@ cdecl _loaddll(str)
-# stub -arch=x86_64 _local_unwind
+@ cdecl -arch=x86_64 _local_unwind(ptr ptr)
@ cdecl -i386 _local_unwind2(ptr long)
@ cdecl -i386 _local_unwind4(ptr ptr long)
@ cdecl _localtime32(ptr) MSVCRT__localtime32
diff --git a/dlls/msvcrtd/msvcrtd.spec b/dlls/msvcrtd/msvcrtd.spec
index ff83f8e..e4372e9 100644
--- a/dlls/msvcrtd/msvcrtd.spec
+++ b/dlls/msvcrtd/msvcrtd.spec
@@ -378,6 +378,7 @@
@ cdecl _kbhit() msvcrt._kbhit
@ cdecl _lfind(ptr ptr ptr long ptr) msvcrt._lfind
@ cdecl _loaddll(str) msvcrt._loaddll
+@ cdecl -arch=x86_64 _local_unwind(ptr ptr) msvcrt._local_unwind
@ cdecl -i386 _local_unwind2(ptr long) msvcrt._local_unwind2
@ cdecl _lock(long) msvcrt._lock
@ cdecl _locking(long long long) msvcrt._locking
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
index 64aaf39..3c059b6 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -1411,7 +1411,8 @@
@ cdecl -private -i386 _global_unwind2(ptr) msvcrt._global_unwind2
@ cdecl -private _itoa(long ptr long) msvcrt._itoa
@ cdecl -private _itow(long ptr long) msvcrt._itow
-@ cdecl -private _local_unwind2(ptr long) msvcrt._local_unwind2
+@ cdecl -private -arch=x86_64 _local_unwind(ptr ptr) msvcrt._local_unwind
+@ cdecl -private -arch=i386 _local_unwind2(ptr long) msvcrt._local_unwind2
@ cdecl -private _purecall() msvcrt._purecall
@ varargs -private _snprintf(str long str) msvcrt._snprintf
@ varargs -private _snwprintf(wstr long wstr) msvcrt._snwprintf