Commit b6efd13e authored by Alexandre Julliard's avatar Alexandre Julliard

rpcrt4: Add call frame annotations in x86 assembly code.

parent 0cb406ef
...@@ -76,8 +76,10 @@ struct thunk { ...@@ -76,8 +76,10 @@ struct thunk {
extern void call_stubless_func(void); extern void call_stubless_func(void);
__ASM_GLOBAL_FUNC(call_stubless_func, __ASM_GLOBAL_FUNC(call_stubless_func,
"pushl %esp\n\t" /* pointer to index */ "pushl %esp\n\t" /* pointer to index */
__ASM_CFI(".cfi_adjust_cfa_offset 4\n\t")
"call " __ASM_NAME("ObjectStubless") __ASM_STDCALL(4) "\n\t" "call " __ASM_NAME("ObjectStubless") __ASM_STDCALL(4) "\n\t"
"popl %edx\n\t" /* args size */ "popl %edx\n\t" /* args size */
__ASM_CFI(".cfi_adjust_cfa_offset -4\n\t")
"movl (%esp),%ecx\n\t" /* return address */ "movl (%esp),%ecx\n\t" /* return address */
"addl %edx,%esp\n\t" "addl %edx,%esp\n\t"
"jmp *%ecx" ); "jmp *%ecx" );
......
...@@ -867,9 +867,14 @@ __declspec(naked) LONG_PTR __cdecl call_server_func(SERVER_ROUTINE func, unsigne ...@@ -867,9 +867,14 @@ __declspec(naked) LONG_PTR __cdecl call_server_func(SERVER_ROUTINE func, unsigne
LONG_PTR __cdecl call_server_func(SERVER_ROUTINE func, unsigned char * args, unsigned int stack_size); LONG_PTR __cdecl call_server_func(SERVER_ROUTINE func, unsigned char * args, unsigned int stack_size);
__ASM_GLOBAL_FUNC(call_server_func, __ASM_GLOBAL_FUNC(call_server_func,
"pushl %ebp\n\t" "pushl %ebp\n\t"
"movl %esp, %ebp\n\t" __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t")
__ASM_CFI(".cfi_rel_offset %ebp,0\n\t")
"movl %esp,%ebp\n\t"
__ASM_CFI(".cfi_def_cfa_register %ebp\n\t")
"pushl %edi\n\t" /* Save registers */ "pushl %edi\n\t" /* Save registers */
__ASM_CFI(".cfi_rel_offset %edi,-4\n\t")
"pushl %esi\n\t" "pushl %esi\n\t"
__ASM_CFI(".cfi_rel_offset %esi,-8\n\t")
"movl 16(%ebp), %eax\n\t" /* Get stack size */ "movl 16(%ebp), %eax\n\t" /* Get stack size */
"subl %eax, %esp\n\t" /* Make room in stack for arguments */ "subl %eax, %esp\n\t" /* Make room in stack for arguments */
"andl $~15, %esp\n\t" /* Make sure stack has 16-byte alignment for Mac OS X */ "andl $~15, %esp\n\t" /* Make sure stack has 16-byte alignment for Mac OS X */
...@@ -882,9 +887,13 @@ __ASM_GLOBAL_FUNC(call_server_func, ...@@ -882,9 +887,13 @@ __ASM_GLOBAL_FUNC(call_server_func,
"call *8(%ebp)\n\t" /* Call function */ "call *8(%ebp)\n\t" /* Call function */
"leal -8(%ebp), %esp\n\t" /* Restore stack */ "leal -8(%ebp), %esp\n\t" /* Restore stack */
"popl %esi\n\t" /* Restore registers */ "popl %esi\n\t" /* Restore registers */
__ASM_CFI(".cfi_same_value %esi\n\t")
"popl %edi\n\t" "popl %edi\n\t"
__ASM_CFI(".cfi_same_value %edi\n\t")
"popl %ebp\n\t" "popl %ebp\n\t"
"ret\n" ) __ASM_CFI(".cfi_def_cfa %esp,4\n\t")
__ASM_CFI(".cfi_same_value %ebp\n\t")
"ret" )
#else #else
#warning call_server_func not implemented for your architecture #warning call_server_func not implemented for your architecture
LONG_PTR __cdecl call_server_func(SERVER_ROUTINE func, unsigned char * args, unsigned short stack_size) LONG_PTR __cdecl call_server_func(SERVER_ROUTINE func, unsigned char * args, unsigned short stack_size)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment