Kernel compatibility : syscall numbers
RFC 3/11 Kernel compatibility : syscall numbers
Continuing the discussion regarding syscalls, I have a question regarding vector 0x80.
As I mentionned earlier, my OS's internals are very different from Linux's, thus I have had a need for a few new syscalls. Since I wanted to avoid any collision with Linux, but I also wanted to keep the ability to put the syscall table in a single 4096-byte page on 64-bit computers (on which I hope to run one day), I chose to start taking syscall number 511, and to progress downwards - currently, I'm using numbers 511 through 501 included (with a hole at 503, but I'll likely fill it again in the future).
Is this okay for you? And in this case, if this isn't asking too much, could you avoid using them for now, to avoid any conflict?
Thank you!
Emmanuel
Quoted 12 lines · On Tue, 15 Apr 2014 15:42:51 +0200 Emmanuel Colbus <[email protected]> wrote:
Continuing the discussion regarding syscalls, I have a question regarding vector
0x80.As I mentionned earlier, my OS's internals are very different from Linux's, thus I have had a need for a few new syscalls. Since I wanted to avoid any collision with Linux, but I also wanted to keep the ability to put the syscall table in a single 4096-byte page on 64-bit computers (on which I hope to run one day), I chose to start taking syscall number 511, and to progress downwards - currently, I'm using numbers 511 through 501 included (with a hole at 503, but I'll likely fill it again in the future).
Quoted 2 lines
Is this okay for you? And in this case, if this isn't asking too much, could you avoid using them for now, to avoid any conflict?
I don't see why the question arises. Your non Linux ABI binaries will be the ones to use such calls. They can have a different ELF header to Linux binaries. Linux then won't even try and run them by mistake. At that point your worst case is Linux calls eventually collide with your own and you have two tables according to ABI.
Alan
Quoted 15 lines · One Thousand Gnomes
Quoted 12 lines · On Tue, 15 Apr 2014 15:42:51 +0200 Emmanuel Colbus <[email protected]> wrote:
Continuing the discussion regarding syscalls, I have a question regarding vector
0x80.As I mentionned earlier, my OS's internals are very different from Linux's, thus I have had a need for a few new syscalls. Since I wanted to avoid any collision with Linux, but I also wanted to keep the ability to put the syscall table in a single 4096-byte page on 64-bit computers (on which I hope to run one day), I chose to start taking syscall number 511, and to progress downwards - currently, I'm using numbers 511 through 501 included (with a hole at 503, but I'll likely fill it again in the future).
Quoted 8 lines
Quoted 2 lines
Is this okay for you? And in this case, if this isn't asking too much, could you avoid using them for now, to avoid any conflict?
I don't see why the question arises. Your non Linux ABI binaries will be the ones to use such calls. They can have a different ELF header to Linux binaries. Linux then won't even try and run them by mistake. At that point your worst case is Linux calls eventually collide with your own and you have two tables according to ABI.
Hmmm... I see your point... Currently, I simply use the Linux ELF header, and I hadn't even thought about using a different one. Indeed, using a different header seems like a good solution.
OK, unless a better idea arises, I think I'll use this solution.
Thanks!
Emmanuel
Quoted 5 lines · Emmanuel Colbus
I have a question regarding vector
0x80.As I mentionned earlier, my OS's internals are very different from Linux's, thus I have had a need for a few new syscalls. Since I wanted to avoid any collision with Linux
... you could just use another vector, such as 0x81.
Quoted 4 lines
but I also wanted to keep the ability to put the syscall table in a single 4096-byte page on 64-bit computers (on which I hope to run one day), I chose to start taking syscall number 511, and to progress downwards - currently, I'm using numbers 511 through 501 included
These implementation details do not need to show up in the interface:
int syscall_0x81(int nr, ...)
{
if (nr in range)
return table[511 - nr](...);
}
Regards,
Clemens
Quoted 23 lines · Clemens Ladisch
Quoted 5 lines · Emmanuel Colbus
I have a question regarding vector
0x80.As I mentionned earlier, my OS's internals are very different from Linux's, thus I have had a need for a few new syscalls. Since I wanted to avoid any collision with Linux
... you could just use another vector, such as
0x81.Quoted 4 lines
but I also wanted to keep the ability to put the syscall table in a single 4096-byte page on 64-bit computers (on which I hope to run one day), I chose to start taking syscall number 511, and to progress downwards - currently, I'm using numbers 511 through 501 included
These implementation details do not need to show up in the interface:
int
syscall_0x81(int nr, ...)
{
if (nr in range)
return table[511 - nr](...);
}
Quoted 3 lines
Regards,
Clemens
This would stop working as soon as I implemented any syscall/sysret or sysenter/sysexit-like thing, as this technique has no notion of a syscall vector.
Regards,
Emmanuel