|
@@ -828,23 +828,6 @@ int_restore_rest:
|
|
|
CFI_ENDPROC
|
|
|
END(system_call)
|
|
|
|
|
|
-/*
|
|
|
- * Certain special system calls that need to save a complete full stack frame.
|
|
|
- */
|
|
|
- .macro PTREGSCALL label,func,arg
|
|
|
-ENTRY(\label)
|
|
|
- PARTIAL_FRAME 1 8 /* offset 8: return address */
|
|
|
- subq $REST_SKIP, %rsp
|
|
|
- CFI_ADJUST_CFA_OFFSET REST_SKIP
|
|
|
- call save_rest
|
|
|
- DEFAULT_FRAME 0 8 /* offset 8: return address */
|
|
|
- leaq 8(%rsp), \arg /* pt_regs pointer */
|
|
|
- call \func
|
|
|
- jmp ptregscall_common
|
|
|
- CFI_ENDPROC
|
|
|
-END(\label)
|
|
|
- .endm
|
|
|
-
|
|
|
.macro FORK_LIKE func
|
|
|
ENTRY(stub_\func)
|
|
|
CFI_STARTPROC
|
|
@@ -861,10 +844,22 @@ ENTRY(stub_\func)
|
|
|
END(stub_\func)
|
|
|
.endm
|
|
|
|
|
|
+ .macro FIXED_FRAME label,func
|
|
|
+ENTRY(\label)
|
|
|
+ CFI_STARTPROC
|
|
|
+ PARTIAL_FRAME 0 8 /* offset 8: return address */
|
|
|
+ FIXUP_TOP_OF_STACK %r11, 8-ARGOFFSET
|
|
|
+ call \func
|
|
|
+ RESTORE_TOP_OF_STACK %r11, 8-ARGOFFSET
|
|
|
+ ret
|
|
|
+ CFI_ENDPROC
|
|
|
+END(\label)
|
|
|
+ .endm
|
|
|
+
|
|
|
FORK_LIKE clone
|
|
|
FORK_LIKE fork
|
|
|
FORK_LIKE vfork
|
|
|
- PTREGSCALL stub_iopl, sys_iopl, %rsi
|
|
|
+ FIXED_FRAME stub_iopl, sys_iopl
|
|
|
|
|
|
ENTRY(ptregscall_common)
|
|
|
DEFAULT_FRAME 1 8 /* offset 8: return address */
|