[PATCH] Use the same exported ABI for --disable-linux-futex and --enable-linux-futex libgomp
Jakub Jelinek
jakub@redhat.com
Tue Jun 20 18:35:00 GMT 2006
On Tue, Jun 20, 2006 at 10:20:53AM -0700, Richard Henderson wrote:
> On Mon, Jun 19, 2006 at 12:29:55PM -0400, Jakub Jelinek wrote:
> > +typedef int omp_lock_t __attribute__((aligned (8)));
> > +typedef struct { int owner, count; } omp_nest_lock_t
> > + __attribute__((aligned (8)));
>
> I don't like attempting to use aligned to increase the allocation size.
> I'm pretty sure that doesn't actually work.
I agree it is not pretty, but I think it works (the generated omp.h
has stuff like:
typedef struct
{
unsigned char _x[4]
__attribute__((__aligned__(8)));
} omp_lock_t;
typedef struct
{
unsigned char _x[8]
__attribute__((__aligned__(8)));
} omp_nest_lock_t;
). There were 2 reasons why I used it:
1) so far omp.h (and omp_lib{,_kinds}.mod) were multilib independent
with --enable-linux-futex
If omp_lock_t is changed to say
typedef union { int futex; pthread_mutex_t *lock; } omp_lock_t;
then we need to install one omp.h (and one omp_lib{,_kinds}.mod pair)
for each multilib
2) in --enable-linux-futex mode, gomp_mutex_t is an int typedef, so
using
typedef int omp_lock_t __attribute__((mode(pointer)));
would be wrong as config/linux freely casts between gomp_mutex_t
and omp_lock_t. Using the union, we'd need to uglify a little
bit (convert from omp_lock_t pointer to gomp_mutex_t pointer using
&omp_lock->futex).
But if you want to go that way...
1) is even more complicated by the fact that unlike C++ (or Fortran
finclude), C doesn't AFAIK have a multilib specific include dir
Jakub
More information about the Gcc-patches
mailing list