Skip to contentSkip to conversation

Kernel compatibility : syscall numbers

RFC In review Emmanuel Colbus 3 participants 5 messages Apr 15, 2014 – Apr 16, 2014

lore
Share & tools
lore
#0 lore raw

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

#1 lore raw
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

#2 lore raw
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

#3 lore raw
In reply to Emmanuel Colbus
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

#4 lore raw
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