|
@@ -652,6 +652,20 @@ ENTRY(stub_execve)
|
|
|
CFI_ENDPROC
|
|
|
END(stub_execve)
|
|
|
|
|
|
+ENTRY(stub_execveat)
|
|
|
+ CFI_STARTPROC
|
|
|
+ addq $8, %rsp
|
|
|
+ PARTIAL_FRAME 0
|
|
|
+ SAVE_REST
|
|
|
+ FIXUP_TOP_OF_STACK %r11
|
|
|
+ call sys_execveat
|
|
|
+ RESTORE_TOP_OF_STACK %r11
|
|
|
+ movq %rax,RAX(%rsp)
|
|
|
+ RESTORE_REST
|
|
|
+ jmp int_ret_from_sys_call
|
|
|
+ CFI_ENDPROC
|
|
|
+END(stub_execveat)
|
|
|
+
|
|
|
/*
|
|
|
* sigreturn is special because it needs to restore all registers on return.
|
|
|
* This cannot be done with SYSRET, so use the IRET return path instead.
|
|
@@ -697,6 +711,20 @@ ENTRY(stub_x32_execve)
|
|
|
CFI_ENDPROC
|
|
|
END(stub_x32_execve)
|
|
|
|
|
|
+ENTRY(stub_x32_execveat)
|
|
|
+ CFI_STARTPROC
|
|
|
+ addq $8, %rsp
|
|
|
+ PARTIAL_FRAME 0
|
|
|
+ SAVE_REST
|
|
|
+ FIXUP_TOP_OF_STACK %r11
|
|
|
+ call compat_sys_execveat
|
|
|
+ RESTORE_TOP_OF_STACK %r11
|
|
|
+ movq %rax,RAX(%rsp)
|
|
|
+ RESTORE_REST
|
|
|
+ jmp int_ret_from_sys_call
|
|
|
+ CFI_ENDPROC
|
|
|
+END(stub_x32_execveat)
|
|
|
+
|
|
|
#endif
|
|
|
|
|
|
/*
|