[PATCH] libgomp: Include <limits.h> early to avoid link failure with glibc 2.34
Florian Weimer
fweimer@redhat.com
Mon Jul 12 13:42:30 GMT 2021
* Jakub Jelinek:
> On Mon, Jul 12, 2021 at 10:26:47AM +0200, Florian Weimer via Gcc-patches wrote:
>> <limits.h> is included indirectly in the #pragma GCC visibility hidden
>> block. With glibc 2.34, <limits.h> needs a declaration of the sysconf
>> function, and including it under hidden visibility turns other calls
>> to sysconf into hidden references, leading to a linker failure.
>>
>> libgomp/ChangeLog:
>>
>> * libgomp.h: Include <limits.h>.
>
> If this is because of the config/linux/sem.h #include <limits.h>,
> I'd prefer not to include that header instead, we rely on being compiled
> by GCC anyway (and clang/icc support __INT_MAX__ anyway).
>
> Or e.g. config/posix/sem.h uses
> #ifdef HAVE_ATTRIBUTE_VISIBILITY
> # pragma GCC visibility push(default)
> #endif
>
> #include <semaphore.h>
>
> #ifdef HAVE_ATTRIBUTE_VISIBILITY
> # pragma GCC visibility pop
> #endif
>
> 2021-07-12 Jakub Jelinek <jakub@redhat.com>
> Florian Weimer <fweimer@redhat.com>
>
> * config/linux/sem.h: Don't include limits.h.
> (SEM_WAIT): Define to -__INT_MAX__ - 1 instead of INT_MIN.
>
> --- libgomp/config/linux/sem.h.jj 2021-01-18 07:18:42.360339646 +0100
> +++ libgomp/config/linux/sem.h 2021-07-12 15:18:10.121178404 +0200
> @@ -33,10 +33,8 @@
> #ifndef GOMP_SEM_H
> #define GOMP_SEM_H 1
>
> -#include <limits.h> /* For INT_MIN */
> -
> typedef int gomp_sem_t;
> -#define SEM_WAIT INT_MIN
> +#define SEM_WAIT (-__INT_MAX__ - 1)
> #define SEM_INC 1
>
> extern void gomp_sem_wait_slow (gomp_sem_t *, int);
I tested this on csky-linux-gnuabiv2 with the glibc version that failed
before, and it works. So I guess your version is fine, too.
Thanks,
Florian
More information about the Libc-alpha
mailing list