postgres.git / summary / log / commit / refs

commit    db4eba15266e4f78aa62fd1444f3e858a284c686
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Mon Nov 17 20:24:34 2025 +0000
First released in: 18.2

    Fix pg_crc32c_armv8_choose.c to build with ancient glibc releases.
    
    If you go back as far as the RHEL7 era, <sys/auxv.h> does not provide
    the HWCAPxxx macros needed with elf_aux_info or getauxval, so you need
    to get those from the kernel header <asm/hwcap.h> instead.  We knew
    that for the 32-bit case but failed to extrapolate to the 64-bit case.
    Oversight in commit aac831caf.
    
    Reported-by: GaoZengqi <pgf00a@gmail.com>
    Author: Tom Lane <tgl@sss.pgh.pa.us>
    Discussion: https://postgr.es/m/CAFmBtr3Av62-jBzdhFkDHXJF9vQmNtSnH2upwODjnRcsgdTytw@mail.gmail.com
    Backpatch-through: 18


src/port/pg_crc32c_armv8_choose.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/port/pg_crc32c_armv8_choose.c b/src/port/pg_crc32c_armv8_choose.c index ec12be1bbc3..c0001cfe2dc 100644 --- a/src/port/pg_crc32c_armv8_choose.c +++ b/src/port/pg_crc32c_armv8_choose.c @@ -26,7 +26,8 @@ #if defined(HAVE_ELF_AUX_INFO) || defined(HAVE_GETAUXVAL) #include <sys/auxv.h> -#if defined(__linux__) && !defined(__aarch64__) && !defined(HWCAP2_CRC32) +/* Ancient glibc releases don't include the HWCAPxxx macros in sys/auxv.h */ +#if defined(__linux__) && (defined(__aarch64__) ? !defined(HWCAP_CRC32) : !defined(HWCAP2_CRC32)) #include <asm/hwcap.h> #endif #endif [parent: 3e85af1ff4b5]