About the Wine bug report...: "ils l'ont dans le XXX" ?
-----Message d'origine----- De : Ros-dev [mailto:ros-dev-bounces@reactos.org] De la part de Jérôme Gardou Envoyé : mercredi 4 février 2015 18:02 À : ros-dev@reactos.org Objet : Re: [ros-dev] [ros-diffs] [jgardou] 66161: [NTDLL] - use the edx register to store the function pointer to the syscall trampoline. This is how google Chrome checks if an exported function is a system call or not. See https:...
Uh, sorry for the horriblly long diff. I guess someone initially committed the file with CRLF file endings :-/
Le 04/02/2015 17:58, jgardou@svn.reactos.org a écrit :
Author: jgardou Date: Wed Feb 4 16:58:41 2015 New Revision: 66161
URL: http://svn.reactos.org/svn/reactos?rev=66161&view=rev Log: [NTDLL]
- use the edx register to store the function pointer to the syscall trampoline.
This is how google Chrome checks if an exported function is a system call or not. See https://chromium.googlesource.com/chromium/src.git/+/master/sandbox/wi n/src/service_resolver_32.cc and https://bugs.winehq.org/show_bug.cgi?id=21232 for details
Modified: trunk/reactos/include/asm/syscalls.inc
Modified: trunk/reactos/include/asm/syscalls.inc URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/asm/syscalls. inc?rev=66161&r1=66160&r2=66161&view=diff ============================================================================== --- trunk/reactos/include/asm/syscalls.inc [iso-8859-1] (original) +++ trunk/reactos/include/asm/syscalls.inc [iso-8859-1] Wed Feb 4 16:58:41 2015 @@ -1,109 +1,109 @@
-#ifdef _M_IX86 -#define KUSER_SHARED_SYSCALL HEX(7ffe0300) -#define KGDT_R0_CODE 8 -MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
- StackBytes = 4 * ArgCount
- FPO 0, 0, 0, 0, 0, FRAME_FPO
- mov eax, SyscallId
- mov ecx, KUSER_SHARED_SYSCALL
- call dword ptr [ecx]
- ret StackBytes
-ENDM -MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
- StackBytes = 4 * &ArgCount
- FPO 0, 0, 0, 0, 0, FRAME_FPO
- mov eax, SyscallId
- lea edx, [esp + 4]
- pushfd
- push KGDT_R0_CODE
- call _KiSystemService
- ret StackBytes
-ENDM -#elif defined(_M_AMD64) -MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
- .ENDPROLOG
- mov eax, SyscallId
- mov r10, rcx
- syscall
- ret
-ENDM -MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
- .ENDPROLOG
- EXTERN Nt&Name:PROC
- lea rax, Nt&Name[rip]
- mov r10, ArgCount * 8
- jmp KiZwSystemService
-ENDM -#elif defined(_M_ARM) -MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
- swi #SyscallId
- bx lr
-ENDM -MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
- mov ip, lr
- swi #SyscallId
- bx ip
-ENDM -#elif defined(_M_PPC) -MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
- stwu 1,-16(1)
- mflr 0
- stw 0,0(1)
- li 0, SyscallId
- sc
- lwz 0,0(1)
- mtlr 0
- addi 1,1,16
- blr
-ENDM -#define STUBCODE_K STUBCODE_U -#elif defined(_M_MIPS) -MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
- li $8, KUSER_SHARED_SYSCALL
- lw $8,0($8)
- j $8
- nop
-ENDM -MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
- j KiSystemService
- nop
-ENDM -#else -#error unsupported architecture -#endif
-#ifdef _M_IX86 -MACRO(MAKE_LABEL, Name, StackBytes)
- PUBLIC _&Name&@&StackBytes
- _&Name&@&StackBytes:
-ENDM -MACRO(START_PROC, Name, StackBytes)
- PUBLIC _&Name&@&StackBytes
- .PROC _&Name&@&StackBytes
-ENDM -#else -MACRO(MAKE_LABEL, Name, StackBytes)
- PUBLIC &Name
- &Name:
-ENDM -MACRO(START_PROC, Name, StackBytes)
- PUBLIC &Name
- .PROC &Name
-ENDM -#endif
-MACRO(STUB_U, Name, ArgCount)
- MAKE_LABEL Zw&Name, %ArgCount * 4
- START_PROC Nt&Name, %ArgCount * 4
- STUBCODE_U Name, SyscallId, %ArgCount
- .ENDP
- SyscallId = SyscallId + 1
-ENDM
-MACRO(STUB_K, Name, ArgCount)
- START_PROC Zw&Name, %ArgCount * 4
- STUBCODE_K Name, SyscallId, %ArgCount
- .ENDP
- SyscallId = SyscallId + 1
-ENDM
+#ifdef _M_IX86 +#define KUSER_SHARED_SYSCALL HEX(7ffe0300) #define KGDT_R0_CODE 8 +MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
- StackBytes = 4 * ArgCount
- FPO 0, 0, 0, 0, 0, FRAME_FPO
- mov eax, SyscallId
- mov edx, KUSER_SHARED_SYSCALL
- call dword ptr [edx]
- ret StackBytes
+ENDM +MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
- StackBytes = 4 * &ArgCount
- FPO 0, 0, 0, 0, 0, FRAME_FPO
- mov eax, SyscallId
- lea edx, [esp + 4]
- pushfd
- push KGDT_R0_CODE
- call _KiSystemService
- ret StackBytes
+ENDM +#elif defined(_M_AMD64) +MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
- .ENDPROLOG
- mov eax, SyscallId
- mov r10, rcx
- syscall
- ret
+ENDM +MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
- .ENDPROLOG
- EXTERN Nt&Name:PROC
- lea rax, Nt&Name[rip]
- mov r10, ArgCount * 8
- jmp KiZwSystemService
+ENDM +#elif defined(_M_ARM) +MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
- swi #SyscallId
- bx lr
+ENDM +MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
- mov ip, lr
- swi #SyscallId
- bx ip
+ENDM +#elif defined(_M_PPC) +MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
- stwu 1,-16(1)
- mflr 0
- stw 0,0(1)
- li 0, SyscallId
- sc
- lwz 0,0(1)
- mtlr 0
- addi 1,1,16
- blr
+ENDM +#define STUBCODE_K STUBCODE_U +#elif defined(_M_MIPS) +MACRO(STUBCODE_U, Name, SyscallId, ArgCount)
- li $8, KUSER_SHARED_SYSCALL
- lw $8,0($8)
- j $8
- nop
+ENDM +MACRO(STUBCODE_K, Name, SyscallId, ArgCount)
- j KiSystemService
- nop
+ENDM +#else +#error unsupported architecture +#endif
+#ifdef _M_IX86 +MACRO(MAKE_LABEL, Name, StackBytes)
- PUBLIC _&Name&@&StackBytes
- _&Name&@&StackBytes:
+ENDM +MACRO(START_PROC, Name, StackBytes)
- PUBLIC _&Name&@&StackBytes
- .PROC _&Name&@&StackBytes
+ENDM +#else +MACRO(MAKE_LABEL, Name, StackBytes)
- PUBLIC &Name
- &Name:
+ENDM +MACRO(START_PROC, Name, StackBytes)
- PUBLIC &Name
- .PROC &Name
+ENDM +#endif
+MACRO(STUB_U, Name, ArgCount)
- MAKE_LABEL Zw&Name, %ArgCount * 4
- START_PROC Nt&Name, %ArgCount * 4
- STUBCODE_U Name, SyscallId, %ArgCount
- .ENDP
- SyscallId = SyscallId + 1
+ENDM
+MACRO(STUB_K, Name, ArgCount)
- START_PROC Zw&Name, %ArgCount * 4
- STUBCODE_K Name, SyscallId, %ArgCount
- .ENDP
- SyscallId = SyscallId + 1
+ENDM
_______________________________________________ Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev