We merge this branch because x86/debug touches code that we started
cleaning up in x86/irq. The two branches started out independent,
but as unexpected amount of activity went into x86/irq, they became
dependent. Resolve that by this cross-merge.
        call schedule_tail
        GET_THREAD_INFO(%rcx)
        testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),TI_flags(%rcx)
+       CFI_REMEMBER_STATE
        jnz rff_trace
 -rff_action:   
 +rff_action:
        RESTORE_REST
        testl $3,CS-ARGOFFSET(%rsp)     # from kernel_thread?
        je   int_ret_from_sys_call
        testl $_TIF_IA32,TI_flags(%rcx)
        jnz  int_ret_from_sys_call
 -      RESTORE_TOP_OF_STACK %rdi,ARGOFFSET
 +      RESTORE_TOP_OF_STACK %rdi, -ARGOFFSET
        jmp ret_from_sys_call
+       CFI_RESTORE_STATE
  rff_trace:
        movq %rsp,%rdi
        call syscall_trace_leave
        # exit
        mov %eax, %edi
        call do_exit
+       ud2                     # padding for call trace
        CFI_ENDPROC
 -ENDPROC(child_rip)
 +END(child_rip)
  
  /*
   * execve(). This function needs to use IRET, not SYSRET, to set up all state properly.