In x86 there are at least three different ways to call a system
call, int $0x80, sysenter, and syscall. In 64 bit mode I think syscall
is pretty much guaranteed to be there so glibc uses it directly, or at
least that's been my experience. For 32 bit x86, though, sysenter, the
preferred of the two remaining instructions, is not necessarily present
or enabled. What Linux does to handle this situation is that there's a
vsyscall page which the kernel defines and which is mapped into the user
level process at an address the kernel provides through an auxiliary
vector on the initial stack frame. When it wants to do a system call, it
jumps to the right location on the vsyscall page and the right
instruction is there. Otherwise, system calls happen through the
relatively slow int $0x80 interface.

    This is generally fine and it's not hard to put that page in place
and put something useful on it, but in order to exactly match native
execution in M5 I need to put the exact same instructions on my vsyscall
page as appears in Linux. I don't know how this all works as far as
licensing goes. Do we have to use GPL if I copy the bytes that implement
a portion of that page into M5 for compatibility?

Gabe
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to