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(a)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(a)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(a)reactos.org