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

Vladimir Mezentsev vladimir.mezentsev@oracle.com
Mon Jun 16 16:25:03 GMT 2025


Looks good to me.
Please push your fix to the master branch.
Thank you for the fixes for gprofng.

-Vladimir


On 6/16/25 03:18, Yixuan Chen wrote:
> 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