mbox series

[00/19] nptl: Fix Race conditions in pthread cancellation (BZ#12683)

Message ID 1513019223-7603-1-git-send-email-adhemerval.zanella@linaro.org
Headers show
Series nptl: Fix Race conditions in pthread cancellation (BZ#12683) | expand

Message

Adhemerval Zanella Netto Dec. 11, 2017, 7:06 p.m. UTC
Another release, another submission for BZ#12683.  This time I finished
support for all support archictures and did some testing on more ports
which resulted in a lot of small fixes.

I have simplified a lot the work required to adjust a new port [1] on
this new cancellable syscall mechanism.  A default implementation
at sysdeps/unix/sysv/linux/syscall_cancel.c is provided and used on
architectures (x86_64 and aarch64 for instance).  It should works
as long the requires syscall markers (__syscall_cancel_arch_{start,end})
as placed right before the cancellation flag test and after the
syscall trap instruction respectively.

However some architecture still requires an assembly crafted 
implementation (for instance if the syscall itself is done through a 
kernel gate as for i686 or ia64 or if it requires a special gate due 
ABI constraint like ARM).  In such case the syscall wrapper 
should be place at sysdeps/unix/sysv/linux/<arch>/syscall_cancel.S 
with following semantic:

---
long int __syscall_cancel_arch (volatile unsigned int *cancelhandling,
  __syscall_arg_t nr, __syscall_arg_t arg1, __syscall_arg_t arg2, 
  __syscall_arg_t arg3, __syscall_arg_t arg4, __syscall_arg_t arg5,
  __syscall_arg_t arg6)
{
  if (*cancelhandling & CANCELED_BITMASK)
    __syscall_do_cancel()

  INTERNAL_SYSCALL_DECL (err);
  result = INTERNAL_SYSCALL_NCS (nr, err, 6, a1, a2, a3, a4, a5, a6);
  if (INTERNAL_SYSCALL_ERROR_P (result, err))
    return -INTERNAL_SYSCALL_ERRNO (result, err);
  return result;
}

* If the architectures requires a cancellation entrypoint for 7 argument
  syscalls (as for MIPSo32) it will need to define SYSCALL_CANCEL7_ARG7
  on sysdep.h.
---

The another architecture specific code is to obtain both the program
counter and process signal mask in the signal handler.  To accomplish it
each architecture implements a new function, ucontext_get_pc, on
sigcontextinfo.h header as:

---
static inline uintptr_t
ucontext_get_pc (const void *cxt)
{
  // TODO: return current program counter based on uc.  Usually 
  // the CTX points to a ucontext_t, however it is architecture
  // dependent (for instance sparc calls with sigcontext).
}

* If the signal frame signal mask is not directly accessible through the
  CTX pointer (either because the kernel invokes the handler with a different
  object than ucontext_t, as SPARC; or due type mismatch between kernel and
  glibc, as for IA64) the architecture might define UCONTEXT_SIGMASK to
  get the uc_mask pointer.
---

I currently tested on x86_64-linux-gnu, x86_64-linux-gnu-x32, i686-linux-gnu,
arm-linux-gnueabihf, aarch64-linux-gnu, sparcv9-linux-gnu, sparc64-linux-gnu,
alpha-linux-gnu, and hppa-linux-gnu.  I also did some simple tests on
ia64-linux-gnu and mips{64}-linux-gnu (to check for the correctness in the
syscall wrapper implementation).  For the rest of support architectures
I just did a cross build/check.

[1] https://sourceware.org/glibc/wiki/PortStatus

Adhemerval Zanella (19):
  nptl: Fix testcases for new pthread cancellation mechanism
  nptl: Fix Race conditions in pthread cancellation (BZ#12683)
  nptl: x86_64: Fix Race conditions in pthread cancellation (BZ#12683)
  nptl: x32: Fix Race conditions in pthread cancellation (BZ#12683)
  nptl: i386: Fix Race conditions in pthread cancellation (BZ#12683)
  nptl: powerpc: Fix Race conditions in pthread cancellation (BZ#12683)
  nptl: aarch64: Fix Race conditions in pthread cancellation (BZ#12683)
  nptl: arm: Fix Race conditions in pthread cancellation (BZ#12683)
  nptl: s390: Fix Race conditions in pthread cancellation (BZ#12683)
  nptl: ia64: Fix Race conditions in pthread cancellation (BZ#12683)
  nptl: alpha: Fix Race conditions in pthread cancellation (BZ#12683)
  nptl: m68k: Fix Race conditions in pthread cancellation (BZ#12683)
  nptl: microblaze: Fix Race conditions in pthread cancellation
    (BZ#12683)
  nptl: tile: Fix Race conditions in pthread cancellation (BZ#12683)
  nptl: sparc: Fix Race conditions in pthread cancellation (BZ#12683)
  nptl: nios2: Fix Race conditions in pthread cancellation (BZ#12683)
  nptl: sh: Fix Race conditions in pthread cancellation (BZ#12683)
  nptl: mips: Fix Race conditions in pthread cancellation (BZ#12683)
  nptl: hppa: Fix Race conditions in pthread cancellation (BZ#12683)

 ChangeLog                                          | 199 +++++++++++++++++++++
 debug/tst-backtrace5.c                             |  26 +--
 include/libc-pointer-arith.h                       |  16 +-
 io/creat.c                                         |   3 -
 io/ppoll.c                                         |   2 -
 manual/llio.texi                                   |   4 +-
 misc/pselect.c                                     |   2 -
 nptl/Makefile                                      |  25 +--
 nptl/Versions                                      |   3 +
 nptl/cancellation.c                                | 101 -----------
 nptl/descr.h                                       |  15 +-
 nptl/libc-cancellation.c                           |  48 ++++-
 nptl/lll_timedlock_wait.c                          |   2 +-
 nptl/lll_timedwait_tid.c                           |   3 +-
 nptl/nptl-init.c                                   |  78 +++++---
 nptl/pthreadP.h                                    |  74 +++-----
 nptl/pthread_cancel.c                              |  68 ++-----
 nptl/pthread_create.c                              |   7 +-
 nptl/pthread_exit.c                                |   9 +-
 nptl/pthread_join.c                                |  10 +-
 nptl/pthread_timedjoin.c                           |   9 +-
 nptl/sem_wait.c                                    |   8 +-
 nptl/tst-cancel-wrappers.sh                        |  92 ----------
 nptl/tst-cancel2.c                                 |   3 -
 nptl/tst-cancel28.c                                |  94 ++++++++++
 nptl/tst-cancel3.c                                 |   3 -
 nptl/tst-cancel4.c                                 |   8 +
 rt/Makefile                                        |   1 -
 support/temp_file.c                                |  23 +++
 support/temp_file.h                                |   6 +
 sysdeps/generic/sigcontextinfo.h                   |  15 ++
 sysdeps/generic/sysdep-cancel.h                    |   3 -
 sysdeps/i386/nptl/tls.h                            |  11 --
 sysdeps/mips/nptl/tls.h                            |   2 +-
 sysdeps/nptl/Makefile                              |   3 +-
 sysdeps/nptl/aio_misc.h                            |  13 +-
 sysdeps/nptl/gai_misc.h                            |  13 +-
 sysdeps/nptl/lowlevellock.h                        |   5 +-
 sysdeps/posix/open64.c                             |  12 +-
 sysdeps/posix/pause.c                              |   2 -
 sysdeps/posix/sigpause.c                           |   3 -
 sysdeps/posix/sigwait.c                            |   9 +-
 sysdeps/posix/waitid.c                             |  11 +-
 sysdeps/sh/sysdep.h                                |   1 +
 sysdeps/sparc/sparc32/lowlevellock.c               |   3 +-
 sysdeps/unix/sysdep.h                              | 118 ++++++++++--
 sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h   |  11 ++
 sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h     |  13 ++
 sysdeps/unix/sysv/linux/arm/sigcontextinfo.h       |  12 ++
 sysdeps/unix/sysv/linux/arm/syscall_cancel.S       |  69 +++++++
 sysdeps/unix/sysv/linux/clock_nanosleep.c          |  20 +--
 sysdeps/unix/sysv/linux/creat.c                    |   2 -
 sysdeps/unix/sysv/linux/creat64.c                  |   2 -
 sysdeps/unix/sysv/linux/futex-internal.h           |  18 +-
 .../sysv/linux/hppa/sigcontextinfo.h}              |  26 ++-
 sysdeps/unix/sysv/linux/hppa/syscall_cancel.S      |  82 +++++++++
 sysdeps/unix/sysv/linux/i386/Makefile              |   2 +-
 sysdeps/unix/sysv/linux/i386/lowlevellock.h        |   2 +-
 sysdeps/unix/sysv/linux/i386/sigcontextinfo.h      |  13 ++
 sysdeps/unix/sysv/linux/i386/syscall_cancel.S      | 107 +++++++++++
 sysdeps/unix/sysv/linux/ia64/sigcontextinfo.h      |  24 +++
 sysdeps/unix/sysv/linux/ia64/syscall_cancel.S      |  94 ++++++++++
 sysdeps/unix/sysv/linux/lowlevellock-futex.h       |  34 +++-
 sysdeps/unix/sysv/linux/m68k/sigcontextinfo.h      |  13 ++
 .../unix/sysv/linux/microblaze/sigcontextinfo.h    |  13 ++
 .../unix/sysv/linux/microblaze/syscall_cancel.S    |  62 +++++++
 .../unix/sysv/linux/mips/mips32/syscall_cancel.S   | 128 +++++++++++++
 sysdeps/unix/sysv/linux/mips/mips32/sysdep.h       |   4 +
 sysdeps/unix/sysv/linux/mips/sigcontextinfo.h      |  13 +-
 sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h     |  16 ++
 sysdeps/unix/sysv/linux/powerpc/sigcontextinfo.h   |  16 ++
 sysdeps/unix/sysv/linux/powerpc/syscall.S          |  14 ++
 sysdeps/unix/sysv/linux/powerpc/syscall_cancel.S   |  64 +++++++
 sysdeps/unix/sysv/linux/pthread_kill.c             |   5 +-
 sysdeps/unix/sysv/linux/s390/sigcontextinfo.h      |  17 ++
 sysdeps/unix/sysv/linux/sh/sigcontextinfo.h        |  11 ++
 sysdeps/unix/sysv/linux/sh/syscall_cancel.S        | 125 +++++++++++++
 sysdeps/unix/sysv/linux/sigwait.c                  |   3 -
 sysdeps/unix/sysv/linux/sigwaitinfo.c              |   3 -
 sysdeps/unix/sysv/linux/socketcall.h               |  37 +++-
 sysdeps/unix/sysv/linux/sparc/lowlevellock.h       |   2 +-
 .../unix/sysv/linux/sparc/sparc32/sigcontextinfo.h |  52 ++++++
 .../unix/sysv/linux/sparc/sparc32/syscall_cancel.S |  74 ++++++++
 .../libc-cancellation.S => sparc/sparc64/pause.c}  |  14 +-
 .../unix/sysv/linux/sparc/sparc64/sigcontextinfo.h |  40 +++++
 .../unix/sysv/linux/sparc/sparc64/syscall_cancel.S |  74 ++++++++
 sysdeps/unix/sysv/linux/syscall_cancel.c           |  63 +++++++
 sysdeps/unix/sysv/linux/sysdep.h                   |  17 ++
 sysdeps/unix/sysv/linux/tile/sigcontextinfo.h      |  12 ++
 sysdeps/unix/sysv/linux/x86_64/cancellation.S      | 115 ------------
 .../unix/sysv/linux/x86_64/librt-cancellation.S    |  21 ---
 sysdeps/unix/sysv/linux/x86_64/lowlevellock.h      |   8 +-
 sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h    |  11 ++
 sysdeps/unix/sysv/linux/x86_64/x32/sysdep.h        |  13 ++
 sysdeps/x86_64/nptl/tcb-offsets.sym                |   1 -
 sysdeps/x86_64/nptl/tls.h                          |  11 --
 96 files changed, 2052 insertions(+), 717 deletions(-)
 delete mode 100644 nptl/cancellation.c
 delete mode 100644 nptl/tst-cancel-wrappers.sh
 create mode 100644 nptl/tst-cancel28.c
 create mode 100644 sysdeps/unix/sysv/linux/arm/syscall_cancel.S
 rename sysdeps/{nptl/librt-cancellation.c => unix/sysv/linux/hppa/sigcontextinfo.h} (55%)
 create mode 100644 sysdeps/unix/sysv/linux/hppa/syscall_cancel.S
 create mode 100644 sysdeps/unix/sysv/linux/i386/syscall_cancel.S
 create mode 100644 sysdeps/unix/sysv/linux/ia64/syscall_cancel.S
 create mode 100644 sysdeps/unix/sysv/linux/microblaze/syscall_cancel.S
 create mode 100644 sysdeps/unix/sysv/linux/mips/mips32/syscall_cancel.S
 create mode 100644 sysdeps/unix/sysv/linux/powerpc/syscall_cancel.S
 create mode 100644 sysdeps/unix/sysv/linux/sh/syscall_cancel.S
 create mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/syscall_cancel.S
 rename sysdeps/unix/sysv/linux/{x86_64/libc-cancellation.S => sparc/sparc64/pause.c} (66%)
 create mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/syscall_cancel.S
 create mode 100644 sysdeps/unix/sysv/linux/syscall_cancel.c
 delete mode 100644 sysdeps/unix/sysv/linux/x86_64/cancellation.S
 delete mode 100644 sysdeps/unix/sysv/linux/x86_64/librt-cancellation.S

-- 
2.7.4

Comments

John Paul Adrian Glaubitz Dec. 11, 2017, 7:18 p.m. UTC | #1
Hi Adhemerval!

You should still have access to my SH porterbox and if you let me know what to test, I can also test on real m68k hardware.

Adrian

> On Dec 11, 2017, at 8:06 PM, Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote:

> 

> Another release, another submission for BZ#12683.  This time I finished

> support for all support archictures and did some testing on more ports

> which resulted in a lot of small fixes.

> 

> I have simplified a lot the work required to adjust a new port [1] on

> this new cancellable syscall mechanism.  A default implementation

> at sysdeps/unix/sysv/linux/syscall_cancel.c is provided and used on

> architectures (x86_64 and aarch64 for instance).  It should works

> as long the requires syscall markers (__syscall_cancel_arch_{start,end})

> as placed right before the cancellation flag test and after the

> syscall trap instruction respectively.

> 

> However some architecture still requires an assembly crafted 

> implementation (for instance if the syscall itself is done through a 

> kernel gate as for i686 or ia64 or if it requires a special gate due 

> ABI constraint like ARM).  In such case the syscall wrapper 

> should be place at sysdeps/unix/sysv/linux/<arch>/syscall_cancel.S 

> with following semantic:

> 

> ---

> long int __syscall_cancel_arch (volatile unsigned int *cancelhandling,

>  __syscall_arg_t nr, __syscall_arg_t arg1, __syscall_arg_t arg2, 

>  __syscall_arg_t arg3, __syscall_arg_t arg4, __syscall_arg_t arg5,

>  __syscall_arg_t arg6)

> {

>  if (*cancelhandling & CANCELED_BITMASK)

>    __syscall_do_cancel()

> 

>  INTERNAL_SYSCALL_DECL (err);

>  result = INTERNAL_SYSCALL_NCS (nr, err, 6, a1, a2, a3, a4, a5, a6);

>  if (INTERNAL_SYSCALL_ERROR_P (result, err))

>    return -INTERNAL_SYSCALL_ERRNO (result, err);

>  return result;

> }

> 

> * If the architectures requires a cancellation entrypoint for 7 argument

>  syscalls (as for MIPSo32) it will need to define SYSCALL_CANCEL7_ARG7

>  on sysdep.h.

> ---

> 

> The another architecture specific code is to obtain both the program

> counter and process signal mask in the signal handler.  To accomplish it

> each architecture implements a new function, ucontext_get_pc, on

> sigcontextinfo.h header as:

> 

> ---

> static inline uintptr_t

> ucontext_get_pc (const void *cxt)

> {

>  // TODO: return current program counter based on uc.  Usually 

>  // the CTX points to a ucontext_t, however it is architecture

>  // dependent (for instance sparc calls with sigcontext).

> }

> 

> * If the signal frame signal mask is not directly accessible through the

>  CTX pointer (either because the kernel invokes the handler with a different

>  object than ucontext_t, as SPARC; or due type mismatch between kernel and

>  glibc, as for IA64) the architecture might define UCONTEXT_SIGMASK to

>  get the uc_mask pointer.

> ---

> 

> I currently tested on x86_64-linux-gnu, x86_64-linux-gnu-x32, i686-linux-gnu,

> arm-linux-gnueabihf, aarch64-linux-gnu, sparcv9-linux-gnu, sparc64-linux-gnu,

> alpha-linux-gnu, and hppa-linux-gnu.  I also did some simple tests on

> ia64-linux-gnu and mips{64}-linux-gnu (to check for the correctness in the

> syscall wrapper implementation).  For the rest of support architectures

> I just did a cross build/check.

> 

> [1] https://sourceware.org/glibc/wiki/PortStatus

> 

> Adhemerval Zanella (19):

>  nptl: Fix testcases for new pthread cancellation mechanism

>  nptl: Fix Race conditions in pthread cancellation (BZ#12683)

>  nptl: x86_64: Fix Race conditions in pthread cancellation (BZ#12683)

>  nptl: x32: Fix Race conditions in pthread cancellation (BZ#12683)

>  nptl: i386: Fix Race conditions in pthread cancellation (BZ#12683)

>  nptl: powerpc: Fix Race conditions in pthread cancellation (BZ#12683)

>  nptl: aarch64: Fix Race conditions in pthread cancellation (BZ#12683)

>  nptl: arm: Fix Race conditions in pthread cancellation (BZ#12683)

>  nptl: s390: Fix Race conditions in pthread cancellation (BZ#12683)

>  nptl: ia64: Fix Race conditions in pthread cancellation (BZ#12683)

>  nptl: alpha: Fix Race conditions in pthread cancellation (BZ#12683)

>  nptl: m68k: Fix Race conditions in pthread cancellation (BZ#12683)

>  nptl: microblaze: Fix Race conditions in pthread cancellation

>    (BZ#12683)

>  nptl: tile: Fix Race conditions in pthread cancellation (BZ#12683)

>  nptl: sparc: Fix Race conditions in pthread cancellation (BZ#12683)

>  nptl: nios2: Fix Race conditions in pthread cancellation (BZ#12683)

>  nptl: sh: Fix Race conditions in pthread cancellation (BZ#12683)

>  nptl: mips: Fix Race conditions in pthread cancellation (BZ#12683)

>  nptl: hppa: Fix Race conditions in pthread cancellation (BZ#12683)

> 

> ChangeLog                                          | 199 +++++++++++++++++++++

> debug/tst-backtrace5.c                             |  26 +--

> include/libc-pointer-arith.h                       |  16 +-

> io/creat.c                                         |   3 -

> io/ppoll.c                                         |   2 -

> manual/llio.texi                                   |   4 +-

> misc/pselect.c                                     |   2 -

> nptl/Makefile                                      |  25 +--

> nptl/Versions                                      |   3 +

> nptl/cancellation.c                                | 101 -----------

> nptl/descr.h                                       |  15 +-

> nptl/libc-cancellation.c                           |  48 ++++-

> nptl/lll_timedlock_wait.c                          |   2 +-

> nptl/lll_timedwait_tid.c                           |   3 +-

> nptl/nptl-init.c                                   |  78 +++++---

> nptl/pthreadP.h                                    |  74 +++-----

> nptl/pthread_cancel.c                              |  68 ++-----

> nptl/pthread_create.c                              |   7 +-

> nptl/pthread_exit.c                                |   9 +-

> nptl/pthread_join.c                                |  10 +-

> nptl/pthread_timedjoin.c                           |   9 +-

> nptl/sem_wait.c                                    |   8 +-

> nptl/tst-cancel-wrappers.sh                        |  92 ----------

> nptl/tst-cancel2.c                                 |   3 -

> nptl/tst-cancel28.c                                |  94 ++++++++++

> nptl/tst-cancel3.c                                 |   3 -

> nptl/tst-cancel4.c                                 |   8 +

> rt/Makefile                                        |   1 -

> support/temp_file.c                                |  23 +++

> support/temp_file.h                                |   6 +

> sysdeps/generic/sigcontextinfo.h                   |  15 ++

> sysdeps/generic/sysdep-cancel.h                    |   3 -

> sysdeps/i386/nptl/tls.h                            |  11 --

> sysdeps/mips/nptl/tls.h                            |   2 +-

> sysdeps/nptl/Makefile                              |   3 +-

> sysdeps/nptl/aio_misc.h                            |  13 +-

> sysdeps/nptl/gai_misc.h                            |  13 +-

> sysdeps/nptl/lowlevellock.h                        |   5 +-

> sysdeps/posix/open64.c                             |  12 +-

> sysdeps/posix/pause.c                              |   2 -

> sysdeps/posix/sigpause.c                           |   3 -

> sysdeps/posix/sigwait.c                            |   9 +-

> sysdeps/posix/waitid.c                             |  11 +-

> sysdeps/sh/sysdep.h                                |   1 +

> sysdeps/sparc/sparc32/lowlevellock.c               |   3 +-

> sysdeps/unix/sysdep.h                              | 118 ++++++++++--

> sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h   |  11 ++

> sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h     |  13 ++

> sysdeps/unix/sysv/linux/arm/sigcontextinfo.h       |  12 ++

> sysdeps/unix/sysv/linux/arm/syscall_cancel.S       |  69 +++++++

> sysdeps/unix/sysv/linux/clock_nanosleep.c          |  20 +--

> sysdeps/unix/sysv/linux/creat.c                    |   2 -

> sysdeps/unix/sysv/linux/creat64.c                  |   2 -

> sysdeps/unix/sysv/linux/futex-internal.h           |  18 +-

> .../sysv/linux/hppa/sigcontextinfo.h}              |  26 ++-

> sysdeps/unix/sysv/linux/hppa/syscall_cancel.S      |  82 +++++++++

> sysdeps/unix/sysv/linux/i386/Makefile              |   2 +-

> sysdeps/unix/sysv/linux/i386/lowlevellock.h        |   2 +-

> sysdeps/unix/sysv/linux/i386/sigcontextinfo.h      |  13 ++

> sysdeps/unix/sysv/linux/i386/syscall_cancel.S      | 107 +++++++++++

> sysdeps/unix/sysv/linux/ia64/sigcontextinfo.h      |  24 +++

> sysdeps/unix/sysv/linux/ia64/syscall_cancel.S      |  94 ++++++++++

> sysdeps/unix/sysv/linux/lowlevellock-futex.h       |  34 +++-

> sysdeps/unix/sysv/linux/m68k/sigcontextinfo.h      |  13 ++

> .../unix/sysv/linux/microblaze/sigcontextinfo.h    |  13 ++

> .../unix/sysv/linux/microblaze/syscall_cancel.S    |  62 +++++++

> .../unix/sysv/linux/mips/mips32/syscall_cancel.S   | 128 +++++++++++++

> sysdeps/unix/sysv/linux/mips/mips32/sysdep.h       |   4 +

> sysdeps/unix/sysv/linux/mips/sigcontextinfo.h      |  13 +-

> sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h     |  16 ++

> sysdeps/unix/sysv/linux/powerpc/sigcontextinfo.h   |  16 ++

> sysdeps/unix/sysv/linux/powerpc/syscall.S          |  14 ++

> sysdeps/unix/sysv/linux/powerpc/syscall_cancel.S   |  64 +++++++

> sysdeps/unix/sysv/linux/pthread_kill.c             |   5 +-

> sysdeps/unix/sysv/linux/s390/sigcontextinfo.h      |  17 ++

> sysdeps/unix/sysv/linux/sh/sigcontextinfo.h        |  11 ++

> sysdeps/unix/sysv/linux/sh/syscall_cancel.S        | 125 +++++++++++++

> sysdeps/unix/sysv/linux/sigwait.c                  |   3 -

> sysdeps/unix/sysv/linux/sigwaitinfo.c              |   3 -

> sysdeps/unix/sysv/linux/socketcall.h               |  37 +++-

> sysdeps/unix/sysv/linux/sparc/lowlevellock.h       |   2 +-

> .../unix/sysv/linux/sparc/sparc32/sigcontextinfo.h |  52 ++++++

> .../unix/sysv/linux/sparc/sparc32/syscall_cancel.S |  74 ++++++++

> .../libc-cancellation.S => sparc/sparc64/pause.c}  |  14 +-

> .../unix/sysv/linux/sparc/sparc64/sigcontextinfo.h |  40 +++++

> .../unix/sysv/linux/sparc/sparc64/syscall_cancel.S |  74 ++++++++

> sysdeps/unix/sysv/linux/syscall_cancel.c           |  63 +++++++

> sysdeps/unix/sysv/linux/sysdep.h                   |  17 ++

> sysdeps/unix/sysv/linux/tile/sigcontextinfo.h |  12 ++

> sysdeps/unix/sysv/linux/x86_64/cancellation.S      | 115 ------------

> .../unix/sysv/linux/x86_64/librt-cancellation.S    |  21 ---

> sysdeps/unix/sysv/linux/x86_64/lowlevellock.h      |   8 +-

> sysdeps/unix/sysv/linux/x86_64/sigcontextinfo.h    |  11 ++

> sysdeps/unix/sysv/linux/x86_64/x32/sysdep.h        |  13 ++

> sysdeps/x86_64/nptl/tcb-offsets.sym                |   1 -

> sysdeps/x86_64/nptl/tls.h                          |  11 --

> 96 files changed, 2052 insertions(+), 717 deletions(-)

> delete mode 100644 nptl/cancellation.c

> delete mode 100644 nptl/tst-cancel-wrappers.sh

> create mode 100644 nptl/tst-cancel28.c

> create mode 100644 sysdeps/unix/sysv/linux/arm/syscall_cancel.S

> rename sysdeps/{nptl/librt-cancellation.c => unix/sysv/linux/hppa/sigcontextinfo.h} (55%)

> create mode 100644 sysdeps/unix/sysv/linux/hppa/syscall_cancel.S

> create mode 100644 sysdeps/unix/sysv/linux/i386/syscall_cancel.S

> create mode 100644 sysdeps/unix/sysv/linux/ia64/syscall_cancel.S

> create mode 100644 sysdeps/unix/sysv/linux/microblaze/syscall_cancel.S

> create mode 100644 sysdeps/unix/sysv/linux/mips/mips32/syscall_cancel.S

> create mode 100644 sysdeps/unix/sysv/linux/powerpc/syscall_cancel.S

> create mode 100644 sysdeps/unix/sysv/linux/sh/syscall_cancel.S

> create mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/syscall_cancel.S

> rename sysdeps/unix/sysv/linux/{x86_64/libc-cancellation.S => sparc/sparc64/pause.c} (66%)

> create mode 100644 sysdeps/unix/sysv/linux/sparc/sparc64/syscall_cancel.S

> create mode 100644 sysdeps/unix/sysv/linux/syscall_cancel.c

> delete mode 100644 sysdeps/unix/sysv/linux/x86_64/cancellation.S

> delete mode 100644 sysdeps/unix/sysv/linux/x86_64/librt-cancellation.S

> 

> -- 

> 2.7.4
Adhemerval Zanella Netto Dec. 11, 2017, 8:30 p.m. UTC | #2
On 11/12/2017 17:18, John Paul Adrian Glaubitz wrote:
> Hi Adhemerval!

> 

> You should still have access to my SH porterbox and if you let me know what to test, I can also test on real m68k hardware.

> 

> Adrian

> 


Indeed I am trying to get a full make check on SH porterbox, but installed
toolchain is failing on some tests link with "undefined reference to 
`__fpscr_values@GLIBC_2.2'" and I see to -Wl,-z,defs on linking comment
(it was indicating on sysdeps/unix/sysv/linux/sh/Makefile that it
is required to suppress it on SH4 to get link work correctly).

I have not really dig into, but I could get the testcase build by
manually add "-Wl,--ignore-unresolved-symbol,__fpscr_values@GLIBC_2.2",
but I do not think this is the correct solution.

And running some tst-cancel* directly I see no regression (still checking
on all tests in nptl).

And if you could check real m68k I will be grateful!