2014-04-15 13:55:15

by Emmanuel Colbus

[permalink] [raw]
Subject: [RFC][3/11][MANUX] 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


2014-04-15 15:02:24

by Alan Cox

[permalink] [raw]
Subject: Re: [RFC][3/11][MANUX] Kernel compatibility : syscall numbers

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).
>
> 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

2014-04-15 15:10:37

by Emmanuel Colbus

[permalink] [raw]
Subject: Re: [RFC][3/11][MANUX] Kernel compatibility : syscall numbers

Le 15/04/2014 17:02, One Thousand Gnomes a ?crit :
> 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).
>>
>> 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

2014-04-16 07:03:46

by Clemens Ladisch

[permalink] [raw]
Subject: Re: [RFC][3/11][MANUX] Kernel compatibility : syscall numbers

Emmanuel Colbus wrote:
> 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.

> 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

2014-04-16 10:30:12

by Emmanuel Colbus

[permalink] [raw]
Subject: Re: [RFC][3/11][MANUX] Kernel compatibility : syscall numbers

Le 16/04/2014 09:03, Clemens Ladisch a ?crit :
> Emmanuel Colbus wrote:
>> 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.
>
>> 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
>

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