[RFC PATCH] riscv: remove riscv-specific sigcontext.h
Vincent Chen
vincent.chen@sifive.com
Mon Jul 13 10:16:52 GMT 2020
On Fri, Jul 10, 2020 at 6:25 AM Alistair Francis <alistair23@gmail.com> wrote:
>
> On Mon, Jun 29, 2020 at 10:54 PM Vincent Chen <vincent.chen@sifive.com> wrote:
> >
> > Many RISC-V extensions are under development, such as Vector extension,
> > even though RISC-V allows vendors to customize their extension. A new
> > extension may introduce new registers to the contents of the signal
> > context. To align the contents of struct sigcontext between kernel and
> > glibc, the developers need to perform the same modifications twice. This
> > RFC patch attempts to use the Glibc generic sigcontext.h to reduce the
> > modification from two to one. Because The element names of struct
> > sigcontext in these two sigcontext.h are different, this change will cause
> > some backward-incompatible issues. To evaluate the impact, I issued a
> > discussion in the RISC-V software group
> > https://groups.google.com/a/groups.riscv.org/g/sw-dev/c/52cbGQCyy2s.
> > I followed the suggestions to build the OpenEmbedded with this Glibc change,
> > and all utility programs were passed. Therefore, I think that the
>
> What did you build? Can you provide more details.
Sure. I followed the README in https://github.com/riscv/meta-riscv to
build the OpenEmbedded. To enable OpenEmbedded to include this change
in Glibc sigcontext.h before executing the ". ./meta-riscv/setup.sh",
I put this Glibc patch in
openembedded-core/meta/recipes-core/glibc/glibc/ folder and an
informal GCC patch for fixing the stack unwinding mechanism in
openembedded-core/meta/recipes-devtools/gcc/gcc-10.1/ folder. Then, I
modified Glibc's recipe, glibc_2.31.bb, and GCC's recipes,
gcc-10.1.inc, to include these two patches.
Based on the above modifications, I built multiple images, such as
MACHINE=freedom-u540 core-image-base, MACHINE=freedom-u540
core-image-weston, MACHINE=qemuriscv64 core-image-full-cmdline and
MACHINE=qemuriscv32 core-image-base. These images all can pass the
compilation. Hence I think there are very few programs that uses
struct sigcontext. If you find out what evaluations or experiments I
am missing, please tell me. Thank you
> Have you done any userspace testing as well?
>
Do you mean what userspace testing I have done for this Glibc patch?
If yes, I used glibc test suite to test this Glibc patch + required
modification in GCC stack unwinding, and it passes all the tests
including unwinding tests (excluding some known failure cases).
> > backward-incompatible issue may not be serious at this moment. If everyone
> > thinks this change is reasonable and feasible, I will discuss with compiler
> > guys to come up with a solution to apply the new sigcontext.h to the GCC
> > stack unwinding.
>
> Will this affect LLVM as well?
>
As far as I knew, LLVM does not use struct sigcontext to access the
signal context. Instead, it directly uses memory offset to access the
signal context. Hence, I think this Glibc change will not affect LLVM.
> Alistair
>
> > ---
> > sysdeps/unix/sysv/linux/riscv/bits/sigcontext.h | 31 -------------------------
> > 1 file changed, 31 deletions(-)
> > delete mode 100644 sysdeps/unix/sysv/linux/riscv/bits/sigcontext.h
> >
> > diff --git a/sysdeps/unix/sysv/linux/riscv/bits/sigcontext.h b/sysdeps/unix/sysv/linux/riscv/bits/sigcontext.h
> > deleted file mode 100644
> > index 4b7c09e..0000000
> > --- a/sysdeps/unix/sysv/linux/riscv/bits/sigcontext.h
> > +++ /dev/null
> > @@ -1,31 +0,0 @@
> > -/* Machine-dependent signal context structure for Linux. RISC-V version.
> > - Copyright (C) 1996-2020 Free Software Foundation, Inc. This file is part of the GNU C Library.
> > -
> > - The GNU C Library is free software; you can redistribute it and/or
> > - modify it under the terms of the GNU Lesser General Public
> > - License as published by the Free Software Foundation; either
> > - version 2.1 of the License, or (at your option) any later version.
> > -
> > - The GNU C Library is distributed in the hope that it will be useful,
> > - but WITHOUT ANY WARRANTY; without even the implied warranty of
> > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> > - Lesser General Public License for more details.
> > -
> > - You should have received a copy of the GNU Lesser General Public
> > - License along with the GNU C Library. If not, see
> > - <https://www.gnu.org/licenses/>. */
> > -
> > -#ifndef _BITS_SIGCONTEXT_H
> > -#define _BITS_SIGCONTEXT_H 1
> > -
> > -#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
> > -# error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
> > -#endif
> > -
> > -struct sigcontext {
> > - /* gregs[0] holds the program counter. */
> > - unsigned long int gregs[32];
> > - unsigned long long int fpregs[66] __attribute__ ((__aligned__ (16)));
> > -};
> > -
> > -#endif
> > --
> > 2.7.4
> >
More information about the Libc-alpha
mailing list