From: Segher Boessenkool <segher@kernel.crashing.org>
To: Nicholas Piggin <npiggin@gmail.com>
Cc: Florian Weimer <fweimer@redhat.com>,
libc-alpha@sourceware.org,
Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>,
linuxppc-dev@lists.ozlabs.org
Subject: Re: powerpc Linux scv support and scv system call ABI proposal
Date: Tue, 28 Jan 2020 09:40:26 -0600 [thread overview]
Message-ID: <20200128154026.GI22482@gate.crashing.org> (raw)
In-Reply-To: <1580218232.2tezmthp1x.astroid@bobo.none>
On Wed, Jan 29, 2020 at 12:05:40AM +1000, Nicholas Piggin wrote:
> Florian Weimer's on January 28, 2020 11:09 pm:
> > But I don't think we are so lucky for the inline system calls. GCC
> > recognizes an "lr" clobber with inline asm (even though it is not
> > documented), but it generates rather strange assembler output as a
> > result:
> > std 0,16(1)
> > ori 2,2,0
> > ld 0,16(1)
> > That's with GCC 8.3 at -O2. I don't understand what the ori is about.
>
> ori 2,2,0 is the group terminating nop hint for POWER8 type cores
> which had dispatch grouping rules.
Yup. GCC generates that here to force the load into a different
scheduling group than the corresponding store is, because that otherwise
would cause very expensive pipeline flushes. It does that if it knows it
is the same address (like here).
> > I don't think we can save LR in a regular register around the system
> > call, explicitly in the inline asm statement, because we still have to
> > generate proper unwinding information using CFI directives, something
> > that you cannot do from within the asm statement.
Why not?
> >> - Error handling: use of CR0[SO] to indicate error requires a mtcr / mtocr
> >> instruction on the kernel side, and it is currently not implemented well
> >> in glibc, requiring a mfcr (mfocr should be possible and asm goto support
> >> would allow a better implementation). Is it worth continuing this style of
> >> error handling? Or just move to -ve return means error? Using a different
> >> bit would allow the kernel to piggy back the CR return code setting with
> >> a test for the error case exit.
> >
> > GCC does not model the condition registers,
Huh? It does model the condition register, as 8 registers in GCC's
internal model (one each for CR0..CR7).
There is no way to use CR0 across function calls, with our ABIs: it is
a volatile register.
GCC does not model the SO bits in the CR fields.
If the calling convention would only use registers GCC *does* know
about, we can have a builtin for this, so that you can get better
inlining etc., no need for an assembler wrapper.
> > But the kernel uses the -errno convention internally, so I think it
> > would make sense to pass this to userspace and not convert back and
> > forth. This would align with what most of the architectures do, and
> > also avoids the GCC oddity.
>
> Yes I would be interested in opinions for this option. It seems like
> matching other architectures is a good idea. Maybe there are some
> reasons not to.
Agreed with you both here.
> >> - Should this be for 64-bit only? 'scv 1' could be reserved for 32-bit
> >> calls if there was interest in developing an ABI for 32-bit programs.
> >> Marginal benefit in avoiding compat syscall selection.
> >
> > We don't have an ELFv2 ABI for 32-bit. I doubt it makes sense to
> > provide an ELFv1 port for this given that it's POWER9-specific.
We *do* have a 32-bit LE ABI. And ELFv1 is not 32-bit either. Please
don't confuse these things :-)
The 64-bit LE kernel does not really support 32-bit userland (or BE
userland), *that* is what you want to say.
> > From the glibc perspective, the major question is how we handle run-time
> > selection of the system call instruction sequence.
Well, if it is inlined you don't have this problem either! :-)
Segher
next prev parent reply other threads:[~2020-01-28 15:44 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-28 10:50 powerpc Linux scv support and scv system call ABI proposal Nicholas Piggin
2020-01-28 13:09 ` Florian Weimer
2020-01-28 14:05 ` Nicholas Piggin
2020-01-28 15:40 ` Segher Boessenkool [this message]
2020-01-28 16:04 ` Florian Weimer
2020-01-28 20:01 ` Segher Boessenkool
2020-01-29 16:19 ` Florian Weimer
2020-01-29 16:29 ` Segher Boessenkool
2020-01-29 17:02 ` Florian Weimer
2020-01-29 17:51 ` Segher Boessenkool
2020-01-30 10:42 ` Florian Weimer
2020-01-30 11:25 ` Segher Boessenkool
2020-01-30 12:03 ` Florian Weimer
2020-01-30 13:50 ` Segher Boessenkool
2020-01-30 17:04 ` Adhemerval Zanella
2020-01-30 21:41 ` Segher Boessenkool
2020-01-31 11:30 ` Adhemerval Zanella
2020-01-31 11:55 ` Segher Boessenkool
2020-01-28 15:58 ` Florian Weimer
2020-01-29 4:41 ` Nicholas Piggin
2020-01-28 17:26 ` Adhemerval Zanella
2020-01-29 4:58 ` Nicholas Piggin
2020-01-29 13:20 ` Segher Boessenkool
2020-01-29 15:51 ` Tulio Magno Quites Machado Filho
2020-02-19 11:03 ` Nicholas Piggin
2020-01-28 22:14 ` Joseph Myers
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=20200128154026.GI22482@gate.crashing.org \
--to=segher@kernel.crashing.org \
--cc=fweimer@redhat.com \
--cc=libc-alpha@sourceware.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=npiggin@gmail.com \
--cc=tuliom@linux.ibm.com \
/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.
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).