mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Nicholas Piggin <npiggin@gmail.com>
To: Adhemerval Zanella <adhemerval.zanella@linaro.org>,
	Rich Felker <dalias@libc.org>,
	David Laight <David.Laight@ACULAB.COM>
Cc: "libc-alpha@sourceware.org" <libc-alpha@sourceware.org>,
	"libc-dev@lists.llvm.org" <libc-dev@lists.llvm.org>,
	"linuxppc-dev@lists.ozlabs.org" <linuxppc-dev@lists.ozlabs.org>,
	"musl@lists.openwall.com" <musl@lists.openwall.com>,
	Segher Boessenkool <segher@kernel.crashing.org>
Subject: [musl] Re: Powerpc Linux 'scv' system call ABI proposal take 2
Date: Wed, 22 Apr 2020 16:54:18 +1000	[thread overview]
Message-ID: <1587536988.ivnp421w2w.astroid@bobo.none> (raw)
In-Reply-To: <960127e0-57a0-55b4-f309-ae0a675c7756@linaro.org>

Let me try to summarise what we have.

- vdso style call is ruled out as unnecessary with possible security 
  concerns. Caller can internally use indirect branch to select variant 
  if it wants to use that mechanism to select.

- LR clobber seems to handled okay by gcc. It can increase size of small 
  leaf wrapper functions, but they can use the caller stack frame for 
  this (and even red zone for saving other things if necessary), but not 
  a huge amount.

- -ve error return seems to be favoured by everyone. Experimentally, 
  it's better for musl (but musl could probably improve cr0[SO] error 
  handling a bit 'asm goto').

- Preserving syscall args and volatiles up to r8 is a small but 
  noticable help for cases that inline the call rather than always call 
  wrappers. This is unlikely to be helpful unless 'sc' support is 
  compiled out but I'll consider doing it for the long term. Next step 
  is to trace and test on real hardware.

- One thing that nobody has really asked about is error handling for 
  unsupported scv vectors, so I would like to just go over it:

Today, the scv facility is disabled by the kernel (FSCR[SCV] is 
cleared), which makes any `scv` instruction take a facility
unavailable, which ends up printing a kernel message about SCV
facility unavilable, and SIGILL's the process with ILL_ILLOPC.

Enabling 'scv 0' will enable 1-127 as well, so the kernel has to handle 
those somehow.

What we are saying is that we will allocate HWCAP bits in future if we 
implement more scv vectors, so userspace is not *supposed* to rely on 
this, but kernel has to choose some behaviour for invalid vectors.

My proposal was to do the same SIGILL (with no kernel facility message),
so it appears to behave the same way to userspace as it does now. There 
is also the ILL_ILLOPN code that could be used as invalid operand, but
powerpc does not use this much, and e.g., the static instruction 
coded operands e.g., invalid mfspr generate ILL_ILLOPC so we could 
consider the entire instruction as the opcode, and input register values 
as operands.

Now I don't know why a process would want to distinguish between 
FSCR[SCV]=0 and the case where it is enabled but kernel doesn't 
implement the vector, but maybe it does?

Another option would be to use a different signal. I don't see that any 
are more suitable.

Or return without a signal but -ENOSYS or something in r3. This doesn't 
seem so good because an invalid scv vector is not a system call, and a 
failure ABI would constrain any future implementation just a little bit.

Any objections to SIGILL ILL_ILLOPC?

Thanks,
Nick

  parent reply	other threads:[~2020-04-22  6:57 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-15 21:45 [musl] " Nicholas Piggin
2020-04-15 22:55 ` Rich Felker
2020-04-16  0:16   ` Nicholas Piggin
2020-04-16  0:48     ` Rich Felker
2020-04-16  2:24       ` Nicholas Piggin
2020-04-16  2:35         ` Rich Felker
2020-04-16  2:53           ` Nicholas Piggin
2020-04-16  3:03             ` Rich Felker
2020-04-16  3:41               ` Nicholas Piggin
2020-04-16 20:18             ` Florian Weimer
2020-04-16  9:58     ` Szabolcs Nagy
2020-04-20  0:27       ` Nicholas Piggin
2020-04-20  1:29         ` Rich Felker
2020-04-20  2:08           ` Nicholas Piggin
2020-04-20 21:17             ` Szabolcs Nagy
2020-04-21  9:57               ` Florian Weimer
2020-04-16 15:21     ` Jeffrey Walton
2020-04-16 15:40       ` Rich Felker
2020-04-16  4:48   ` Florian Weimer
2020-04-16 15:35     ` Rich Felker
2020-04-16 16:42       ` Florian Weimer
2020-04-16 16:52         ` Rich Felker
2020-04-16 18:12           ` Florian Weimer
2020-04-16 23:02             ` Segher Boessenkool
2020-04-17  0:34               ` Rich Felker
2020-04-17  1:48                 ` Segher Boessenkool
2020-04-17  8:34                   ` Florian Weimer
2020-04-16 14:16   ` Adhemerval Zanella
2020-04-16 15:37     ` Rich Felker
2020-04-16 17:50       ` Adhemerval Zanella
2020-04-16 17:59         ` Rich Felker
2020-04-16 18:18           ` Adhemerval Zanella
2020-04-16 18:31             ` Rich Felker
2020-04-16 18:44               ` Rich Felker
2020-04-16 18:52               ` Adhemerval Zanella
2020-04-20  0:46                 ` Nicholas Piggin
2020-04-20  1:10               ` Nicholas Piggin
2020-04-20  1:34                 ` Rich Felker
2020-04-20  2:32                   ` Nicholas Piggin
2020-04-20  4:09                     ` Rich Felker
2020-04-20  4:31                       ` Nicholas Piggin
2020-04-20 17:27                         ` Rich Felker
2020-04-22  6:18                           ` Nicholas Piggin
2020-04-22  6:29                             ` Nicholas Piggin
2020-04-23  2:36                             ` Rich Felker
2020-04-23 12:13                               ` Adhemerval Zanella
2020-04-23 16:18                                 ` Rich Felker
2020-04-23 16:35                                   ` Adhemerval Zanella
2020-04-23 16:43                                     ` Rich Felker
2020-04-23 17:15                                       ` Adhemerval Zanella
2020-04-23 17:42                                         ` Rich Felker
2020-04-25  3:40                                           ` Nicholas Piggin
2020-04-25  4:52                                             ` Rich Felker
2020-04-25  3:30                               ` Nicholas Piggin
2020-04-21 12:28                 ` David Laight
2020-04-21 14:39                   ` Rich Felker
2020-04-21 15:00                     ` Adhemerval Zanella
2020-04-21 15:31                       ` David Laight
2020-04-22  6:54                       ` Nicholas Piggin [this message]
2020-04-22  7:15                         ` [musl] " Florian Weimer
2020-04-22  7:31                           ` Nicholas Piggin
2020-04-22  8:11                             ` Florian Weimer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1587536988.ivnp421w2w.astroid@bobo.none \
    --to=npiggin@gmail.com \
    --cc=David.Laight@ACULAB.COM \
    --cc=adhemerval.zanella@linaro.org \
    --cc=dalias@libc.org \
    --cc=libc-alpha@sourceware.org \
    --cc=libc-dev@lists.llvm.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=musl@lists.openwall.com \
    --cc=segher@kernel.crashing.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).