[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CALCETrVYNHx=nTLugHfJm+KxjsJFZSgtwgQ+MOZE_tYpW0+3kA@mail.gmail.com>
Date: Mon, 23 Feb 2015 16:35:33 -0800
From: Andy Lutomirski <luto@...capital.net>
To: Denys Vlasenko <dvlasenk@...hat.com>
Cc: Linus Torvalds <torvalds@...ux-foundation.org>,
Oleg Nesterov <oleg@...hat.com>,
Borislav Petkov <bp@...en8.de>,
"H. Peter Anvin" <hpa@...or.com>,
Frederic Weisbecker <fweisbec@...il.com>,
X86 ML <x86@...nel.org>, Alexei Starovoitov <ast@...mgrid.com>,
Will Drewry <wad@...omium.org>,
Kees Cook <keescook@...omium.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH 5/6] x86: ia32entry.S: fold IA32_ARG_FIXUP macro into its callers
On Mon, Feb 23, 2015 at 4:12 PM, Denys Vlasenko <dvlasenk@...hat.com> wrote:
> Use of a small macro - one with conditional expansion - does more harm
> than good. It obfuscates code, with minimal code reuse.
>
> For example, because of obfuscation it's not obvious that
> in ia32_sysenter_target, we can optimize loading of r9 -
> currently it is loaded with a detour through ebp.
>
> This patch folds IA32_ARG_FIXUP macro into its callers.
>
> No code changes.
>
Applied.
> Signed-off-by: Denys Vlasenko <dvlasenk@...hat.com>
> CC: Linus Torvalds <torvalds@...ux-foundation.org>
> CC: Oleg Nesterov <oleg@...hat.com>
> CC: Borislav Petkov <bp@...en8.de>
> CC: "H. Peter Anvin" <hpa@...or.com>
> CC: Andy Lutomirski <luto@...capital.net>
> CC: Frederic Weisbecker <fweisbec@...il.com>
> CC: X86 ML <x86@...nel.org>
> CC: Alexei Starovoitov <ast@...mgrid.com>
> CC: Will Drewry <wad@...omium.org>
> CC: Kees Cook <keescook@...omium.org>
> CC: linux-kernel@...r.kernel.org
> ---
> arch/x86/ia32/ia32entry.S | 32 ++++++++++++++++++--------------
> 1 file changed, 18 insertions(+), 14 deletions(-)
>
> diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S
> index b567056..6dcd372 100644
> --- a/arch/x86/ia32/ia32entry.S
> +++ b/arch/x86/ia32/ia32entry.S
> @@ -30,17 +30,6 @@
>
> .section .entry.text, "ax"
>
> - .macro IA32_ARG_FIXUP noebp=0
> - movl %edi,%r8d
> - .if \noebp
> - .else
> - movl %ebp,%r9d
> - .endif
> - xchg %ecx,%esi
> - movl %ebx,%edi
> - movl %edx,%edx /* zero extension */
> - .endm
> -
> /* clobbers %rax */
> .macro CLEAR_RREGS _r9=rax
> xorl %eax,%eax
> @@ -178,7 +167,12 @@ sysenter_flags_fixed:
> cmpq $(IA32_NR_syscalls-1),%rax
> ja ia32_badsys
> sysenter_do_call:
> - IA32_ARG_FIXUP
> + /* 32bit syscall -> 64bit C ABI argument conversion */
> + movl %edi,%r8d /* arg5 */
> + movl %ebp,%r9d /* arg6 */
> + xchg %ecx,%esi /* rsi:arg2, rcx:arg4 */
> + movl %ebx,%edi /* arg1 */
> + movl %edx,%edx /* arg3 (zero extension) */
> sysenter_dispatch:
> call *ia32_sys_call_table(,%rax,8)
> movq %rax,RAX(%rsp)
> @@ -360,7 +354,12 @@ ENTRY(ia32_cstar_target)
> cmpq $IA32_NR_syscalls-1,%rax
> ja ia32_badsys
> cstar_do_call:
> - IA32_ARG_FIXUP 1
> + /* 32bit syscall -> 64bit C ABI argument conversion */
> + movl %edi,%r8d /* arg5 */
> + /* r9 already loaded */ /* arg6 */
> + xchg %ecx,%esi /* rsi:arg2, rcx:arg4 */
> + movl %ebx,%edi /* arg1 */
> + movl %edx,%edx /* arg3 (zero extension) */
> cstar_dispatch:
> call *ia32_sys_call_table(,%rax,8)
> movq %rax,RAX(%rsp)
> @@ -477,7 +476,12 @@ ENTRY(ia32_syscall)
> cmpq $(IA32_NR_syscalls-1),%rax
> ja ia32_badsys
> ia32_do_call:
> - IA32_ARG_FIXUP
> + /* 32bit syscall -> 64bit C ABI argument conversion */
> + movl %edi,%r8d /* arg5 */
> + movl %ebp,%r9d /* arg6 */
> + xchg %ecx,%esi /* rsi:arg2, rcx:arg4 */
> + movl %ebx,%edi /* arg1 */
> + movl %edx,%edx /* arg3 (zero extension) */
> call *ia32_sys_call_table(,%rax,8) # xxx: rip relative
> ia32_sysret:
> movq %rax,RAX(%rsp)
> --
> 1.8.1.4
>
--
Andy Lutomirski
AMA Capital Management, LLC
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists