Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Groff Other
Branch: master

nptl.7: Note that i386 and x86-64 binaries can't share mutexes

Quoting Nicholas Miell:

    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.

Reported-by: Nicholas Miell <nmiell@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
latest commit e50eaaf192
@mkerrisk authored

README

This package contains Linux man pages for sections
2, 3, 4, 5, and 7. Some more information is given in the
`Announce' file.

Install by copying to your favourite location.
"make install" will just copy them to /usr/share/man/man[1-8].
To install to a path different from /usr use
"make install prefix=/install/path".
"make" will move the pages from this package that are older than
the already installed ones to a subdirectory `not_installed',
then remove old versions (compressed or not),
compress the pages, and copy them to /usr/share/man/man[1-8].


Note that you may have to remove preformatted pages.

Note that sometimes these pages are duplicates of pages
also distributed in other packages. This has been reported
about dlclose.3, dlerror.3, dlopen.3, dlsym.3 (found in ld.so),
about resolver.3, resolv.conf.5 (found in bind-utils),
and about passwd.5, and mailaddr.7. Be careful not to
overwrite more up-to-date versions.
Reports on further duplicates are welcome.
Formerly present and now removed duplicates:
 exports.5 (found in nfs-server-2.2*),
 fstab.5, nfs.5 (found in util-linux-2.12*),
 lilo.8, lilo.conf.5 (found in lilo-21.6*).

Copyrights: These man pages come under various copyrights.
All pages are freely distributable when the nroff source is included.

If you have corrections and additions to suggest, see
http://www.kernel.org/doc/man-pages/contributing.html
Something went wrong with that request. Please try again.