[PATCH] riscv: Use __has_include__ to include <asm/syscalls.h> [BZ #24022]

Palmer Dabbelt palmer@sifive.com
Fri Jan 4 22:56:00 GMT 2019


On Fri, 21 Dec 2018 09:48:40 PST (-0800), H.J. Lu wrote:
> <asm/syscalls.h> has been removed by
>
> commit 27f8899d6002e11a6e2d995e29b8deab5aa9cc25
> Author: David Abdurachmanov <david.abdurachmanov@gmail.com>
> Date:   Thu Nov 8 20:02:39 2018 +0100
>
>     riscv: add asm/unistd.h UAPI header
>
>     Marcin Juszkiewicz reported issues while generating syscall table for riscv
>     using 4.20-rc1. The patch refactors our unistd.h files to match some other
>     architectures.
>
>     - Add asm/unistd.h UAPI header, which has __ARCH_WANT_NEW_STAT only for 64-bit
>     - Remove asm/syscalls.h UAPI header and merge to asm/unistd.h
>     - Adjust kernel asm/unistd.h
>
>     So now asm/unistd.h UAPI header should show all syscalls for riscv.
>
> <asm/syscalls.h> may be restored by
>
> Subject: [PATCH] riscv: restore asm/syscalls.h UAPI header
> Date: Tue, 11 Dec 2018 09:09:35 +0100
>
> UAPI header asm/syscalls.h was merged into UAPI asm/unistd.h header,
> which did resolve issue with missing syscalls macros resulting in
> glibc (2.28) build failure. It also broke glibc in a different way:
> asm/syscalls.h is being used by glibc. I noticed this while doing
> Fedora 30/Rawhide mass rebuild.
>
> The patch returns asm/syscalls.h header and incl. it into asm/unistd.h.
> I plan to send a patch to glibc to use asm/unistd.h instead of
> asm/syscalls.h
>
> In the meantime, we use __has_include__, which was added to GCC 5, to
> check if <asm/syscalls.h> exists before including it.  Tested with
> build-many-glibcs.py for riscv against kernel 4.19.12 and 4.20-rc7.
>
> 	[BZ #24022]
> 	* sysdeps/unix/sysv/linux/riscv/flush-icache.c: Check if
> 	<asm/syscalls.h> exists with __has_include__ before including it.
> ---
>  sysdeps/unix/sysv/linux/riscv/flush-icache.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/sysdeps/unix/sysv/linux/riscv/flush-icache.c b/sysdeps/unix/sysv/linux/riscv/flush-icache.c
> index d612ef4c6c..d0ecec5107 100644
> --- a/sysdeps/unix/sysv/linux/riscv/flush-icache.c
> +++ b/sysdeps/unix/sysv/linux/riscv/flush-icache.c
> @@ -21,7 +21,11 @@
>  #include <stdlib.h>
>  #include <atomic.h>
>  #include <sys/cachectl.h>
> +#if __has_include__ (<asm/syscalls.h>)
>  #include <asm/syscalls.h>
> +#else
> +#include <asm/unistd.h>
> +#endif
>
>  typedef int (*func_type) (void *, void *, unsigned long int);

Thanks!



More information about the Libc-alpha mailing list