From a286e98273a4a4ae260378a52f2db3cb12d1d7a4 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 5 Dec 2023 23:34:01 +0100 Subject: [PATCH] libiberty: Fix build with GCC < 7 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 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. 2023-12-05 Jakub Jelinek * configure.ac (HAVE_X86_SHA1_HW_SUPPORT): Verify __get_cpuid and __get_cpuid_count are not implicitly declared. * configure: Regenerated. --- libiberty/ChangeLog | 6 ++++++ libiberty/configure | 2 ++ libiberty/configure.ac | 2 ++ 3 files changed, 10 insertions(+) diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 3258d1a46f4..389fb14b96e 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,9 @@ +2023-12-05 Jakub Jelinek + + * configure.ac (HAVE_X86_SHA1_HW_SUPPORT): Verify __get_cpuid and + __get_cpuid_count are not implicitly declared. + * configure: Regenerated. + 2023-11-30 Rainer Orth * configure.ac (GCC_CHECK_ASSEMBLER_HWCAP): Invoke. diff --git a/libiberty/configure b/libiberty/configure index d39b1b71233..291c910c9cf 100755 --- a/libiberty/configure +++ b/libiberty/configure @@ -7665,6 +7665,8 @@ void foo (__m128i *buf, unsigned int e, __m128i msg0, __m128i msg1) 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) diff --git a/libiberty/configure.ac b/libiberty/configure.ac index cf2c9703781..20e41859757 100644 --- a/libiberty/configure.ac +++ b/libiberty/configure.ac @@ -769,6 +769,8 @@ void foo (__m128i *buf, unsigned int e, __m128i msg0, __m128i msg1) 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) -- 2.47.3