|
Lines 180-185
rff_trace:
Link Here
|
| 180 |
* |
180 |
* |
| 181 |
* XXX if we had a free scratch register we could save the RSP into the stack frame |
181 |
* XXX if we had a free scratch register we could save the RSP into the stack frame |
| 182 |
* and report it properly in ps. Unfortunately we haven't. |
182 |
* and report it properly in ps. Unfortunately we haven't. |
|
|
183 |
* |
| 184 |
* When user can change the frames always force IRET. That is because |
| 185 |
* it deals with uncanonical addresses better. SYSRET has trouble |
| 186 |
* with them due to bugs in both AMD and Intel CPUs. |
| 183 |
*/ |
187 |
*/ |
| 184 |
|
188 |
|
| 185 |
ENTRY(system_call) |
189 |
ENTRY(system_call) |
|
Lines 254-260
sysret_signal:
Link Here
|
| 254 |
xorl %esi,%esi # oldset -> arg2 |
258 |
xorl %esi,%esi # oldset -> arg2 |
| 255 |
call ptregscall_common |
259 |
call ptregscall_common |
| 256 |
1: movl $_TIF_NEED_RESCHED,%edi |
260 |
1: movl $_TIF_NEED_RESCHED,%edi |
| 257 |
jmp sysret_check |
261 |
/* Use IRET because user could have changed frame. This |
|
|
262 |
works because ptregscall_common has called FIXUP_TOP_OF_STACK. */ |
| 263 |
cli |
| 264 |
jmp int_with_check |
| 258 |
|
265 |
|
| 259 |
badsys: |
266 |
badsys: |
| 260 |
movq $-ENOSYS,RAX-ARGOFFSET(%rsp) |
267 |
movq $-ENOSYS,RAX-ARGOFFSET(%rsp) |
|
Lines 280-286
tracesys:
Link Here
|
| 280 |
call syscall_trace_leave |
287 |
call syscall_trace_leave |
| 281 |
RESTORE_TOP_OF_STACK %rbx |
288 |
RESTORE_TOP_OF_STACK %rbx |
| 282 |
RESTORE_REST |
289 |
RESTORE_REST |
| 283 |
jmp ret_from_sys_call |
290 |
/* Use IRET because user could have changed frame */ |
|
|
291 |
jmp int_ret_from_sys_call |
| 284 |
CFI_ENDPROC |
292 |
CFI_ENDPROC |
| 285 |
|
293 |
|
| 286 |
/* |
294 |
/* |