[okl4-developer] x86 syscall implementation
Harry Vennik
htvennik at zonnet.nl
Sat Nov 1 02:55:22 EST 2008
Op 31-okt-2008, om 11:25 heeft Carlos Eduardo Medaglia Dyonisio het
volgende geschreven:
> On Fri, 31 Oct 2008 10:52:36 +0100
> Harry Vennik <htvennik at zonnet.nl> wrote:
>
>> Hi,
>>
>> While trying to understand the syscall meganism for x86 I ran into
>> one remarkable line in the implementation of all syscalls in arch/
>> ia32/libs/l4/include/syscall.h (okl4 version 2.1).
>>
>> It is the following assembly line:
>>
>> " movl $0f, %%edi\n"
>>
>> what does the $0f mean??? Is it a simple hex value? (should be $0xf
>> then, i suppose) or is it something different?
>> And why is that value loaded into the EDI register?
>>
>> Regards,
>>
>> Harry
>>
>
> Hello Harry,
>
> Because of the way sysenter/sysexit works on ia-32, we have to pass
> the
> user's return IP and SP to kernel space in registers. In our
> implementation
> we chose to pass the user's return IP on %edi and the SP on %ebp. %eax
> contains the syscall number.
>
> Here is a piece of the code you are talking about:
>
> __SYSCALL_SAVE_REGS
> " movl $0f, %%edi\n"
> " movl %%esp, %%ebp\n"
> " movl $0x80000004, %%eax\n"
> " sysenter\n"
> "0:\n"
> __SYSCALL_RESTORE_REGS
>
> $0f is the address of the first tag 0, searching forward from the
> point where
> 0 was referenced (this is the reason of the 'f'. If it was for gcc
> to search
> for the first tag 0 backwards, it would be a 'b'), which is the tag
> just
> after sysenter, to where the syscall should return.
>
> I hope I made it clear... :)
>
> Cheers,
> Carlos
> --
> Carlos Eduardo Medaglia Dyonisio
> medaglia at ok-labs.com
> http://ok-labs.com/
>
>
Okay, I understand it now!
Thanks a lot!
Harry
More information about the Developer
mailing list