From: Segher Boessenkool <segher@kernel•crashing.org>
To: Nicholas Piggin <npiggin@gmail•com>
Cc: Rich Felker <dalias@libc•org>,
libc-alpha@sourceware•org,
Adhemerval Zanella <adhemerval.zanella@linaro•org>,
musl@lists•openwall.com, binutils@sourceware•org,
Andy Lutomirski <luto@kernel•org>,
libc-dev@lists•llvm.org, Thomas Gleixner <tglx@linutronix•de>,
Vincenzo Frascino <vincenzo.frascino@arm•com>,
linuxppc-dev@lists•ozlabs.org
Subject: Re: New powerpc vdso calling convention
Date: Tue, 5 May 2020 16:56:24 -0500 [thread overview]
Message-ID: <20200505215624.GP31009@gate.crashing.org> (raw)
In-Reply-To: <1588126678.zjwj4d1d90.astroid@bobo.none>
Hi!
On Wed, Apr 29, 2020 at 12:39:22PM +1000, Nicholas Piggin wrote:
> Excerpts from Adhemerval Zanella's message of April 27, 2020 11:09 pm:
> >> Right, I'm just talking about those comments -- it seems like the kernel
> >> vdso should contain an .opd section with function descriptors in it for
> >> elfv1 calls, rather than the hack it has now of creating one in the
> >> caller's .data section.
> >>
> >> But all that function descriptor code is gated by
> >>
> >> #if (defined(__PPC64__) || defined(__powerpc64__)) && _CALL_ELF != 2
> >>
> >> So it seems PPC32 does not use function descriptors but a direct pointer
> >> to the entry point like PPC64 with ELFv2.
> >
> > Yes, this hack is only for ELFv1. The missing ODP has not been an issue
> > or glibc because it has been using the inline assembly to emulate the
> > functions call since initial vDSO support (INTERNAL_VSYSCALL_CALL_TYPE).
> > It just has become an issue when I added a ifunc optimization to
> > gettimeofday so it can bypass the libc.so and make plt branch to vDSO
> > directly.
>
> I can't understand if it's actually a problem for you or not.
>
> Regardless if you can hack around it, it seems to me that if we're going
> to add sane calling conventions to the vdso, then we should also just
> have a .opd section for it as well, whether or not a particular libc
> requires it.
An OPD ("official procedure descriptor") is required for every function,
to have proper C semantics, so that pointers to functions (which are
pointers to descriptors, in fact) are unique. You can "manually" make
descriptors just fine, and use those to call functions -- but you cannot
(in general) use a pointer to such a "fake" descriptor as the "id" of
the function.
The way the ABIs define the OPDs makes them guaranteed unique.
Segher
next prev parent reply other threads:[~2020-05-05 21:58 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-25 5:22 New powerpc vdso calling convention Nicholas Piggin
2020-04-25 5:40 ` [musl] " Rich Felker
2020-04-25 7:47 ` Christophe Leroy
2020-04-25 10:56 ` Nicholas Piggin
2020-04-25 12:20 ` Christophe Leroy
2020-04-25 22:58 ` Nicholas Piggin
2020-04-25 23:11 ` Rich Felker
2020-04-26 3:41 ` Nicholas Piggin
2020-04-27 13:09 ` Adhemerval Zanella
2020-04-29 2:39 ` Nicholas Piggin
2020-04-29 12:15 ` Adhemerval Zanella
2020-05-05 21:56 ` Segher Boessenkool [this message]
2020-04-25 16:22 ` [musl] " Rich Felker
2020-04-25 23:07 ` Nicholas Piggin
2020-04-30 2:51 ` Michael Ellerman
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=20200505215624.GP31009@gate.crashing.org \
--to=segher@kernel$(echo .)crashing.org \
--cc=adhemerval.zanella@linaro$(echo .)org \
--cc=binutils@sourceware$(echo .)org \
--cc=dalias@libc$(echo .)org \
--cc=libc-alpha@sourceware$(echo .)org \
--cc=libc-dev@lists$(echo .)llvm.org \
--cc=linuxppc-dev@lists$(echo .)ozlabs.org \
--cc=luto@kernel$(echo .)org \
--cc=musl@lists$(echo .)openwall.com \
--cc=npiggin@gmail$(echo .)com \
--cc=tglx@linutronix$(echo .)de \
--cc=vincenzo.frascino@arm$(echo .)com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
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