On Mon, Feb 23, 2015 at 4:12 PM, Denys Vlasenko <[email protected]> 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 <[email protected]> > CC: Linus Torvalds <[email protected]> > CC: Oleg Nesterov <[email protected]> > CC: Borislav Petkov <[email protected]> > CC: "H. Peter Anvin" <[email protected]> > CC: Andy Lutomirski <[email protected]> > CC: Frederic Weisbecker <[email protected]> > CC: X86 ML <[email protected]> > CC: Alexei Starovoitov <[email protected]> > CC: Will Drewry <[email protected]> > CC: Kees Cook <[email protected]> > CC: [email protected] > --- > 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 [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

