- Add msvc.S containing call_stubless_func in assembly
- Fix spec file, 2 stub functions are already implemented
- fix use of GetExceptionCode(), it cannot be used in that context.

svn path=/trunk/; revision=52399
This commit is contained in:
Timo Kreuzer 2011-06-21 12:22:47 +00:00
parent b3b1b3262b
commit 2792c9b294
4 changed files with 27 additions and 5 deletions

View file

@ -23,6 +23,10 @@ list(APPEND SOURCE
${CMAKE_CURRENT_BINARY_DIR}/rpcrt4_stubs.c ${CMAKE_CURRENT_BINARY_DIR}/rpcrt4_stubs.c
${CMAKE_CURRENT_BINARY_DIR}/rpcrt4.def) ${CMAKE_CURRENT_BINARY_DIR}/rpcrt4.def)
if(MSVC)
list(APPEND SOURCE msvc.S)
endif()
remove_definitions(-D_WIN32_WINNT=0x502) remove_definitions(-D_WIN32_WINNT=0x502)
add_definitions(-D_WIN32_WINNT=0x600) add_definitions(-D_WIN32_WINNT=0x600)

View file

@ -0,0 +1,18 @@
#include <asm.inc>
.code32
EXTERN _ObjectStubless@4:PROC
PUBLIC _call_stubless_func
_call_stubless_func:
push esp /* pointer to index */
call _ObjectStubless@4
pop edx /* args size */
mov ecx, [esp] /* return address */
add esp, edx
jmp ecx
END

View file

@ -171,7 +171,7 @@ static RPC_STATUS get_epm_handle_server(RPC_BINDING_HANDLE *epm_handle)
static LONG WINAPI rpc_filter(EXCEPTION_POINTERS *__eptr) static LONG WINAPI rpc_filter(EXCEPTION_POINTERS *__eptr)
{ {
switch (GetExceptionCode()) switch (__eptr->ExceptionRecord->ExceptionCode)
{ {
case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_ACCESS_VIOLATION:
case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_ILLEGAL_INSTRUCTION:

View file

@ -53,7 +53,7 @@
@ stub I_RpcIfInqTransferSyntaxes @ stub I_RpcIfInqTransferSyntaxes
@ stub I_RpcLogEvent @ stub I_RpcLogEvent
@ stdcall I_RpcMapWin32Status(long) @ stdcall I_RpcMapWin32Status(long)
@ stub I_RpcNegotiateTransferSyntax # wxp @ stdcall I_RpcNegotiateTransferSyntax(ptr) # wxp
@ stub I_RpcNsBindingSetEntryName @ stub I_RpcNsBindingSetEntryName
@ stub I_RpcNsBindingSetEntryNameA @ stub I_RpcNsBindingSetEntryNameA
@ stub I_RpcNsBindingSetEntryNameW @ stub I_RpcNsBindingSetEntryNameW
@ -265,7 +265,7 @@
@ stdcall NdrRangeUnmarshall(ptr ptr ptr long) @ stdcall NdrRangeUnmarshall(ptr ptr ptr long)
@ stub NdrRpcSmClientAllocate @ stub NdrRpcSmClientAllocate
@ stub NdrRpcSmClientFree @ stub NdrRpcSmClientFree
@ stub NdrRpcSmSetClientToOsf @ stdcall NdrRpcSmSetClientToOsf(ptr)
@ stub NdrRpcSsDefaultAllocate @ stub NdrRpcSsDefaultAllocate
@ stub NdrRpcSsDefaultFree @ stub NdrRpcSsDefaultFree
@ stub NdrRpcSsDisableAllocate @ stub NdrRpcSsDisableAllocate