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


On 07/26/2015 10:27 PM, Nicholas Miell wrote:
> Sounds good.

That was quick! Thanks for checking, and thanks for the report, Nicholas!

Cheers,

Michael


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


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