Hi! Tobias reported on IRC that the linker fails to build with GCC 4.8.5. In configure I've tried to use everything actually used in the sha1.c x86 hw implementation, but unfortunately I forgot about implicit function declarations. GCC before 7 did have <cpuid.h> header and bit_SHA define and __get_cpuid function defined inline, but it didn't define __get_cpuid_count, which compiled fine (and the configure test is intentionally compile time only) due to implicit function declaration, but then failed to link when linking the linker, because __get_cpuid_count wasn't defined anywhere.
The following patch fixes that by using what autoconf uses in AC_CHECK_DECL to make sure the functions are declared. Bootstrapped/regtested in GCC on x86_64-linux and i686-linux with GCC 12 as system compiler (HAVE_X86_SHA1_HW_SUPPORT is defined there) and tested by Tobias with GCC 4.8.5 (it isn't defined there anymore). Ok for trunk (both gcc and binutils)? 2023-12-05 Jakub Jelinek <ja...@redhat.com> * configure.ac (HAVE_X86_SHA1_HW_SUPPORT): Verify __get_cpuid and __get_cpuid_count are not implicitly declared. * configure: Regenerated. --- libiberty/configure.ac.jj 2023-12-01 08:10:44.877293904 +0100 +++ libiberty/configure.ac 2023-12-05 16:09:49.506323449 +0100 @@ -771,6 +771,8 @@ void foo (__m128i *buf, unsigned int e, int bar (void) { unsigned int eax, ebx, ecx, edx; + (void) __get_cpuid; + (void) __get_cpuid_count; if (__get_cpuid_count (7, 0, &eax, &ebx, &ecx, &edx) && (ebx & bit_SHA) != 0 && __get_cpuid (1, &eax, &ebx, &ecx, &edx) --- libiberty/configure.jj 2023-12-01 08:10:44.876293919 +0100 +++ libiberty/configure 2023-12-05 16:10:06.415083621 +0100 @@ -7667,6 +7667,8 @@ void foo (__m128i *buf, unsigned int e, int bar (void) { unsigned int eax, ebx, ecx, edx; + (void) __get_cpuid; + (void) __get_cpuid_count; if (__get_cpuid_count (7, 0, &eax, &ebx, &ecx, &edx) && (ebx & bit_SHA) != 0 && __get_cpuid (1, &eax, &ebx, &ecx, &edx) Jakub