On Tue, May 17, 2005 at 01:56:55PM -0400, Young Koh wrote:
the tracer (UML kernel) saves and restores the tracee's registers using ptrace() in order to get syscall paramaters and save the return value. while doing this, the tracer would need to care about only six registers(eax, ebx, ecx, edx, esi, and edi) used for the syscall parameter passing. I think, the tracer doesn't have to save all the registers of the tracee, because the tracer will execute the syscall for the tracee and the context of tracee will not be affected.
This is true, but it's easier to get all of the GP registers than it is to selectively grab the syscall-related ones.
but, in arch/um/kernel/skas/process.c, move_registers() function gets and sets even floating point registers, which i don't think will be affected by the system call execution. i tested and ran a UML kernel with the second ptrace() (used for floating point registers) commented out, it seems to work. (probably only for SKAS mode)
Yeah, this is reasonable. You have to be careful that you save and restore any registers that might be used by one of the stubs, but they don't use FP.
I also thought about not saving FP-regs on each kernel entry. But if you do this optimization, you need to save / restore FP-regs on switch_to. Also you need to get the FP-regs when setting up a signal-handler stackframe. And they have to be restored on sys_(rt_)sigreturn from the values found in the stackframe. I hope, I didn't miss some other places that would need adaption.
As s390 can give me regs and FP-regs in one single ptrace call, I decided to not do this optimization. Maybe for i386 and x86_64 it would be worth the cost.
Bodo
Jeff
------------------------------------------------------- This SF.Net email is sponsored by Oracle Space Sweepstakes Want to be the first software developer in space? Enter now for the Oracle Space Sweepstakes! http://ads.osdn.com/?ad_id=7412&alloc_id=16344&op=click _______________________________________________ User-mode-linux-devel mailing list User-mode-linux-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel