Not really. They still could use the same trampoline mechanism, with a function pointer to some kind of user-mode dispatcher, like we and windows do with the syscall dispatcher. They just understandably don't care enough to do it.
Le 04/02/2015 18:36, Hermès BÉLUSCA - MAÏTO a écrit : > About the Wine bug report...: "ils l'ont dans le XXX" ? > > -----Message d'origine----- > De : Ros-dev [mailto:ros-dev-boun...@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, jgar...@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 > > _______________________________________________ > Ros-dev mailing list > Ros-dev@reactos.org > http://www.reactos.org/mailman/listinfo/ros-dev > _______________________________________________ Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev