On Sat, Oct 12, 2024 at 3:46 AM Deepak Gupta <debug@xxxxxxxxxxxx> wrote: > > On Fri, Oct 11, 2024 at 07:43:30PM +0800, Zong Li wrote: > >On Fri, Oct 11, 2024 at 6:18 PM Mark Brown <broonie@xxxxxxxxxx> wrote: > >> > >> On Fri, Oct 11, 2024 at 01:44:55PM +0800, Zong Li wrote: > >> > On Wed, Oct 9, 2024 at 7:46 AM Deepak Gupta <debug@xxxxxxxxxxxx> wrote: > >> > >> > > + if (si->si_code == SEGV_CPERR) { > >> > >> > Hi Deepak, > >> > I got some errors when building this test, I suppose they should be > >> > fixed in the next version. > >> > >> > riscv_cfi_test.c: In function 'sigsegv_handler': > >> > riscv_cfi_test.c:17:28: error: 'SEGV_CPERR' undeclared (first use in > >> > this function); did you mean 'SEGV_ACCERR'? > >> > 17 | if (si->si_code == SEGV_CPERR) { > >> > | ^~~~~~~~~~ > >> > | SEGV_ACCERR > >> > > >> > >> Did you run "make headers_install" prior to building kselftest to get > >> the current kernel's headers available for userspace builds? > > > >Yes, I have run "make header" and "make header_install" before > >building the kselftest. This error happens when I cross compiled it, > >perhaps I can help to check if it is missing some header files or > >header search path. > > That's wierd. > > It doesn't fail for me even if I do not do `make headers_install`. But I am > building kernel and selftests with toolchain which supports shadow stack and > landing pad. It's defined in `siginfo.h`. When I built toolchain, I did point > it at the latest kernel headers. May be that's the trick. > > """ > > $ grep -nir SEGV_CPERR /scratch/debug/linux/kbuild/usr/include/* > /scratch/debug/linux/kbuild/usr/include/asm-generic/siginfo.h:240:#define SEGV_CPERR 10 /* Control protection fault */ > > $ grep -nir SEGV_CPERR /scratch/debug/open_src/sifive_cfi_toolchain/INSTALL_Sept18/sysroot/usr/* > /scratch/debug/open_src/sifive_cfi_toolchain/INSTALL_Sept18/sysroot/usr/include/asm-generic/siginfo.h:240:#define SEGV_CPERR 10 /* Control protection fault */ > /scratch/debug/open_src/sifive_cfi_toolchain/INSTALL_Sept18/sysroot/usr/include/bits/siginfo-consts.h:139: SEGV_CPERR /* Control protection fault. */ > /scratch/debug/open_src/sifive_cfi_toolchain/INSTALL_Sept18/sysroot/usr/include/bits/siginfo-consts.h:140:# define SEGV_CPERR SEGV_CPERR > > """ In my case, because the test files don't explicitly include siginfo.h, I assume it's expected that siginfo.h will be included through signal.h. Regarding the header search path, it will eventually locate signal.h in toolchain_path/sysroot/usr/include/. In my toolchain_path/sysroot/usr/include/signal.h, it doesn't include any signal.h; instead, signal.h will be included from toolchain_path/sysroot/usr/include/linux/signal.h or kernel_src/usr/include/linux/signal.h rather than toolchain/sysroot/usr/include/signal.h. I think that is why I lost the SEGV_CPERR definition. Is there any difference with you? >