libiberty: Fix build with GCC < 7

Message ID ZW+e17v8kftQKh57@tucnak
State Unresolved
Headers
Series libiberty: Fix build with GCC < 7 |

Checks

Context Check Description
snail/gcc-patch-check warning Git am fail log

Commit Message

Jakub Jelinek Dec. 5, 2023, 10:06 p.m. UTC
  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  <jakub@redhat.com>

	* configure.ac (HAVE_X86_SHA1_HW_SUPPORT): Verify __get_cpuid and
	__get_cpuid_count are not implicitly declared.
	* configure: Regenerated.


	Jakub
  

Comments

Ian Lance Taylor Dec. 5, 2023, 10:30 p.m. UTC | #1
On Tue, Dec 5, 2023 at 2:06 PM Jakub Jelinek <jakub@redhat.com> wrote:
>
> Ok for trunk (both gcc and binutils)?
>
> 2023-12-05  Jakub Jelinek  <jakub@redhat.com>
>
>         * configure.ac (HAVE_X86_SHA1_HW_SUPPORT): Verify __get_cpuid and
>         __get_cpuid_count are not implicitly declared.
>         * configure: Regenerated.

This is fine.  Thanks.

Ian
  

Patch

--- 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)