perf tools build broken for RISCV 32 bit

Arnd Bergmann arnd at kernel.org
Wed Jan 20 11:03:30 EST 2021


On Wed, Jan 20, 2021 at 4:45 PM Emiliano Ingrassia
<ingrassia at epigenesys.com> wrote:
> > > > rv32 is in the unfortunate position of being the first one that has a glibc
> > > > port, so it hits a lot of problems that other architectures do not.
> > > > If the applications get fixed properly, then at least they will also
> > > > work with musl-1.2 and a (will work-in-progress) glibc that will
> > > > eventually allow building with 64-bit time_t.
> > >
> > > Ok, so in case of perf we probably should limit the needed patch to
> > > riscv 32 bit architecture, unless we want to solve the problem for all
> > > 32 bit architecture with time_t 64 bit support.
> >
> > No, whatever you do should be written to work on all 32-bit
> > architectures. It would be crazy to add a special case for one
> > architecture when it's easier to fix it properly.
> >
> > What was wrong with the helper function I suggested?
>
> Sorry, I was just trying to have a more clear picture of the problem.
>
> I'm totally fine with the helper function you proposed. About that,
> should such approach be used for every time64 syscall for which is known
> that there is no libc wrapper?

We have previously discussed adding generated wrappers for every
syscall, but my suggestion to have an inline function in one of the kernel
headers was not very popular at the time.

I think futex() is very much a special case here because this is the
only[1] thing that gets called directly by a number of applications through
syscall(). All the other time32 system calls have wrappers that are
provided by any C library, which will just use the correct syscall number
to match the arguments, or do a conversion if needed.

Most of the packages that use the other __NR_* macros need them
for something other than calling them (e.g. strace), so a wrapper does
not help.

      Arnd

[1] technically, there is also io_{p,}getevents, but that is usually abstracted
through libaio, and only that needs to be fixed. I checked
https://pagure.io/libaio/commits/master, which seems to be the upstream
but I do not see a fix in there, so this version is currently broken on 32-bit
architectures with musl-1.2 as well as on rv32 with glibc. Distros may
have already fixed this in their downstream copies.

        Arnd



More information about the linux-riscv mailing list