[parisc-linux] ldcw in __pthread_acquire
Matthew Wilcox
matthew@wil.cx
Fri, 15 Dec 2000 16:37:14 +0000
On Fri, Dec 15, 2000 at 10:37:55PM +1100, Alan Modra wrote:
> On Fri, 15 Dec 2000, John Marvin wrote:
>
> >
> > I just ran into an unaligned data reference in user land. The problem is
> > that the routine __pthread_acquire (in libpthread) does a ldcw, but it is
> > not ensuring that the address it is operating on is 16 byte aligned (it is
> > operating on the address that was passed in as the first argument). Some
> > processors don't require the 16 byte alignment, but many do.
> Here's where the problem is:
>
> glibc/linuxthreads/sysdeps/pthread/bits/pthreadtypes.h
>
> struct _pthread_fastlock
> {
> long int __status; /* "Free" or "taken" or head of waiting list */
> int __spinlock; /* Used by compare_and_swap emulation. Also,
> adaptive SMP lock stores spin count here. */
> };
Can we move the __spinlock to be the first element of the struct,
and then mark the struct as requiring 16-byte alignment? i have the
feeling this might `just work', since most structs will be allocated at
16-byte-aligned addresses anyway.
--
Revolutions do not require corporate support.