This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: For review: nptl(7) man page


Sounds good.

On Sun, Jul 26, 2015 at 1:24 PM, Michael Kerrisk (man-pages)
<mtk.manpages@gmail.com> wrote:
> On 07/24/2015 05:51 PM, Nicholas Miell wrote:
>> PTHREAD_PROCESS_SHARED says any thread with access to the memory containing
>> the mutex can operate on the mutex and POSIX basically ignores the idea
>> that different processes could be running completely incompatible
>> executables or whatever.
>>
>> pthread_mutex_t has a bunch of #ifdefs in the middle of it that change the
>> structure size and layout between i386 and x86_64.
>>
>> Most importantly, the positions of the __nusers and __kind fields are
>> swapped (this looks to be an oversight dating back to 2003 when __nusers
>> was first introduced and carefully preserved when the separate i386 and
>> x86_64 versions of pthreadtypes.h were merged into the single x86 version),
>> which means that when the lock and unlock functions attempt to figure out
>> what kind of mutex it is (recursive/adaptive/whatever), they'll look at the
>> wrong field if the mutex is from the wrong architecture and then things
>> will break.
>>
>> And then there's the fact that the rest of the struct is a union in the
>> 32-bit version and flat in the 64-bit version, but that could have been
>> worked around if you put a flag in the __kind field that tells the 64-bit
>> pthread library that it is looking at a 32-bit mutex.
>
> Thanks for the additional detail, Nicholas. So, how about a paragraph such
> as the following for the manual page:
>
>        POSIX says that any thread in any process with access to the memâ
>        ory containing a  process-shared  (PTHREAD_PROCESS_SHARED)  mutex
>        can  operate  on that mutex.  However, on 64-bit x86 systems, the
>        mutex definition for x86-64 is incompatible with the mutex  defiâ
>        nition  for  i386,  meaning that 32-bit and 64-bit binaries can't
>        share mutexes on x86-64 systems.
> ?
>
> Cheers,
>
> Michael
>
>
>> On Fri, Jul 24, 2015 at 12:57 AM, Michael Kerrisk (man-pages) <
>> mtk.manpages@gmail.com> wrote:
>>
>>> On 03/22/2015 10:38 PM, Nicholas Miell wrote:
>>>> On 03/22/2015 07:38 AM, Michael Kerrisk (man-pages) wrote:
>>>>> Hello all,
>>>>>
>>>>> I wrote a short man page documented some of the details of
>>>>> NPTL that might affect application developers. Review comments
>>>>> would be most welcome.
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Michael
>>>>
>>>> POSIX specifies that process-shared pthread_mutex_t's can be manipulated
>>>> by independent processes, however the AMD64 and i386 versions of the
>>>> mutex structures are incompatible and cannot be shared.
>>>>
>>>> This might be true of the other supposedly sharable primitives, I never
>>>> bothered to check the rest when I first noticed the problem with mutexes.
>>>
>>> Nicholas,
>>>
>>> Can you provide pointers to further information on this topic?
>>>
>>> Cheers,
>>>
>>> Michael
>>>
>>>
>>> --
>>> Michael Kerrisk
>>> Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
>>> Linux/UNIX System Programming Training: http://man7.org/training/
>>>
>>
>
>
> --
> Michael Kerrisk
> Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
> Linux/UNIX System Programming Training: http://man7.org/training/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]