From 2d0fc4dcfcc35cdc3756e548e354488d48e8e1e9 Mon Sep 17 00:00:00 2001 From: Chris Metcalf Date: Tue, 10 Jun 2014 13:45:36 -0400 Subject: tile: move sysdeps/unix/sysv/linux/tile nptl files. --- ChangeLog | 159 ++ sysdeps/tile/nptl/bits/pthreadtypes.h | 226 +++ sysdeps/tile/nptl/bits/semaphore.h | 41 + sysdeps/unix/sysv/linux/tile/Makefile | 5 + sysdeps/unix/sysv/linux/tile/clone.S | 221 +++ sysdeps/unix/sysv/linux/tile/createthread.c | 24 + sysdeps/unix/sysv/linux/tile/lowlevellock.h | 321 +++ sysdeps/unix/sysv/linux/tile/nptl/Makefile | 2 - .../unix/sysv/linux/tile/nptl/bits/pthreadtypes.h | 226 --- sysdeps/unix/sysv/linux/tile/nptl/bits/semaphore.h | 41 - sysdeps/unix/sysv/linux/tile/nptl/clone.S | 221 --- sysdeps/unix/sysv/linux/tile/nptl/createthread.c | 24 - sysdeps/unix/sysv/linux/tile/nptl/lowlevellock.h | 321 --- sysdeps/unix/sysv/linux/tile/nptl/pt-vfork.S | 2 - sysdeps/unix/sysv/linux/tile/nptl/sysdep-cancel.h | 154 -- sysdeps/unix/sysv/linux/tile/nptl/vfork.S | 80 - sysdeps/unix/sysv/linux/tile/nptl/waitpid.S | 20 - sysdeps/unix/sysv/linux/tile/pt-vfork.S | 2 + sysdeps/unix/sysv/linux/tile/sysdep-cancel.h | 154 ++ .../sysv/linux/tile/tilegx/tilegx32/c++-types.data | 67 + .../sysv/linux/tile/tilegx/tilegx32/ld.abilist | 11 + .../tile/tilegx/tilegx32/libBrokenLocale.abilist | 3 + .../sysv/linux/tile/tilegx/tilegx32/libanl.abilist | 6 + .../sysv/linux/tile/tilegx/tilegx32/libc.abilist | 2093 ++++++++++++++++++++ .../linux/tile/tilegx/tilegx32/libcrypt.abilist | 9 + .../sysv/linux/tile/tilegx/tilegx32/libdl.abilist | 11 + .../sysv/linux/tile/tilegx/tilegx32/libm.abilist | 373 ++++ .../sysv/linux/tile/tilegx/tilegx32/libnsl.abilist | 123 ++ .../linux/tile/tilegx/tilegx32/libpthread.abilist | 228 +++ .../linux/tile/tilegx/tilegx32/libresolv.abilist | 93 + .../sysv/linux/tile/tilegx/tilegx32/librt.abilist | 42 + .../tile/tilegx/tilegx32/libthread_db.abilist | 42 + .../linux/tile/tilegx/tilegx32/libutil.abilist | 8 + .../linux/tile/tilegx/tilegx32/nptl/c++-types.data | 67 - .../linux/tile/tilegx/tilegx32/nptl/ld.abilist | 11 - .../tilegx/tilegx32/nptl/libBrokenLocale.abilist | 3 - .../linux/tile/tilegx/tilegx32/nptl/libanl.abilist | 6 - .../linux/tile/tilegx/tilegx32/nptl/libc.abilist | 2093 -------------------- .../tile/tilegx/tilegx32/nptl/libcrypt.abilist | 9 - .../linux/tile/tilegx/tilegx32/nptl/libdl.abilist | 11 - .../linux/tile/tilegx/tilegx32/nptl/libm.abilist | 373 ---- .../linux/tile/tilegx/tilegx32/nptl/libnsl.abilist | 123 -- .../tile/tilegx/tilegx32/nptl/libpthread.abilist | 228 --- .../tile/tilegx/tilegx32/nptl/libresolv.abilist | 93 - .../linux/tile/tilegx/tilegx32/nptl/librt.abilist | 42 - .../tile/tilegx/tilegx32/nptl/libthread_db.abilist | 42 - .../tile/tilegx/tilegx32/nptl/libutil.abilist | 8 - .../sysv/linux/tile/tilegx/tilegx64/c++-types.data | 67 + .../sysv/linux/tile/tilegx/tilegx64/ld.abilist | 11 + .../tile/tilegx/tilegx64/libBrokenLocale.abilist | 3 + .../sysv/linux/tile/tilegx/tilegx64/libanl.abilist | 6 + .../sysv/linux/tile/tilegx/tilegx64/libc.abilist | 2093 ++++++++++++++++++++ .../linux/tile/tilegx/tilegx64/libcrypt.abilist | 9 + .../sysv/linux/tile/tilegx/tilegx64/libdl.abilist | 11 + .../sysv/linux/tile/tilegx/tilegx64/libm.abilist | 373 ++++ .../sysv/linux/tile/tilegx/tilegx64/libnsl.abilist | 123 ++ .../linux/tile/tilegx/tilegx64/libpthread.abilist | 228 +++ .../linux/tile/tilegx/tilegx64/libresolv.abilist | 93 + .../sysv/linux/tile/tilegx/tilegx64/librt.abilist | 42 + .../tile/tilegx/tilegx64/libthread_db.abilist | 42 + .../linux/tile/tilegx/tilegx64/libutil.abilist | 8 + .../linux/tile/tilegx/tilegx64/nptl/c++-types.data | 67 - .../linux/tile/tilegx/tilegx64/nptl/ld.abilist | 11 - .../tilegx/tilegx64/nptl/libBrokenLocale.abilist | 3 - .../linux/tile/tilegx/tilegx64/nptl/libanl.abilist | 6 - .../linux/tile/tilegx/tilegx64/nptl/libc.abilist | 2093 -------------------- .../tile/tilegx/tilegx64/nptl/libcrypt.abilist | 9 - .../linux/tile/tilegx/tilegx64/nptl/libdl.abilist | 11 - .../linux/tile/tilegx/tilegx64/nptl/libm.abilist | 373 ---- .../linux/tile/tilegx/tilegx64/nptl/libnsl.abilist | 123 -- .../tile/tilegx/tilegx64/nptl/libpthread.abilist | 228 --- .../tile/tilegx/tilegx64/nptl/libresolv.abilist | 93 - .../linux/tile/tilegx/tilegx64/nptl/librt.abilist | 42 - .../tile/tilegx/tilegx64/nptl/libthread_db.abilist | 42 - .../tile/tilegx/tilegx64/nptl/libutil.abilist | 8 - .../unix/sysv/linux/tile/tilepro/c++-types.data | 67 + sysdeps/unix/sysv/linux/tile/tilepro/ld.abilist | 11 + .../linux/tile/tilepro/libBrokenLocale.abilist | 3 + .../unix/sysv/linux/tile/tilepro/libanl.abilist | 6 + sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist | 2093 ++++++++++++++++++++ .../unix/sysv/linux/tile/tilepro/libcrypt.abilist | 9 + sysdeps/unix/sysv/linux/tile/tilepro/libdl.abilist | 11 + sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist | 373 ++++ .../unix/sysv/linux/tile/tilepro/libnsl.abilist | 123 ++ .../sysv/linux/tile/tilepro/libpthread.abilist | 228 +++ .../unix/sysv/linux/tile/tilepro/libresolv.abilist | 93 + sysdeps/unix/sysv/linux/tile/tilepro/librt.abilist | 42 + .../sysv/linux/tile/tilepro/libthread_db.abilist | 42 + .../unix/sysv/linux/tile/tilepro/libutil.abilist | 8 + .../sysv/linux/tile/tilepro/nptl/c++-types.data | 67 - .../unix/sysv/linux/tile/tilepro/nptl/ld.abilist | 11 - .../tile/tilepro/nptl/libBrokenLocale.abilist | 3 - .../sysv/linux/tile/tilepro/nptl/libanl.abilist | 6 - .../unix/sysv/linux/tile/tilepro/nptl/libc.abilist | 2093 -------------------- .../sysv/linux/tile/tilepro/nptl/libcrypt.abilist | 9 - .../sysv/linux/tile/tilepro/nptl/libdl.abilist | 11 - .../unix/sysv/linux/tile/tilepro/nptl/libm.abilist | 373 ---- .../sysv/linux/tile/tilepro/nptl/libnsl.abilist | 123 -- .../linux/tile/tilepro/nptl/libpthread.abilist | 228 --- .../sysv/linux/tile/tilepro/nptl/libresolv.abilist | 93 - .../sysv/linux/tile/tilepro/nptl/librt.abilist | 42 - .../linux/tile/tilepro/nptl/libthread_db.abilist | 42 - .../sysv/linux/tile/tilepro/nptl/libutil.abilist | 8 - sysdeps/unix/sysv/linux/tile/vfork.S | 80 + sysdeps/unix/sysv/linux/tile/waitpid.S | 20 + 105 files changed, 10580 insertions(+), 10418 deletions(-) create mode 100644 sysdeps/tile/nptl/bits/pthreadtypes.h create mode 100644 sysdeps/tile/nptl/bits/semaphore.h create mode 100644 sysdeps/unix/sysv/linux/tile/clone.S create mode 100644 sysdeps/unix/sysv/linux/tile/createthread.c create mode 100644 sysdeps/unix/sysv/linux/tile/lowlevellock.h delete mode 100644 sysdeps/unix/sysv/linux/tile/nptl/Makefile delete mode 100644 sysdeps/unix/sysv/linux/tile/nptl/bits/pthreadtypes.h delete mode 100644 sysdeps/unix/sysv/linux/tile/nptl/bits/semaphore.h delete mode 100644 sysdeps/unix/sysv/linux/tile/nptl/clone.S delete mode 100644 sysdeps/unix/sysv/linux/tile/nptl/createthread.c delete mode 100644 sysdeps/unix/sysv/linux/tile/nptl/lowlevellock.h delete mode 100644 sysdeps/unix/sysv/linux/tile/nptl/pt-vfork.S delete mode 100644 sysdeps/unix/sysv/linux/tile/nptl/sysdep-cancel.h delete mode 100644 sysdeps/unix/sysv/linux/tile/nptl/vfork.S delete mode 100644 sysdeps/unix/sysv/linux/tile/nptl/waitpid.S create mode 100644 sysdeps/unix/sysv/linux/tile/pt-vfork.S create mode 100644 sysdeps/unix/sysv/linux/tile/sysdep-cancel.h create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/c++-types.data create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/ld.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libBrokenLocale.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libanl.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libcrypt.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libdl.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libnsl.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libpthread.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libresolv.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/librt.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libthread_db.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libutil.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/c++-types.data create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/ld.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libBrokenLocale.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libanl.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libcrypt.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libdl.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libnsl.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libpthread.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libresolv.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/librt.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libthread_db.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libutil.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/c++-types.data create mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/ld.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libBrokenLocale.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libanl.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libcrypt.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libdl.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libnsl.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libpthread.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libresolv.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/librt.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libthread_db.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/libutil.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/nptl/c++-types.data delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/nptl/ld.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/nptl/libBrokenLocale.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/nptl/libanl.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/nptl/libc.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/nptl/libcrypt.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/nptl/libdl.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/nptl/libm.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/nptl/libnsl.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/nptl/libpthread.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/nptl/libresolv.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/nptl/librt.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/nptl/libthread_db.abilist delete mode 100644 sysdeps/unix/sysv/linux/tile/tilepro/nptl/libutil.abilist create mode 100644 sysdeps/unix/sysv/linux/tile/vfork.S create mode 100644 sysdeps/unix/sysv/linux/tile/waitpid.S diff --git a/ChangeLog b/ChangeLog index e8599a2acd..dec386818e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,162 @@ +2014-06-10 Chris Metcalf + + * sysdeps/unix/sysv/linux/tile/nptl/bits/pthreadtypes.h: Moved ... + * sysdeps/tile/nptl/bits/pthreadtypes.h: ... here. + * sysdeps/unix/sysv/linux/tile/nptl/bits/semaphore.h: Moved ... + * sysdeps/tile/nptl/bits/semaphore.h: ... here. + * sysdeps/unix/sysv/linux/tile/nptl/Makefile: Removed, merged into ... + * sysdeps/unix/sysv/linux/tile/Makefile: ... here. + * sysdeps/unix/sysv/linux/tile/nptl/clone.S: Moved ... + * sysdeps/unix/sysv/linux/tile/clone.S: ... here. + * sysdeps/unix/sysv/linux/tile/nptl/createthread.c: Moved ... + * sysdeps/unix/sysv/linux/tile/createthread.c: ... here. + * sysdeps/unix/sysv/linux/tile/nptl/lowlevellock.h: Moved ... + * sysdeps/unix/sysv/linux/tile/lowlevellock.h: ... here. + * sysdeps/unix/sysv/linux/tile/nptl/pt-vfork.S: Moved ... + * sysdeps/unix/sysv/linux/tile/pt-vfork.S: ... here. + * sysdeps/unix/sysv/linux/tile/nptl/sysdep-cancel.h: Moved ... + * sysdeps/unix/sysv/linux/tile/sysdep-cancel.h: ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/c++-types.data: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/c++-types.data: + ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/ld.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/ld.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libBrokenLocale.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libBrokenLocale.abilist: + ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libanl.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libanl.abilist: + ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libc.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libc.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libcrypt.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libcrypt.abilist: + ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libdl.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libdl.abilist: + ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libm.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libm.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libnsl.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libnsl.abilist: + ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libpthread.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libpthread.abilist: + ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libresolv.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libresolv.abilist: + ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/librt.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/librt.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libthread_db.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libthread_db.abilist: + ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/nptl/libutil.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx32/libutil.abilist: + ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/c++-types.data: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/c++-types.data: + ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/ld.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/ld.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libBrokenLocale.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libBrokenLocale.abilist: + ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libanl.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libanl.abilist: + ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libc.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libc.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libcrypt.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libcrypt.abilist: + ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libdl.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libdl.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libm.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libm.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libnsl.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libnsl.abilist: + ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libpthread.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libpthread.abilist: + ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libresolv.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libresolv.abilist: + ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/librt.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/librt.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libthread_db.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libthread_db.abilist: + ... here. + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/nptl/libutil.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilegx/tilegx64/libutil.abilist: + ... here. + * sysdeps/unix/sysv/linux/tile/tilepro/nptl/c++-types.data: Moved ... + * sysdeps/unix/sysv/linux/tile/tilepro/c++-types.data: ... here. + * sysdeps/unix/sysv/linux/tile/tilepro/nptl/ld.abilist: Moved ... + * sysdeps/unix/sysv/linux/tile/tilepro/ld.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilepro/nptl/libBrokenLocale.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilepro/libBrokenLocale.abilist: + ... here. + * sysdeps/unix/sysv/linux/tile/tilepro/nptl/libanl.abilist: Moved ... + * sysdeps/unix/sysv/linux/tile/tilepro/libanl.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilepro/nptl/libc.abilist: Moved ... + * sysdeps/unix/sysv/linux/tile/tilepro/libc.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilepro/nptl/libcrypt.abilist: Moved ... + * sysdeps/unix/sysv/linux/tile/tilepro/libcrypt.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilepro/nptl/libdl.abilist: Moved ... + * sysdeps/unix/sysv/linux/tile/tilepro/libdl.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilepro/nptl/libm.abilist: Moved ... + * sysdeps/unix/sysv/linux/tile/tilepro/libm.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilepro/nptl/libnsl.abilist: Moved ... + * sysdeps/unix/sysv/linux/tile/tilepro/libnsl.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilepro/nptl/libpthread.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilepro/libpthread.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilepro/nptl/libresolv.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilepro/libresolv.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilepro/nptl/librt.abilist: Moved ... + * sysdeps/unix/sysv/linux/tile/tilepro/librt.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilepro/nptl/libthread_db.abilist: + Moved ... + * sysdeps/unix/sysv/linux/tile/tilepro/libthread_db.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/tilepro/nptl/libutil.abilist: Moved ... + * sysdeps/unix/sysv/linux/tile/tilepro/libutil.abilist: ... here. + * sysdeps/unix/sysv/linux/tile/nptl/vfork.S: Moved ... + * sysdeps/unix/sysv/linux/tile/vfork.S: ... here. + * sysdeps/unix/sysv/linux/tile/nptl/waitpid.S: Moved ... + * sysdeps/unix/sysv/linux/tile/waitpid.S: ... here. + 2014-06-10 Wilco * math/test-fenv-return.c: New file. diff --git a/sysdeps/tile/nptl/bits/pthreadtypes.h b/sysdeps/tile/nptl/bits/pthreadtypes.h new file mode 100644 index 0000000000..5ca3391ce5 --- /dev/null +++ b/sysdeps/tile/nptl/bits/pthreadtypes.h @@ -0,0 +1,226 @@ +/* Copyright (C) 2011-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Based on work contributed by Ulrich Drepper , 2002. + Contributed by Chris Metcalf , 2011. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + . */ + +#ifndef _BITS_PTHREADTYPES_H +#define _BITS_PTHREADTYPES_H 1 + +#include + +#if __WORDSIZE == 64 +# define __SIZEOF_PTHREAD_ATTR_T 56 +# define __SIZEOF_PTHREAD_MUTEX_T 40 +# define __SIZEOF_PTHREAD_MUTEXATTR_T 4 +# define __SIZEOF_PTHREAD_COND_T 48 +# define __SIZEOF_PTHREAD_CONDATTR_T 4 +# define __SIZEOF_PTHREAD_RWLOCK_T 56 +# define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 +# define __SIZEOF_PTHREAD_BARRIER_T 32 +# define __SIZEOF_PTHREAD_BARRIERATTR_T 4 +#else +# define __SIZEOF_PTHREAD_ATTR_T 36 +# define __SIZEOF_PTHREAD_MUTEX_T 24 +# define __SIZEOF_PTHREAD_MUTEXATTR_T 4 +# define __SIZEOF_PTHREAD_COND_T 48 +# define __SIZEOF_PTHREAD_CONDATTR_T 4 +# define __SIZEOF_PTHREAD_RWLOCK_T 32 +# define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 +# define __SIZEOF_PTHREAD_BARRIER_T 20 +# define __SIZEOF_PTHREAD_BARRIERATTR_T 4 +#endif + + +/* Thread identifiers. The structure of the attribute type is not + exposed on purpose. */ +typedef unsigned long int pthread_t; + + +union pthread_attr_t +{ + char __size[__SIZEOF_PTHREAD_ATTR_T]; + long int __align; +}; +#ifndef __have_pthread_attr_t +typedef union pthread_attr_t pthread_attr_t; +# define __have_pthread_attr_t 1 +#endif + +#if __WORDSIZE == 64 +typedef struct __pthread_internal_list +{ + struct __pthread_internal_list *__prev; + struct __pthread_internal_list *__next; +} __pthread_list_t; +#else +typedef struct __pthread_internal_slist +{ + struct __pthread_internal_slist *__next; +} __pthread_slist_t; +#endif + + +/* Data structures for mutex handling. The structure of the attribute + type is not exposed on purpose. */ +typedef union +{ + struct __pthread_mutex_s + { + int __lock; + unsigned int __count; + int __owner; +#if __WORDSIZE == 64 + unsigned int __nusers; +#endif + /* KIND must stay at this position in the structure to maintain + binary compatibility. */ + int __kind; +#if __WORDSIZE == 64 + int __spins; + __pthread_list_t __list; +# define __PTHREAD_MUTEX_HAVE_PREV 1 +#else + unsigned int __nusers; + __extension__ union + { + int __spins; + __pthread_slist_t __list; + }; +#endif + } __data; + char __size[__SIZEOF_PTHREAD_MUTEX_T]; + long int __align; +} pthread_mutex_t; + +typedef union +{ + char __size[__SIZEOF_PTHREAD_MUTEXATTR_T]; + int __align; +} pthread_mutexattr_t; + +/* Mutex __spins initializer used by PTHREAD_MUTEX_INITIALIZER. */ +#define __PTHREAD_SPINS 0 + + +/* Data structure for conditional variable handling. The structure of + the attribute type is not exposed on purpose. */ +typedef union +{ + struct + { + int __lock; + unsigned int __futex; + __extension__ unsigned long long int __total_seq; + __extension__ unsigned long long int __wakeup_seq; + __extension__ unsigned long long int __woken_seq; + void *__mutex; + unsigned int __nwaiters; + unsigned int __broadcast_seq; + } __data; + char __size[__SIZEOF_PTHREAD_COND_T]; + __extension__ long long int __align; +} pthread_cond_t; + +typedef union +{ + char __size[__SIZEOF_PTHREAD_CONDATTR_T]; + int __align; +} pthread_condattr_t; + + +/* Keys for thread-specific data */ +typedef unsigned int pthread_key_t; + + +/* Once-only execution */ +typedef int pthread_once_t; + + +#if defined __USE_UNIX98 || defined __USE_XOPEN2K +/* Data structure for read-write lock variable handling. The + structure of the attribute type is not exposed on purpose. */ +typedef union +{ +# if __WORDSIZE == 64 + struct + { + int __lock; + unsigned int __nr_readers; + unsigned int __readers_wakeup; + unsigned int __writer_wakeup; + unsigned int __nr_readers_queued; + unsigned int __nr_writers_queued; + int __writer; + int __shared; + unsigned long int __pad1; + unsigned long int __pad2; + /* FLAGS must stay at this position in the structure to maintain + binary compatibility. */ + unsigned int __flags; + } __data; +# else + struct + { + int __lock; + unsigned int __nr_readers; + unsigned int __readers_wakeup; + unsigned int __writer_wakeup; + unsigned int __nr_readers_queued; + unsigned int __nr_writers_queued; + /* FLAGS must stay at this position in the structure to maintain + binary compatibility. */ + unsigned char __flags; + unsigned char __shared; + unsigned char __pad1; + unsigned char __pad2; + int __writer; + } __data; +# endif + char __size[__SIZEOF_PTHREAD_RWLOCK_T]; + long int __align; +} pthread_rwlock_t; + +typedef union +{ + char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T]; + long int __align; +} pthread_rwlockattr_t; +#endif + + +#ifdef __USE_XOPEN2K +/* POSIX spinlock data type. */ +typedef volatile int pthread_spinlock_t; + + +/* POSIX barriers data type. The structure of the type is + deliberately not exposed. */ +typedef union +{ + char __size[__SIZEOF_PTHREAD_BARRIER_T]; + long int __align; +} pthread_barrier_t; + +typedef union +{ + char __size[__SIZEOF_PTHREAD_BARRIERATTR_T]; + int __align; +} pthread_barrierattr_t; +#endif + + +#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/tile/nptl/bits/semaphore.h b/sysdeps/tile/nptl/bits/semaphore.h new file mode 100644 index 0000000000..475617df0f --- /dev/null +++ b/sysdeps/tile/nptl/bits/semaphore.h @@ -0,0 +1,41 @@ +/* Copyright (C) 2011-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Chris Metcalf , 2011. + Based on work contributed by Ulrich Drepper , 2002. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + . */ + +#ifndef _SEMAPHORE_H +# error "Never use directly; include instead." +#endif + +#include + +#if __WORDSIZE == 64 +# define __SIZEOF_SEM_T 32 +#else +# define __SIZEOF_SEM_T 16 +#endif + + +/* Value returned if `sem_open' failed. */ +#define SEM_FAILED ((sem_t *) 0) + + +typedef union +{ + char __size[__SIZEOF_SEM_T]; + long int __align; +} sem_t; diff --git a/sysdeps/unix/sysv/linux/tile/Makefile b/sysdeps/unix/sysv/linux/tile/Makefile index 0bcb95f63a..6d360c0b64 100644 --- a/sysdeps/unix/sysv/linux/tile/Makefile +++ b/sysdeps/unix/sysv/linux/tile/Makefile @@ -23,3 +23,8 @@ sysdep_routines += dl-static sysdep-rtld-routines += dl-static endif endif + +ifeq ($(subdir),nptl) +# pull in __syscall_error routine +libpthread-routines += sysdep +endif diff --git a/sysdeps/unix/sysv/linux/tile/clone.S b/sysdeps/unix/sysv/linux/tile/clone.S new file mode 100644 index 0000000000..f48dba523c --- /dev/null +++ b/sysdeps/unix/sysv/linux/tile/clone.S @@ -0,0 +1,221 @@ +/* Copyright (C) 2011-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Chris Metcalf , 2011. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + . */ + +/* clone() is even more special than fork() as it mucks with stacks + and invokes a function in the right context after it's all over. */ + +#include +#define _ERRNO_H 1 +#include + +#include +#include +#include +#include + +/* What we save where in the stack frame; must include all callee-saves. */ +#define FRAME_NEXT_LR (0 * REGSIZE) /* reserved by ABI; not used here */ +#define FRAME_SP (1 * REGSIZE) +#define FRAME_R30 (2 * REGSIZE) +#define FRAME_R31 (3 * REGSIZE) +#define FRAME_R32 (4 * REGSIZE) +#define FRAME_SIZE (5 * REGSIZE) + +/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, + pid_t *ptid, struct user_desc *tls, pid_t *ctid); */ + + .text +ENTRY (__clone) + /* sanity check arguments */ + BEQZ r0, .Linvalid + BEQZ r1, .Linvalid + + /* Create a stack frame so we can pass callee-saves to new task. */ + { + move r10, sp + ST sp, lr + ADDI_PTR sp, sp, -FRAME_SIZE + } + cfi_offset (lr, 0) + cfi_def_cfa_offset (FRAME_SIZE) + ADDI_PTR r11, sp, FRAME_SP + { + ST r11, r10 + ADDI_PTR r11, sp, FRAME_R30 + } + { + ST r11, r30 + ADDI_PTR r11, sp, FRAME_R31 + } + cfi_offset (r30, FRAME_R30 - FRAME_SIZE) + { + ST r11, r31 + ADDI_PTR r11, sp, FRAME_R32 + } + cfi_offset (r31, FRAME_R31 - FRAME_SIZE) + ST r11, r32 + cfi_offset (r32, FRAME_R32 - FRAME_SIZE) + + /* Make sure child stack is properly aligned, and set up the + top frame so that we can call out of it immediately in the + child. Setting it up here means we fault in the parent if + it's bogus, which is probably cleaner than faulting first + thing in the child. */ + ADDI_PTR r1, r1, -C_ABI_SAVE_AREA_SIZE + andi r1, r1, -C_ABI_SAVE_AREA_SIZE + ADDI_PTR r9, r1, REGSIZE /* sp of this frame on entry, i.e. zero */ + ST r9, zero + + /* We need to switch the argument convention around from + libc to kernel: + + libc: + r0 fn + r1 child_stack + r2 flags + r3 arg + r4 ptid + r5 tls + r6 ctid + + kernel: + r0 flags + r1 child_stack [same as libc] + r2 ptid + r3 ctid + r4 tls + + Plus the callee-saves as described at .Lthread_start, below. */ + { + move r32, r0 + move r0, r2 + } + { + move r31, r3 + move r3, r6 + } + { + move r30, r2 + move r2, r4 + } + { + move r4, r5 + moveli TREG_SYSCALL_NR_NAME, __NR_clone + } + swint1 + BEQZ r0, .Lthread_start /* If in child task. */ + + /* Restore the callee-saved registers and return. */ + ADDLI_PTR lr, sp, FRAME_SIZE + { + LD lr, lr + ADDLI_PTR r30, sp, FRAME_R30 + } + { + LD r30, r30 + ADDLI_PTR r31, sp, FRAME_R31 + } + { + LD r31, r31 + ADDLI_PTR r32, sp, FRAME_R32 + } + { + LD r32, r32 + ADDI_PTR sp, sp, FRAME_SIZE + } + cfi_def_cfa_offset (0) + + BNEZ r1, .Lerror + jrp lr + +.Lerror: + j SYSCALL_ERROR_NAME + +.Linvalid: + { + movei r1, EINVAL + j SYSCALL_ERROR_NAME + } + +/* This function expects to receive: + + sp: the top of a valid stack area + r30: clone() flags + r31: the argument to pass to the user function + r32: the user function pointer */ + +.Lthread_start: + cfi_def_cfa_offset (FRAME_SIZE) + cfi_undefined (lr) + /* Check and see if we need to reset the PID, which we do if + CLONE_THREAD isn't set, i.e. we're not staying in the thread group. + If CLONE_VM is set, we're doing some kind of thread-like clone, + so we set the tid/pid to -1 to disable using the cached values + in getpid(). Otherwise (if CLONE_VM isn't set), it's a + fork-like clone, and we go ahead and write the cached values + from the true system pid (retrieved via __NR_getpid syscall). */ +#ifdef __tilegx__ + { + moveli r0, hw1_last(CLONE_VM) + moveli r1, hw1_last(CLONE_THREAD) + } + { + shl16insli r0, r0, hw0(CLONE_VM) + shl16insli r1, r1, hw0(CLONE_THREAD) + } +#else + { + moveli r0, lo16(CLONE_VM) + moveli r1, lo16(CLONE_THREAD) + } + { + auli r0, r0, ha16(CLONE_VM) + auli r1, r1, ha16(CLONE_THREAD) + } +#endif + { + and r0, r30, r0 + and r1, r30, r1 + } + BNEZ r1, .Lno_reset_pid /* CLONE_THREAD is set */ + { + movei r0, -1 + BNEZ r0, .Lgotpid /* CLONE_VM is set */ + } + moveli TREG_SYSCALL_NR_NAME, __NR_getpid + swint1 +.Lgotpid: + ADDLI_PTR r2, tp, PID_OFFSET + { + ST4 r2, r0 + ADDLI_PTR r2, tp, TID_OFFSET + } + ST4 r2, r0 +.Lno_reset_pid: + { + /* Invoke user function with specified argument. */ + move r0, r31 + jalr r32 + } + { + j HIDDEN_JUMPTARGET(_exit) + info INFO_OP_CANNOT_BACKTRACE /* Notify backtracer to stop. */ + } +PSEUDO_END (__clone) + +weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/tile/createthread.c b/sysdeps/unix/sysv/linux/tile/createthread.c new file mode 100644 index 0000000000..8472ad5f62 --- /dev/null +++ b/sysdeps/unix/sysv/linux/tile/createthread.c @@ -0,0 +1,24 @@ +/* Copyright (C) 2011-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Chris Metcalf , 2011. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + . */ + +/* Value passed to 'clone' for initialization of the thread register. */ +#define TLS_VALUE ((void *) (pd) \ + + TLS_TCB_OFFSET + TLS_PRE_TCB_SIZE) + +/* Get the real implementation. */ +#include diff --git a/sysdeps/unix/sysv/linux/tile/lowlevellock.h b/sysdeps/unix/sysv/linux/tile/lowlevellock.h new file mode 100644 index 0000000000..46149f1cd4 --- /dev/null +++ b/sysdeps/unix/sysv/linux/tile/lowlevellock.h @@ -0,0 +1,321 @@ +/* Copyright (C) 2011-2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Chris Metcalf , 2011. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library. If not, see + . */ + +#ifndef _LOWLEVELLOCK_H +#define _LOWLEVELLOCK_H 1 + +#include +#include +#include +#include +#include +#include + + +#define FUTEX_WAIT 0 +#define FUTEX_WAKE 1 +#define FUTEX_REQUEUE 3 +#define FUTEX_CMP_REQUEUE 4 +#define FUTEX_WAKE_OP 5 +#define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1) +#define FUTEX_LOCK_PI 6 +#define FUTEX_UNLOCK_PI 7 +#define FUTEX_TRYLOCK_PI 8 +#define FUTEX_WAIT_BITSET 9 +#define FUTEX_WAKE_BITSET 10 +#define FUTEX_WAIT_REQUEUE_PI 11 +#define FUTEX_CMP_REQUEUE_PI 12 +#define FUTEX_PRIVATE_FLAG 128 +#define FUTEX_CLOCK_REALTIME 256 + +#define FUTEX_BITSET_MATCH_ANY 0xffffffff + +/* Values for 'private' parameter of locking macros. Yes, the + definition seems to be backwards. But it is not. The bit will be + reversed before passing to the system call. */ +#define LLL_PRIVATE 0 +#define LLL_SHARED FUTEX_PRIVATE_FLAG + + +#if !defined NOT_IN_libc || defined IS_IN_rtld +/* In libc.so or ld.so all futexes are private. */ +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + ((fl) | FUTEX_PRIVATE_FLAG) +# else +# define __lll_private_flag(fl, private) \ + ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) +# endif +#else +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) +# else +# define __lll_private_flag(fl, private) \ + (__builtin_constant_p (private) \ + ? ((private) == 0 \ + ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) \ + : (fl)) \ + : ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG) \ + & THREAD_GETMEM (THREAD_SELF, header.private_futex)))) +# endif +#endif + + +#define lll_futex_wait(futexp, val, private) \ + lll_futex_timed_wait (futexp, val, NULL, private) + +#define lll_futex_timed_wait(futexp, val, timespec, private) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ + INTERNAL_SYSCALL (futex, __err, 4, (futexp), \ + __lll_private_flag (FUTEX_WAIT, private), \ + (val), (timespec)); \ + }) + +#define lll_futex_timed_wait_bitset(futexp, val, timespec, clockbit, private) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ + long int __ret; \ + int __op = FUTEX_WAIT_BITSET | clockbit; \ + \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ + __lll_private_flag (__op, private), \ + (val), (timespec), NULL /* Unused. */, \ + FUTEX_BITSET_MATCH_ANY); \ + __ret; \ + }) + +#define lll_futex_wake(futexp, nr, private) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ + INTERNAL_SYSCALL (futex, __err, 4, (futexp), \ + __lll_private_flag (FUTEX_WAKE, private), \ + (nr), 0); \ + }) + +#define lll_robust_dead(futexv, private) \ + do \ + { \ + int *__futexp = &(futexv); \ + atomic_or (__futexp, FUTEX_OWNER_DIED); \ + lll_futex_wake (__futexp, 1, private); \ + } \ + while (0) + +/* Returns non-zero if error happened, zero if success. */ +#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val, private) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ + long int __ret; \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ + __lll_private_flag (FUTEX_CMP_REQUEUE, private),\ + (nr_wake), (nr_move), (mutex), (val)); \ + INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ + }) + +/* Returns non-zero if error happened, zero if success. */ +#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2, private) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ + long int __ret; \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ + __lll_private_flag (FUTEX_WAKE_OP, private), \ + (nr_wake), (nr_wake2), (futexp2), \ + FUTEX_OP_CLEAR_WAKE_IF_GT_ONE); \ + INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ + }) + +/* Priority Inheritance support. */ +#define lll_futex_wait_requeue_pi(futexp, val, mutex, private) \ + lll_futex_timed_wait_requeue_pi (futexp, val, NULL, 0, mutex, private) + +#define lll_futex_timed_wait_requeue_pi(futexp, val, timespec, clockbit, \ + mutex, private) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ + long int __ret; \ + int __op = FUTEX_WAIT_REQUEUE_PI | clockbit; \ + \ + __ret = INTERNAL_SYSCALL (futex, __err, 5, (futexp), \ + __lll_private_flag (__op, private), \ + (val), (timespec), mutex); \ + INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ + }) + +#define lll_futex_cmp_requeue_pi(futexp, nr_wake, nr_move, mutex, val, priv) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ + long int __ret; \ + \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ + __lll_private_flag (FUTEX_CMP_REQUEUE_PI, priv),\ + (nr_wake), (nr_move), (mutex), (val)); \ + INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ + }) + + +static inline int __attribute__ ((always_inline)) +__lll_trylock (int *futex) +{ + return atomic_compare_and_exchange_val_acq (futex, 1, 0) != 0; +} +#define lll_trylock(lock) __lll_trylock (&(lock)) + + +static inline int __attribute__ ((always_inline)) +__lll_cond_trylock (int *futex) +{ + return atomic_compare_and_exchange_val_acq (futex, 2, 0) != 0; +} +#define lll_cond_trylock(lock) __lll_cond_trylock (&(lock)) + + +static inline int __attribute__ ((always_inline)) +__lll_robust_trylock (int *futex, int id) +{ + return atomic_compare_and_exchange_val_acq (futex, id, 0) != 0; +} +#define lll_robust_trylock(lock, id) \ + __lll_robust_trylock (&(lock), id) + +extern void __lll_lock_wait_private (int *futex) attribute_hidden; +extern void __lll_lock_wait (int *futex, int private) attribute_hidden; +extern int __lll_robust_lock_wait (int *futex, int private) attribute_hidden; + +static inline void __attribute__ ((always_inline)) +__lll_lock (int *futex, int private) +{ + if (atomic_compare_and_exchange_bool_acq (futex, 1, 0) != 0) + { + if (__builtin_constant_p (private) && private == LLL_PRIVATE) + __lll_lock_wait_private (futex); + else + __lll_lock_wait (futex, private); + } +} +#define lll_lock(futex, private) __lll_lock (&(futex), private) + + +static inline int __attribute__ ((always_inline)) +__lll_robust_lock (int *futex, int id, int private) +{ + int result = 0; + if (atomic_compare_and_exchange_bool_acq (futex, id, 0) != 0) + result = __lll_robust_lock_wait (futex, private); + return result; +} +#define lll_robust_lock(futex, id, private) \ + __lll_robust_lock (&(futex), id, private) + + +static inline void __attribute__ ((always_inline)) +__lll_cond_lock (int *futex, int private) +{ + if (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0) + __lll_lock_wait (futex, private); +} +#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private) + + +#define lll_robust_cond_lock(futex, id, private) \ + __lll_robust_lock (&(futex), (id) | FUTEX_WAITERS, private) + + +extern int __lll_timedlock_wait (int *futex, const struct timespec *, + int private) attribute_hidden; +extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *, + int private) attribute_hidden; + +static inline int __attribute__ ((always_inline)) +__lll_timedlock (int *futex, const struct timespec *abstime, int private) +{ + int result = 0; + if (atomic_compare_and_exchange_bool_acq (futex, 1, 0) != 0) + result = __lll_timedlock_wait (futex, abstime, private); + return result; +} +#define lll_timedlock(futex, abstime, private) \ + __lll_timedlock (&(futex), abstime, private) + + +static inline int __attribute__ ((always_inline)) +__lll_robust_timedlock (int *futex, const struct timespec *abstime, + int id, int private) +{ + int result = 0; + if (atomic_compare_and_exchange_bool_acq (futex, id, 0) != 0) + result = __lll_robust_timedlock_wait (futex, abstime, private); + return result; +} +#define lll_robust_timedlock(futex, abstime, id, private) \ + __lll_robust_timedlock (&(futex), abstime, id, private) + + +#define __lll_unlock(futex, private) \ + (void) \ + ({ int *__futex = (futex); \ + int __oldval = atomic_exchange_rel (__futex, 0); \ + if (__builtin_expect (__oldval > 1, 0)) \ + lll_futex_wake (__futex, 1, private); \ + }) +#define lll_unlock(futex, private) __lll_unlock(&(futex), private) + + +#define __lll_robust_unlock(futex, private) \ + (void) \ + ({ int *__futex = (futex); \ + int __oldval = atomic_exchange_rel (__futex, 0); \ + if (__builtin_expect (__oldval & FUTEX_WAITERS, 0)) \ + lll_futex_wake (__futex, 1, private); \ + }) +#define lll_robust_unlock(futex, private) \ + __lll_robust_unlock(&(futex), private) + + +#define lll_islocked(futex) \ + (futex != 0) + +/* Initializers for lock. */ +#define LLL_LOCK_INITIALIZER (0) +#define LLL_LOCK_INITIALIZER_LOCKED (1) + + +/* The kernel notifies a process which uses CLONE_CHILD_CLEARTID via futex + wakeup when the clone terminates. The memory location contains the + thread ID while the clone is running and is reset to zero + afterwards. */ +#define lll_wait_tid(tid) \ + do { \ + __typeof (tid) __tid; \ + while ((__tid = (tid)) != 0) \ + lll_futex_wait (&(tid), __tid, LLL_SHARED); \ + } while (0) + +extern int __lll_timedwait_tid (int *, const struct timespec *) + attribute_hidden; + +#define lll_timedwait_tid(tid, abstime) \ + ({ \ + int __res = 0; \ + if ((tid) != 0) \ + __res = __lll_timedwait_tid (&(tid), (abstime)); \ + __res; \ + }) + +#endif /* lowlevellock.h */ diff --git a/sysdeps/unix/sysv/linux/tile/nptl/Makefile b/sysdeps/unix/sysv/linux/tile/nptl/Makefile deleted file mode 100644 index e98c9bd866..0000000000 --- a/sysdeps/unix/sysv/linux/tile/nptl/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -# pull in __syscall_error routine -libpthread-routines += sysdep diff --git a/sysdeps/unix/sysv/linux/tile/nptl/bits/pthreadtypes.h b/sysdeps/unix/sysv/linux/tile/nptl/bits/pthreadtypes.h deleted file mode 100644 index 5ca3391ce5..0000000000 --- a/sysdeps/unix/sysv/linux/tile/nptl/bits/pthreadtypes.h +++ /dev/null @@ -1,226 +0,0 @@ -/* Copyright (C) 2011-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Based on work contributed by Ulrich Drepper , 2002. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _BITS_PTHREADTYPES_H -#define _BITS_PTHREADTYPES_H 1 - -#include - -#if __WORDSIZE == 64 -# define __SIZEOF_PTHREAD_ATTR_T 56 -# define __SIZEOF_PTHREAD_MUTEX_T 40 -# define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -# define __SIZEOF_PTHREAD_COND_T 48 -# define __SIZEOF_PTHREAD_CONDATTR_T 4 -# define __SIZEOF_PTHREAD_RWLOCK_T 56 -# define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 -# define __SIZEOF_PTHREAD_BARRIER_T 32 -# define __SIZEOF_PTHREAD_BARRIERATTR_T 4 -#else -# define __SIZEOF_PTHREAD_ATTR_T 36 -# define __SIZEOF_PTHREAD_MUTEX_T 24 -# define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -# define __SIZEOF_PTHREAD_COND_T 48 -# define __SIZEOF_PTHREAD_CONDATTR_T 4 -# define __SIZEOF_PTHREAD_RWLOCK_T 32 -# define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 -# define __SIZEOF_PTHREAD_BARRIER_T 20 -# define __SIZEOF_PTHREAD_BARRIERATTR_T 4 -#endif - - -/* Thread identifiers. The structure of the attribute type is not - exposed on purpose. */ -typedef unsigned long int pthread_t; - - -union pthread_attr_t -{ - char __size[__SIZEOF_PTHREAD_ATTR_T]; - long int __align; -}; -#ifndef __have_pthread_attr_t -typedef union pthread_attr_t pthread_attr_t; -# define __have_pthread_attr_t 1 -#endif - -#if __WORDSIZE == 64 -typedef struct __pthread_internal_list -{ - struct __pthread_internal_list *__prev; - struct __pthread_internal_list *__next; -} __pthread_list_t; -#else -typedef struct __pthread_internal_slist -{ - struct __pthread_internal_slist *__next; -} __pthread_slist_t; -#endif - - -/* Data structures for mutex handling. The structure of the attribute - type is not exposed on purpose. */ -typedef union -{ - struct __pthread_mutex_s - { - int __lock; - unsigned int __count; - int __owner; -#if __WORDSIZE == 64 - unsigned int __nusers; -#endif - /* KIND must stay at this position in the structure to maintain - binary compatibility. */ - int __kind; -#if __WORDSIZE == 64 - int __spins; - __pthread_list_t __list; -# define __PTHREAD_MUTEX_HAVE_PREV 1 -#else - unsigned int __nusers; - __extension__ union - { - int __spins; - __pthread_slist_t __list; - }; -#endif - } __data; - char __size[__SIZEOF_PTHREAD_MUTEX_T]; - long int __align; -} pthread_mutex_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_MUTEXATTR_T]; - int __align; -} pthread_mutexattr_t; - -/* Mutex __spins initializer used by PTHREAD_MUTEX_INITIALIZER. */ -#define __PTHREAD_SPINS 0 - - -/* Data structure for conditional variable handling. The structure of - the attribute type is not exposed on purpose. */ -typedef union -{ - struct - { - int __lock; - unsigned int __futex; - __extension__ unsigned long long int __total_seq; - __extension__ unsigned long long int __wakeup_seq; - __extension__ unsigned long long int __woken_seq; - void *__mutex; - unsigned int __nwaiters; - unsigned int __broadcast_seq; - } __data; - char __size[__SIZEOF_PTHREAD_COND_T]; - __extension__ long long int __align; -} pthread_cond_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_CONDATTR_T]; - int __align; -} pthread_condattr_t; - - -/* Keys for thread-specific data */ -typedef unsigned int pthread_key_t; - - -/* Once-only execution */ -typedef int pthread_once_t; - - -#if defined __USE_UNIX98 || defined __USE_XOPEN2K -/* Data structure for read-write lock variable handling. The - structure of the attribute type is not exposed on purpose. */ -typedef union -{ -# if __WORDSIZE == 64 - struct - { - int __lock; - unsigned int __nr_readers; - unsigned int __readers_wakeup; - unsigned int __writer_wakeup; - unsigned int __nr_readers_queued; - unsigned int __nr_writers_queued; - int __writer; - int __shared; - unsigned long int __pad1; - unsigned long int __pad2; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned int __flags; - } __data; -# else - struct - { - int __lock; - unsigned int __nr_readers; - unsigned int __readers_wakeup; - unsigned int __writer_wakeup; - unsigned int __nr_readers_queued; - unsigned int __nr_writers_queued; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __flags; - unsigned char __shared; - unsigned char __pad1; - unsigned char __pad2; - int __writer; - } __data; -# endif - char __size[__SIZEOF_PTHREAD_RWLOCK_T]; - long int __align; -} pthread_rwlock_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T]; - long int __align; -} pthread_rwlockattr_t; -#endif - - -#ifdef __USE_XOPEN2K -/* POSIX spinlock data type. */ -typedef volatile int pthread_spinlock_t; - - -/* POSIX barriers data type. The structure of the type is - deliberately not exposed. */ -typedef union -{ - char __size[__SIZEOF_PTHREAD_BARRIER_T]; - long int __align; -} pthread_barrier_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_BARRIERATTR_T]; - int __align; -} pthread_barrierattr_t; -#endif - - -#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/unix/sysv/linux/tile/nptl/bits/semaphore.h b/sysdeps/unix/sysv/linux/tile/nptl/bits/semaphore.h deleted file mode 100644 index 475617df0f..0000000000 --- a/sysdeps/unix/sysv/linux/tile/nptl/bits/semaphore.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2011-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - Based on work contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -#ifndef _SEMAPHORE_H -# error "Never use directly; include instead." -#endif - -#include - -#if __WORDSIZE == 64 -# define __SIZEOF_SEM_T 32 -#else -# define __SIZEOF_SEM_T 16 -#endif - - -/* Value returned if `sem_open' failed. */ -#define SEM_FAILED ((sem_t *) 0) - - -typedef union -{ - char __size[__SIZEOF_SEM_T]; - long int __align; -} sem_t; diff --git a/sysdeps/unix/sysv/linux/tile/nptl/clone.S b/sysdeps/unix/sysv/linux/tile/nptl/clone.S deleted file mode 100644 index f48dba523c..0000000000 --- a/sysdeps/unix/sysv/linux/tile/nptl/clone.S +++ /dev/null @@ -1,221 +0,0 @@ -/* Copyright (C) 2011-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* clone() is even more special than fork() as it mucks with stacks - and invokes a function in the right context after it's all over. */ - -#include -#define _ERRNO_H 1 -#include - -#include -#include -#include -#include - -/* What we save where in the stack frame; must include all callee-saves. */ -#define FRAME_NEXT_LR (0 * REGSIZE) /* reserved by ABI; not used here */ -#define FRAME_SP (1 * REGSIZE) -#define FRAME_R30 (2 * REGSIZE) -#define FRAME_R31 (3 * REGSIZE) -#define FRAME_R32 (4 * REGSIZE) -#define FRAME_SIZE (5 * REGSIZE) - -/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, - pid_t *ptid, struct user_desc *tls, pid_t *ctid); */ - - .text -ENTRY (__clone) - /* sanity check arguments */ - BEQZ r0, .Linvalid - BEQZ r1, .Linvalid - - /* Create a stack frame so we can pass callee-saves to new task. */ - { - move r10, sp - ST sp, lr - ADDI_PTR sp, sp, -FRAME_SIZE - } - cfi_offset (lr, 0) - cfi_def_cfa_offset (FRAME_SIZE) - ADDI_PTR r11, sp, FRAME_SP - { - ST r11, r10 - ADDI_PTR r11, sp, FRAME_R30 - } - { - ST r11, r30 - ADDI_PTR r11, sp, FRAME_R31 - } - cfi_offset (r30, FRAME_R30 - FRAME_SIZE) - { - ST r11, r31 - ADDI_PTR r11, sp, FRAME_R32 - } - cfi_offset (r31, FRAME_R31 - FRAME_SIZE) - ST r11, r32 - cfi_offset (r32, FRAME_R32 - FRAME_SIZE) - - /* Make sure child stack is properly aligned, and set up the - top frame so that we can call out of it immediately in the - child. Setting it up here means we fault in the parent if - it's bogus, which is probably cleaner than faulting first - thing in the child. */ - ADDI_PTR r1, r1, -C_ABI_SAVE_AREA_SIZE - andi r1, r1, -C_ABI_SAVE_AREA_SIZE - ADDI_PTR r9, r1, REGSIZE /* sp of this frame on entry, i.e. zero */ - ST r9, zero - - /* We need to switch the argument convention around from - libc to kernel: - - libc: - r0 fn - r1 child_stack - r2 flags - r3 arg - r4 ptid - r5 tls - r6 ctid - - kernel: - r0 flags - r1 child_stack [same as libc] - r2 ptid - r3 ctid - r4 tls - - Plus the callee-saves as described at .Lthread_start, below. */ - { - move r32, r0 - move r0, r2 - } - { - move r31, r3 - move r3, r6 - } - { - move r30, r2 - move r2, r4 - } - { - move r4, r5 - moveli TREG_SYSCALL_NR_NAME, __NR_clone - } - swint1 - BEQZ r0, .Lthread_start /* If in child task. */ - - /* Restore the callee-saved registers and return. */ - ADDLI_PTR lr, sp, FRAME_SIZE - { - LD lr, lr - ADDLI_PTR r30, sp, FRAME_R30 - } - { - LD r30, r30 - ADDLI_PTR r31, sp, FRAME_R31 - } - { - LD r31, r31 - ADDLI_PTR r32, sp, FRAME_R32 - } - { - LD r32, r32 - ADDI_PTR sp, sp, FRAME_SIZE - } - cfi_def_cfa_offset (0) - - BNEZ r1, .Lerror - jrp lr - -.Lerror: - j SYSCALL_ERROR_NAME - -.Linvalid: - { - movei r1, EINVAL - j SYSCALL_ERROR_NAME - } - -/* This function expects to receive: - - sp: the top of a valid stack area - r30: clone() flags - r31: the argument to pass to the user function - r32: the user function pointer */ - -.Lthread_start: - cfi_def_cfa_offset (FRAME_SIZE) - cfi_undefined (lr) - /* Check and see if we need to reset the PID, which we do if - CLONE_THREAD isn't set, i.e. we're not staying in the thread group. - If CLONE_VM is set, we're doing some kind of thread-like clone, - so we set the tid/pid to -1 to disable using the cached values - in getpid(). Otherwise (if CLONE_VM isn't set), it's a - fork-like clone, and we go ahead and write the cached values - from the true system pid (retrieved via __NR_getpid syscall). */ -#ifdef __tilegx__ - { - moveli r0, hw1_last(CLONE_VM) - moveli r1, hw1_last(CLONE_THREAD) - } - { - shl16insli r0, r0, hw0(CLONE_VM) - shl16insli r1, r1, hw0(CLONE_THREAD) - } -#else - { - moveli r0, lo16(CLONE_VM) - moveli r1, lo16(CLONE_THREAD) - } - { - auli r0, r0, ha16(CLONE_VM) - auli r1, r1, ha16(CLONE_THREAD) - } -#endif - { - and r0, r30, r0 - and r1, r30, r1 - } - BNEZ r1, .Lno_reset_pid /* CLONE_THREAD is set */ - { - movei r0, -1 - BNEZ r0, .Lgotpid /* CLONE_VM is set */ - } - moveli TREG_SYSCALL_NR_NAME, __NR_getpid - swint1 -.Lgotpid: - ADDLI_PTR r2, tp, PID_OFFSET - { - ST4 r2, r0 - ADDLI_PTR r2, tp, TID_OFFSET - } - ST4 r2, r0 -.Lno_reset_pid: - { - /* Invoke user function with specified argument. */ - move r0, r31 - jalr r32 - } - { - j HIDDEN_JUMPTARGET(_exit) - info INFO_OP_CANNOT_BACKTRACE /* Notify backtracer to stop. */ - } -PSEUDO_END (__clone) - -weak_alias (__clone, clone) diff --git a/sysdeps/unix/sysv/linux/tile/nptl/createthread.c b/sysdeps/unix/sysv/linux/tile/nptl/createthread.c deleted file mode 100644 index 8472ad5f62..0000000000 --- a/sysdeps/unix/sysv/linux/tile/nptl/createthread.c +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 2011-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - . */ - -/* Value passed to 'clone' for initialization of th