Re: Surprising code generated for vdso_read_begin()

From: Christophe Leroy
Date: Wed Feb 19 2020 - 03:45:49 EST




Le 16/02/2020 Ã 19:10, Arnd Bergmann a ÃcritÂ:
On Sat, Jan 11, 2020 at 12:33 PM Segher Boessenkool
<segher@xxxxxxxxxxxxxxxxxxx> wrote:

On Fri, Jan 10, 2020 at 07:45:44AM +0100, Christophe Leroy wrote:
Le 09/01/2020 Ã 21:07, Segher Boessenkool a Ãcrit :
It looks like the compiler did loop peeling. What GCC version is this?
Please try current trunk (to become GCC 10), or at least GCC 9?

It is with GCC 5.5

https://mirrors.edge.kernel.org/pub/tools/crosstool/ doesn't have more
recent than 8.1

Arnd, can you update the tools? We are at 8.3 and 9.2 now :-) Or is
this hard and/or painful to do?

To follow up on this older thread, I have now uploaded 6.5, 7.5, 8.3 and 9.2
binaries, as well as a recent 10.0 snapshot.


Thanks Arnd,

I have built the VDSO with 9.2, I get less performant result than with 8.2 (same performance as with 5.5).

After a quick look, I see:
- Irrelevant NOPs to align loops and stuff, allthough -mpcu=860 should avoid that.
- A stack frame is set for saving r31 in __c_kernel_clock_gettime. GCC 8.1 don't need that, all VDSO functions are frameless with 8.1

Christophe