Re: [PATCH 5/6] x86: ia32entry.S: fold IA32_ARG_FIXUP macro into its callers
From: Andy Lutomirski
Date: Mon Feb 23 2015 - 19:35:59 EST
On Mon, Feb 23, 2015 at 4:12 PM, Denys Vlasenko <dvlasenk@xxxxxxxxxx> 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@xxxxxxxxxx>
> CC: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> CC: Oleg Nesterov <oleg@xxxxxxxxxx>
> CC: Borislav Petkov <bp@xxxxxxxxx>
> CC: "H. Peter Anvin" <hpa@xxxxxxxxx>
> CC: Andy Lutomirski <luto@xxxxxxxxxxxxxx>
> CC: Frederic Weisbecker <fweisbec@xxxxxxxxx>
> CC: X86 ML <x86@xxxxxxxxxx>
> CC: Alexei Starovoitov <ast@xxxxxxxxxxxx>
> CC: Will Drewry <wad@xxxxxxxxxxxx>
> CC: Kees Cook <keescook@xxxxxxxxxxxx>
> CC: linux-kernel@xxxxxxxxxxxxxxx
> ---
> 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@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/