[PATCH] RISC-V: [gprofng] Allow building gprofng without asm/hwprobe.h

Yixuan Chen chenyixuan@iscas.ac.cn
Mon Jun 16 10:18:09 GMT 2025


It makes sense to me. Thank you, xuerui.

Does Vladimir have any comments?


Best regards

Yixuan Chen

On 6/16/2025 4:16 PM, WANG Xuerui wrote:
> From: WANG Xuerui <git@xen0n.name>
>
> The code is actually able to gracefully fallback if the syscall number
> of riscv_hwprobe is not available at build time, but it still depended
> on the <asm/hwprobe.h> header unconditionally. In certain environments
> such as one of crosstool-NG's Canadian Cross build step (binutils for
> host), or one with very outdated kernel headers, the header will not be
> present, causing the build to fail.
>
> While the relevant projects/environments should be fixed nevertheless,
> a configure-time check for <asm/hwprobe.h> is helpful for fixing gprofng
> builds with released versions of ct-ng etc.
>
> Signed-off-by: WANG Xuerui <git@xen0n.name>
> ---
>   gprofng/common/config.h.in |  3 +++
>   gprofng/common/cpuid.c     |  6 ++++--
>   gprofng/configure          | 15 +++++++++++++++
>   gprofng/configure.ac       |  4 ++++
>   4 files changed, 26 insertions(+), 2 deletions(-)
>
> diff --git a/gprofng/common/config.h.in b/gprofng/common/config.h.in
> index f8484f238fd..726de23dd3a 100644
> --- a/gprofng/common/config.h.in
> +++ b/gprofng/common/config.h.in
> @@ -6,6 +6,9 @@
>   /* Enable java profiling */
>   #undef GPROFNG_JAVA_PROFILING
>   
> +/* Define to 1 if you have the <asm/hwprobe.h> header file. */
> +#undef HAVE_ASM_HWPROBE_H
> +
>   /* Define to 1 if you have the `clock_gettime' function. */
>   #undef HAVE_CLOCK_GETTIME
>   
> diff --git a/gprofng/common/cpuid.c b/gprofng/common/cpuid.c
> index e40404c645a..f9f90462839 100644
> --- a/gprofng/common/cpuid.c
> +++ b/gprofng/common/cpuid.c
> @@ -48,8 +48,10 @@ __get_cpuid (unsigned int op ATTRIBUTE_UNUSED, unsigned int *eax,
>   #include <sched.h>
>   #include <sys/syscall.h>
>   #include <unistd.h>
> +#ifdef HAVE_ASM_HWPROBE_H
>   #include <asm/hwprobe.h>
>   #endif
> +#endif
>   
>   /*
>    * Various routines to handle identification
> @@ -188,7 +190,7 @@ get_cpuid_info ()
>         break;
>       }
>   #elif defined(__riscv)
> -  #ifndef __riscv_hwprobe
> +  #if !defined(__riscv_hwprobe) || !defined(HAVE_ASM_HWPROBE_H)
>   	  cpi->cpi_vendor = 0;
>   	  cpi->cpi_family = 0;
>   	  cpi->cpi_model = 0;
> @@ -208,7 +210,7 @@ get_cpuid_info ()
>   	cpi->cpi_vendor = res.value;
>   	cpi->cpi_family = 0;
>   	cpi->cpi_model = 0;
> -	#endif
> +  #endif
>   #endif
>     return cpi;
>   }
> diff --git a/gprofng/configure b/gprofng/configure
> index 3f408634ca5..d3016dd7c0a 100755
> --- a/gprofng/configure
> +++ b/gprofng/configure
> @@ -16941,6 +16941,21 @@ fi
>   done
>   
>   
> +# For riscv builds inside incomplete environments such as during intermediate
> +# steps of cross toolchain building, or with outdated Linux headers.
> +for ac_header in asm/hwprobe.h
> +do :
> +  ac_fn_c_check_header_mongrel "$LINENO" "asm/hwprobe.h" "ac_cv_header_asm_hwprobe_h" "$ac_includes_default"
> +if test "x$ac_cv_header_asm_hwprobe_h" = xyes; then :
> +  cat >>confdefs.h <<_ACEOF
> +#define HAVE_ASM_HWPROBE_H 1
> +_ACEOF
> +
> +fi
> +
> +done
> +
> +
>   clock_gettime_link=
>   # At least for glibc, clock_gettime is in librt.  But don't
>   # pull that in if it still doesn't give us the function we want.  This
> diff --git a/gprofng/configure.ac b/gprofng/configure.ac
> index d7a2c386d10..ed4565fa04c 100644
> --- a/gprofng/configure.ac
> +++ b/gprofng/configure.ac
> @@ -244,6 +244,10 @@ AC_SUBST(GPROFNG_CPPFLAGS, [${gprofng_cppflags}])
>   AC_CHECK_DECLS([basename])
>   AC_CHECK_FUNCS(clock_gettime strsignal)
>   
> +# For riscv builds inside incomplete environments such as during intermediate
> +# steps of cross toolchain building, or with outdated Linux headers.
> +AC_CHECK_HEADERS(asm/hwprobe.h)
> +
>   clock_gettime_link=
>   # At least for glibc, clock_gettime is in librt.  But don't
>   # pull that in if it still doesn't give us the function we want.  This



More information about the Binutils mailing list