Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date: Wed, 21 Feb 2018 10:47:47 +0000
From: Nicholas Wilson <nicholas.wilson@...lvnc.com>
To: "musl@...ts.openwall.com" <musl@...ts.openwall.com>
Subject: Re: [PATCH] Possible patch for __syscall_cp

On 21 February 2018 02:03, Rich Felker wrote:
> The macro suppression is intentional so that the stub version of
> __syscall_cp (only used in static linking without thread cancellation
> linked) is just a tail call to __syscall rather than a bunch of
> register shuffling. Being that the whole point of the stub version is
> to avoid the size cost of cancellation logic in small static linked
> programs, it doesn't make sense to make a change here.

OK, that makes sense. Thanks!

> musl ports should define an external (but hidden) function __syscall
> replacing (the empty) src/internal/syscall.c. Perhaps that file should
> actually be non-empty and look like the above, which would work
> (albeit suboptimally) for any arch that doesn't make an external call
> for __syscall6.
>
> Unfortunately there are some messy questions about how many arguments
> __syscall is called with and whether it's actually valid for it to be
> defined with a C function using va_arg rather than in asm. These are
> independent of whether we apply your patch or not, I think, and they
> should probably be fixed by ensuring that any place where the external
> __syscall is called actually passes 6 arguments, by adding dummy zero
> arguments to the __syscallN macros in the SYSCALL_NO_INLINE case, and
> in the syscall_arch.h files that use it.

I think that makes sense to me too. I've added the required stub to the Wasm port in this commit:
https://github.com/NWilson/musl/commit/7cd91fc86358076e601783144f242824afd984ec

I guess it makes sense for Wasm to provide this stub itself, since other arches won't be using it, and it's not likely to be useful to many other arches either.

Regarding passing the six args to __syscall, I think that does work already; __syscall_cp is the only place where __syscall is used with macro suppression, and it does use six args. All the other places go via the macros which are able pad the arguments to the correct length.

I'm happy with things staying as they are then in upstream Musl.

Thanks for the help,
Nick

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.