[v6,04/13] ARC: Atomics and Locking primitives

Message ID 20200423014126.10417-5-vgupta@synopsys.com
State Superseded
Headers
Series glibc port to ARC processors |

Commit Message

Vineet Gupta April 23, 2020, 1:41 a.m. UTC
  Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
---
 sysdeps/arc/atomic-machine.h      | 69 +++++++++++++++++++++++++++++++
 sysdeps/arc/nptl/bits/semaphore.h | 32 ++++++++++++++
 2 files changed, 101 insertions(+)
 create mode 100644 sysdeps/arc/atomic-machine.h
 create mode 100644 sysdeps/arc/nptl/bits/semaphore.h
  

Comments

Adhemerval Zanella April 23, 2020, 5:20 p.m. UTC | #1
On 22/04/2020 22:41, Vineet Gupta via Libc-alpha wrote:
> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>

glibc uses copyright assignment to the FSF for contributions, and not
the DCO.

> ---
>  sysdeps/arc/atomic-machine.h      | 69 +++++++++++++++++++++++++++++++
>  sysdeps/arc/nptl/bits/semaphore.h | 32 ++++++++++++++
>  2 files changed, 101 insertions(+)
>  create mode 100644 sysdeps/arc/atomic-machine.h
>  create mode 100644 sysdeps/arc/nptl/bits/semaphore.h
> 

> diff --git a/sysdeps/arc/nptl/bits/semaphore.h b/sysdeps/arc/nptl/bits/semaphore.h
> new file mode 100644
> index 000000000000..772dc4cb9b01
> --- /dev/null
> +++ b/sysdeps/arc/nptl/bits/semaphore.h

This might a good candidate to a refactor to add a Linux default one,
thus avoiding any new architecture to copy/paste it.

> @@ -0,0 +1,32 @@
> +/* Machine-specific POSIX semaphore type layouts.  ARC version.
> +   Copyright (C) 2002-2020 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   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
> +   <https://www.gnu.org/licenses/>.  */
> +
> +#ifndef _SEMAPHORE_H
> +# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
> +#endif
> +
> +#define __SIZEOF_SEM_T	16
> +
> +/* Value returned if `sem_open' failed.  */
> +#define SEM_FAILED      ((sem_t *) 0)
> +
> +typedef union
> +{
> +  char __size[__SIZEOF_SEM_T];
> +  long int __align;
> +} sem_t;
>
  
Vineet Gupta April 24, 2020, 7:23 a.m. UTC | #2
On 4/23/20 10:20 AM, Adhemerval Zanella via Libc-alpha wrote:
> 
> 
> On 22/04/2020 22:41, Vineet Gupta via Libc-alpha wrote:
>> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
> 
> glibc uses copyright assignment to the FSF for contributions, and not
> the DCO.

Ok removed from all patches.

>> ---
>>  sysdeps/arc/atomic-machine.h      | 69 +++++++++++++++++++++++++++++++
>>  sysdeps/arc/nptl/bits/semaphore.h | 32 ++++++++++++++
>>  2 files changed, 101 insertions(+)
>>  create mode 100644 sysdeps/arc/atomic-machine.h
>>  create mode 100644 sysdeps/arc/nptl/bits/semaphore.h
>>
> 
>> diff --git a/sysdeps/arc/nptl/bits/semaphore.h b/sysdeps/arc/nptl/bits/semaphore.h
>> new file mode 100644
>> index 000000000000..772dc4cb9b01
>> --- /dev/null
>> +++ b/sysdeps/arc/nptl/bits/semaphore.h
> 
> This might a good candidate to a refactor to add a Linux default one,
> thus avoiding any new architecture to copy/paste it.

Sure.

(1). s390, sparc: __SIZEOF_SEM_T {16,32} if WORDSIZE == {32,64}
(2). arc, arm, csky, hppa, microblaze, nios2, sh:__SIZEOF_SEM_T 16 (32-bit arch)
(3). ia64: __SIZEOF_SEM_T 16 (64-bit only)
(4). aarch64, mips, riscv are bimodal too but use arch specific knobs to build for
32/64 bit.

Can we change 2, 3, 4, to use generic mechanism of (1) ? The constraints come
automatically given WORDSIZE will be function of arch + ABI (ILP32, LP64 etc)

Or else we can have (2) be the Linux default version and all others come from arch
sysdep.
  
Vineet Gupta May 4, 2020, 9:21 p.m. UTC | #3
On 4/27/20 2:59 PM, Vineet Gupta via Libc-alpha wrote:
> This consolidates the copy-pasted arch specific semaphore header into
> single version (based on s390) which suffices 32-bit and and 64-bit
> arch/ABI based on the canonical WORDSIZE.
> 
> For now I've left out arches which use alternate defines to choose for
> 32 vs 64-bit builds (aarch64, mips) which in theory can also use the same
> header.
> 
> Passes build-many for
>   aarch64-linux-gnu arm-linux-gnueabi arm-linux-gnueabihf
>   riscv64-linux-gnu-rv64imac-lp64 riscv64-linux-gnu-rv64imafdc-lp64
>   x86_64-linux-gnu microblaze-linux-gnu nios2-linux-gnu
> 
> Suggested-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
> ---
>  sysdeps/arm/nptl/bits/semaphore.h             | 34 ----------------
>  sysdeps/csky/nptl/bits/semaphore.h            | 35 ----------------
>  sysdeps/hppa/nptl/bits/semaphore.h            | 31 --------------
>  sysdeps/ia64/nptl/bits/semaphore.h            | 35 ----------------
>  sysdeps/microblaze/nptl/bits/semaphore.h      | 32 ---------------
>  sysdeps/nios2/nptl/bits/semaphore.h           | 32 ---------------
>  sysdeps/riscv/nptl/bits/semaphore.h           | 33 ---------------
>  sysdeps/sh/nptl/bits/semaphore.h              | 35 ----------------
>  sysdeps/sparc/nptl/bits/semaphore.h           | 40 -------------------
>  .../unix/sysv/linux/alpha/bits/semaphore.h    | 33 ---------------
>  .../nptl => unix/sysv/linux}/bits/semaphore.h |  0
>  .../unix/sysv/linux/powerpc/bits/semaphore.h  | 40 -------------------
>  sysdeps/x86/bits/semaphore.h                  | 40 -------------------

ping !
  
Adhemerval Zanella May 5, 2020, 7:05 p.m. UTC | #4
On 27/04/2020 18:59, Vineet Gupta wrote:
> This consolidates the copy-pasted arch specific semaphore header into
> single version (based on s390) which suffices 32-bit and and 64-bit
> arch/ABI based on the canonical WORDSIZE.
> 
> For now I've left out arches which use alternate defines to choose for
> 32 vs 64-bit builds (aarch64, mips) which in theory can also use the same
> header.
> 
> Passes build-many for
>   aarch64-linux-gnu arm-linux-gnueabi arm-linux-gnueabihf
>   riscv64-linux-gnu-rv64imac-lp64 riscv64-linux-gnu-rv64imafdc-lp64
>   x86_64-linux-gnu microblaze-linux-gnu nios2-linux-gnu
> 
> Suggested-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>

LGTM with a remark below.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>

> ---
>  sysdeps/arm/nptl/bits/semaphore.h             | 34 ----------------
>  sysdeps/csky/nptl/bits/semaphore.h            | 35 ----------------
>  sysdeps/hppa/nptl/bits/semaphore.h            | 31 --------------
>  sysdeps/ia64/nptl/bits/semaphore.h            | 35 ----------------
>  sysdeps/microblaze/nptl/bits/semaphore.h      | 32 ---------------
>  sysdeps/nios2/nptl/bits/semaphore.h           | 32 ---------------
>  sysdeps/riscv/nptl/bits/semaphore.h           | 33 ---------------
>  sysdeps/sh/nptl/bits/semaphore.h              | 35 ----------------
>  sysdeps/sparc/nptl/bits/semaphore.h           | 40 -------------------
>  .../unix/sysv/linux/alpha/bits/semaphore.h    | 33 ---------------
>  .../nptl => unix/sysv/linux}/bits/semaphore.h |  0
>  .../unix/sysv/linux/powerpc/bits/semaphore.h  | 40 -------------------
>  sysdeps/x86/bits/semaphore.h                  | 40 -------------------
>  13 files changed, 420 deletions(-)
>  delete mode 100644 sysdeps/arm/nptl/bits/semaphore.h
>  delete mode 100644 sysdeps/csky/nptl/bits/semaphore.h
>  delete mode 100644 sysdeps/hppa/nptl/bits/semaphore.h
>  delete mode 100644 sysdeps/ia64/nptl/bits/semaphore.h
>  delete mode 100644 sysdeps/microblaze/nptl/bits/semaphore.h
>  delete mode 100644 sysdeps/nios2/nptl/bits/semaphore.h
>  delete mode 100644 sysdeps/riscv/nptl/bits/semaphore.h
>  delete mode 100644 sysdeps/sh/nptl/bits/semaphore.h
>  delete mode 100644 sysdeps/sparc/nptl/bits/semaphore.h
>  delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/semaphore.h
>  rename sysdeps/{s390/nptl => unix/sysv/linux}/bits/semaphore.h (100%)
>  delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/semaphore.h
>  delete mode 100644 sysdeps/x86/bits/semaphore.h
> 
> diff --git a/sysdeps/arm/nptl/bits/semaphore.h b/sysdeps/arm/nptl/bits/semaphore.h
> deleted file mode 100644
> index c93179e64a2e..000000000000
> --- a/sysdeps/arm/nptl/bits/semaphore.h
> +++ /dev/null
> @@ -1,34 +0,0 @@
> -/* Copyright (C) 2002-2020 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -
> -   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
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#ifndef _SEMAPHORE_H
> -# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
> -#endif
> -
> -
> -#define __SIZEOF_SEM_T	16
> -
> -
> -/* Value returned if `sem_open' failed.  */
> -#define SEM_FAILED      ((sem_t *) 0)
> -
> -
> -typedef union
> -{
> -  char __size[__SIZEOF_SEM_T];
> -  long int __align;
> -} sem_t;

Ok.

> diff --git a/sysdeps/csky/nptl/bits/semaphore.h b/sysdeps/csky/nptl/bits/semaphore.h
> deleted file mode 100644
> index 69b37249f5e3..000000000000
> --- a/sysdeps/csky/nptl/bits/semaphore.h
> +++ /dev/null
> @@ -1,35 +0,0 @@
> -/* Machine-specific POSIX semaphore type layouts.  C-SKY version.
> -   Copyright (C) 2018-2020 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -
> -   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
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#ifndef _SEMAPHORE_H
> -# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
> -#endif
> -
> -
> -#define __SIZEOF_SEM_T	16
> -
> -
> -/* Value returned if `sem_open' failed.  */
> -#define SEM_FAILED	((sem_t *) 0)
> -
> -
> -typedef union
> -{
> -  char __size[__SIZEOF_SEM_T];
> -  long int __align;
> -} sem_t;

Ok.

> diff --git a/sysdeps/hppa/nptl/bits/semaphore.h b/sysdeps/hppa/nptl/bits/semaphore.h
> deleted file mode 100644
> index 3864e6e16ee2..000000000000
> --- a/sysdeps/hppa/nptl/bits/semaphore.h
> +++ /dev/null
> @@ -1,31 +0,0 @@
> -/* Copyright (C) 2002-2020 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -
> -   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
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#ifndef _SEMAPHORE_H
> -# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
> -#endif
> -
> -#define __SIZEOF_SEM_T	16
> -
> -/* Value returned if `sem_open' failed.  */
> -#define SEM_FAILED      ((sem_t *) 0)
> -
> -typedef union
> -{
> -  char __size[__SIZEOF_SEM_T];
> -  long int __align;
> -} sem_t;

Ok.

> diff --git a/sysdeps/ia64/nptl/bits/semaphore.h b/sysdeps/ia64/nptl/bits/semaphore.h
> deleted file mode 100644
> index 1c52ff27ceee..000000000000
> --- a/sysdeps/ia64/nptl/bits/semaphore.h
> +++ /dev/null
> @@ -1,35 +0,0 @@
> -/* Copyright (C) 2002-2020 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -   Contributed by Ulrich Drepper <drepper@redhat.com>, 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
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#ifndef _SEMAPHORE_H
> -# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
> -#endif
> -
> -
> -#define __SIZEOF_SEM_T	32
> -
> -
> -/* Value returned if `sem_open' failed.  */
> -#define SEM_FAILED      ((sem_t *) 0)
> -
> -
> -typedef union
> -{
> -  char __size[__SIZEOF_SEM_T];
> -  long int __align;
> -} sem_t;

Ok.

> diff --git a/sysdeps/microblaze/nptl/bits/semaphore.h b/sysdeps/microblaze/nptl/bits/semaphore.h
> deleted file mode 100644
> index d5107b55330c..000000000000
> --- a/sysdeps/microblaze/nptl/bits/semaphore.h
> +++ /dev/null
> @@ -1,32 +0,0 @@
> -/* Copyright (C) 2002-2020 Free Software Foundation, Inc.
> -
> -   This file is part of the GNU C Library.
> -
> -   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
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#ifndef _SEMAPHORE_H
> -# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
> -#endif
> -
> -#define __SIZEOF_SEM_T	16
> -
> -/* Value returned if `sem_open' failed.  */
> -#define SEM_FAILED	((sem_t *) 0)
> -
> -typedef union
> -{
> -  char __size[__SIZEOF_SEM_T];
> -  long int __align;
> -} sem_t;

Ok.

> diff --git a/sysdeps/nios2/nptl/bits/semaphore.h b/sysdeps/nios2/nptl/bits/semaphore.h
> deleted file mode 100644
> index 7fa2521587c8..000000000000
> --- a/sysdeps/nios2/nptl/bits/semaphore.h
> +++ /dev/null
> @@ -1,32 +0,0 @@
> -/* Machine-specific POSIX semaphore type layouts.  Nios II version.
> -   Copyright (C) 2002-2020 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -
> -   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
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#ifndef _SEMAPHORE_H
> -# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
> -#endif
> -
> -#define __SIZEOF_SEM_T	16
> -
> -/* Value returned if `sem_open' failed.  */
> -#define SEM_FAILED      ((sem_t *) 0)
> -
> -typedef union
> -{
> -  char __size[__SIZEOF_SEM_T];
> -  long int __align;
> -} sem_t;

Ok.

> diff --git a/sysdeps/riscv/nptl/bits/semaphore.h b/sysdeps/riscv/nptl/bits/semaphore.h
> deleted file mode 100644
> index 09cfdebd0d24..000000000000
> --- a/sysdeps/riscv/nptl/bits/semaphore.h
> +++ /dev/null
> @@ -1,33 +0,0 @@
> -/* Machine-specific POSIX semaphore type layouts.  RISC-V version.
> -   Copyright (C) 2002-2020 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -
> -   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
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#ifndef _SEMAPHORE_H
> -# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
> -#endif
> -
> -#define __SIZEOF_SEM_T	(4 * __SIZEOF_POINTER__)
> -
> -/* Value returned if `sem_open' failed.  */
> -#define SEM_FAILED      ((sem_t *) 0)
> -
> -
> -typedef union
> -{
> -  char __size[__SIZEOF_SEM_T];
> -  long int __align;
> -} sem_t;

Ok.

> diff --git a/sysdeps/sh/nptl/bits/semaphore.h b/sysdeps/sh/nptl/bits/semaphore.h
> deleted file mode 100644
> index e7f48eb32b8e..000000000000
> --- a/sysdeps/sh/nptl/bits/semaphore.h
> +++ /dev/null
> @@ -1,35 +0,0 @@
> -/* Copyright (C) 2002-2020 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -   Contributed by Ulrich Drepper <drepper@redhat.com>, 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
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#ifndef _SEMAPHORE_H
> -# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
> -#endif
> -
> -
> -#define __SIZEOF_SEM_T	16
> -
> -
> -/* Value returned if `sem_open' failed.  */
> -#define SEM_FAILED      ((sem_t *) 0)
> -
> -
> -typedef union
> -{
> -  char __size[__SIZEOF_SEM_T];
> -  long int __align;
> -} sem_t;

Ok.

> diff --git a/sysdeps/sparc/nptl/bits/semaphore.h b/sysdeps/sparc/nptl/bits/semaphore.h
> deleted file mode 100644
> index 020fd757d5ad..000000000000
> --- a/sysdeps/sparc/nptl/bits/semaphore.h
> +++ /dev/null
> @@ -1,40 +0,0 @@
> -/* Machine-specific POSIX semaphore type layouts.  SPARC version.
> -   Copyright (C) 2003-2020 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -   Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
> -
> -   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
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#ifndef _SEMAPHORE_H
> -# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
> -#endif
> -
> -#include <bits/wordsize.h>
> -
> -#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;

Ok.

> diff --git a/sysdeps/unix/sysv/linux/alpha/bits/semaphore.h b/sysdeps/unix/sysv/linux/alpha/bits/semaphore.h
> deleted file mode 100644
> index ffd8d4a350a7..000000000000
> --- a/sysdeps/unix/sysv/linux/alpha/bits/semaphore.h
> +++ /dev/null
> @@ -1,33 +0,0 @@
> -/* Machine-specific POSIX semaphore type layouts.  Alpha version.
> -   Copyright (C) 2003-2020 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -
> -   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
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#ifndef _SEMAPHORE_H
> -# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
> -#endif
> -
> -# define __SIZEOF_SEM_T	32
> -
> -/* Value returned if `sem_open' failed.  */
> -#define SEM_FAILED      ((sem_t *) 0)
> -
> -
> -typedef union
> -{
> -  char __size[__SIZEOF_SEM_T];
> -  long int __align;
> -} sem_t;

Ok.

> diff --git a/sysdeps/s390/nptl/bits/semaphore.h b/sysdeps/unix/sysv/linux/bits/semaphore.h
> similarity index 100%
> rename from sysdeps/s390/nptl/bits/semaphore.h
> rename to sysdeps/unix/sysv/linux/bits/semaphore.h

Ok, although I think we should handle as a new file: add a online description and
remove any 'Contributed by' line.

> diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/semaphore.h b/sysdeps/unix/sysv/linux/powerpc/bits/semaphore.h
> deleted file mode 100644
> index 717e6f82dad9..000000000000
> --- a/sysdeps/unix/sysv/linux/powerpc/bits/semaphore.h
> +++ /dev/null
> @@ -1,40 +0,0 @@
> -/* Machine-specific POSIX semaphore type layouts.  PowerPC version.
> -   Copyright (C) 2003-2020 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -   Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
> -
> -   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
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#ifndef _SEMAPHORE_H
> -# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
> -#endif
> -
> -#include <bits/wordsize.h>
> -
> -#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;.

Ok.

> diff --git a/sysdeps/x86/bits/semaphore.h b/sysdeps/x86/bits/semaphore.h
> deleted file mode 100644
> index 299de51fa82b..000000000000
> --- a/sysdeps/x86/bits/semaphore.h
> +++ /dev/null
> @@ -1,40 +0,0 @@
> -/* Copyright (C) 2002-2020 Free Software Foundation, Inc.
> -   This file is part of the GNU C Library.
> -   Contributed by Ulrich Drepper <drepper@redhat.com>, 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
> -   <https://www.gnu.org/licenses/>.  */
> -
> -#ifndef _SEMAPHORE_H
> -# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
> -#endif
> -
> -#include <bits/wordsize.h>
> -
> -#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;
> 

Ok.
  
Vineet Gupta May 5, 2020, 7:38 p.m. UTC | #5
On 5/5/20 12:05 PM, Adhemerval Zanella via Libc-alpha wrote:
> 
> 
> On 27/04/2020 18:59, Vineet Gupta wrote:
>> This consolidates the copy-pasted arch specific semaphore header into
>> single version (based on s390) which suffices 32-bit and and 64-bit
>> arch/ABI based on the canonical WORDSIZE.
>>
>> For now I've left out arches which use alternate defines to choose for
>> 32 vs 64-bit builds (aarch64, mips) which in theory can also use the same
>> header.
>>
>> Passes build-many for
>>   aarch64-linux-gnu arm-linux-gnueabi arm-linux-gnueabihf
>>   riscv64-linux-gnu-rv64imac-lp64 riscv64-linux-gnu-rv64imafdc-lp64
>>   x86_64-linux-gnu microblaze-linux-gnu nios2-linux-gnu
>>
>> Suggested-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
> 
> LGTM with a remark below.
> 
> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>

Thx, could you please also clarify the deal with not having to update
sysdep_headers in sysdeps/unix/sysv/linux/Makefile

...

>> diff --git a/sysdeps/s390/nptl/bits/semaphore.h b/sysdeps/unix/sysv/linux/bits/semaphore.h
>> similarity index 100%
>> rename from sysdeps/s390/nptl/bits/semaphore.h
>> rename to sysdeps/unix/sysv/linux/bits/semaphore.h
> 
> Ok, although I think we should handle as a new file: add a online description and
> remove any 'Contributed by' line.

Will do - and presume it is ok to push to master after that ?

Thx,
-Vineet
  
Adhemerval Zanella May 5, 2020, 9:02 p.m. UTC | #6
On 27/04/2020 19:13, Vineet Gupta via Libc-alpha wrote:
> On 4/27/20 2:59 PM, Vineet Gupta via Libc-alpha wrote:
>> This consolidates the copy-pasted arch specific semaphore header into
>> single version (based on s390) which suffices 32-bit and and 64-bit
>> arch/ABI based on the canonical WORDSIZE.
>>
>> For now I've left out arches which use alternate defines to choose for
>> 32 vs 64-bit builds (aarch64, mips) which in theory can also use the same
>> header.
>>
>> Passes build-many for
>>   aarch64-linux-gnu arm-linux-gnueabi arm-linux-gnueabihf
>>   riscv64-linux-gnu-rv64imac-lp64 riscv64-linux-gnu-rv64imafdc-lp64
>>   x86_64-linux-gnu microblaze-linux-gnu nios2-linux-gnu
>>
>> Suggested-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
>> ---
>>  sysdeps/arm/nptl/bits/semaphore.h             | 34 ----------------
>>  sysdeps/csky/nptl/bits/semaphore.h            | 35 ----------------
>>  sysdeps/hppa/nptl/bits/semaphore.h            | 31 --------------
>>  sysdeps/ia64/nptl/bits/semaphore.h            | 35 ----------------
>>  sysdeps/microblaze/nptl/bits/semaphore.h      | 32 ---------------
>>  sysdeps/nios2/nptl/bits/semaphore.h           | 32 ---------------
>>  sysdeps/riscv/nptl/bits/semaphore.h           | 33 ---------------
>>  sysdeps/sh/nptl/bits/semaphore.h              | 35 ----------------
>>  sysdeps/sparc/nptl/bits/semaphore.h           | 40 -------------------
>>  .../unix/sysv/linux/alpha/bits/semaphore.h    | 33 ---------------
>>  .../nptl => unix/sysv/linux}/bits/semaphore.h |  0
>>  .../unix/sysv/linux/powerpc/bits/semaphore.h  | 40 -------------------
>>  sysdeps/x86/bits/semaphore.h                  | 40 -------------------
>>  13 files changed, 420 deletions(-)
>>  delete mode 100644 sysdeps/arm/nptl/bits/semaphore.h
>>  delete mode 100644 sysdeps/csky/nptl/bits/semaphore.h
>>  delete mode 100644 sysdeps/hppa/nptl/bits/semaphore.h
>>  delete mode 100644 sysdeps/ia64/nptl/bits/semaphore.h
>>  delete mode 100644 sysdeps/microblaze/nptl/bits/semaphore.h
>>  delete mode 100644 sysdeps/nios2/nptl/bits/semaphore.h
>>  delete mode 100644 sysdeps/riscv/nptl/bits/semaphore.h
>>  delete mode 100644 sysdeps/sh/nptl/bits/semaphore.h
>>  delete mode 100644 sysdeps/sparc/nptl/bits/semaphore.h
>>  delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/semaphore.h
>>  rename sysdeps/{s390/nptl => unix/sysv/linux}/bits/semaphore.h (100%)
>>  delete mode 100644 sysdeps/unix/sysv/linux/powerpc/bits/semaphore.h
>>  delete mode 100644 sysdeps/x86/bits/semaphore.h
> 
> I just noticed that this also needs an entry in sysdep_headers in
> sysdeps/unix/sysv/linux/Makefile
> 
> but the build still works for such arches ?
> 

It is already covered by nptl/Makefile at:

 25 headers := pthread.h semaphore.h bits/semaphore.h \
  
Adhemerval Zanella May 5, 2020, 9:37 p.m. UTC | #7
On 05/05/2020 16:38, Vineet Gupta wrote:
> On 5/5/20 12:05 PM, Adhemerval Zanella via Libc-alpha wrote:
>>
>>
>> On 27/04/2020 18:59, Vineet Gupta wrote:
>>> This consolidates the copy-pasted arch specific semaphore header into
>>> single version (based on s390) which suffices 32-bit and and 64-bit
>>> arch/ABI based on the canonical WORDSIZE.
>>>
>>> For now I've left out arches which use alternate defines to choose for
>>> 32 vs 64-bit builds (aarch64, mips) which in theory can also use the same
>>> header.
>>>
>>> Passes build-many for
>>>   aarch64-linux-gnu arm-linux-gnueabi arm-linux-gnueabihf
>>>   riscv64-linux-gnu-rv64imac-lp64 riscv64-linux-gnu-rv64imafdc-lp64
>>>   x86_64-linux-gnu microblaze-linux-gnu nios2-linux-gnu
>>>
>>> Suggested-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
>>
>> LGTM with a remark below.
>>
>> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
> 
> Thx, could you please also clarify the deal with not having to update
> sysdep_headers in sysdeps/unix/sysv/linux/Makefile

Done in the original message.

> 
> ...
> 
>>> diff --git a/sysdeps/s390/nptl/bits/semaphore.h b/sysdeps/unix/sysv/linux/bits/semaphore.h
>>> similarity index 100%
>>> rename from sysdeps/s390/nptl/bits/semaphore.h
>>> rename to sysdeps/unix/sysv/linux/bits/semaphore.h
>>
>> Ok, although I think we should handle as a new file: add a online description and
>> remove any 'Contributed by' line.
> 
> Will do - and presume it is ok to push to master after that ?

Yes, thanks!
  
Vineet Gupta May 5, 2020, 10:59 p.m. UTC | #8
On 5/5/20 12:05 PM, Adhemerval Zanella via Libc-alpha wrote:
>> diff --git a/sysdeps/s390/nptl/bits/semaphore.h b/sysdeps/unix/sysv/linux/bits/semaphore.h
>> similarity index 100%
>> rename from sysdeps/s390/nptl/bits/semaphore.h
>> rename to sysdeps/unix/sysv/linux/bits/semaphore.h
>
> Ok, although I think we should handle as a new file: add a online description and
> remove any 'Contributed by' line.

Ok did explicit add/del but still git rename detection triggers, this time
matching it to x86 version (with 90% similarity). I'm pretty sure in the past
delete/add used to elide renames, perhaps the heuristics have gotten better. AFAIK
there is no gitconfig setting to disable the rename detection.

...
 sysdeps/{x86 => unix/sysv/linux}/bits/semaphore.h |  5 ++---
 sysdeps/unix/sysv/linux/powerpc/bits/semaphore.h  | 40
  
Adhemerval Zanella May 8, 2020, 1:32 p.m. UTC | #9
On 05/05/2020 19:59, Vineet Gupta wrote:
> On 5/5/20 12:05 PM, Adhemerval Zanella via Libc-alpha wrote:
>>> diff --git a/sysdeps/s390/nptl/bits/semaphore.h b/sysdeps/unix/sysv/linux/bits/semaphore.h
>>> similarity index 100%
>>> rename from sysdeps/s390/nptl/bits/semaphore.h
>>> rename to sysdeps/unix/sysv/linux/bits/semaphore.h
>>
>> Ok, although I think we should handle as a new file: add a online description and
>> remove any 'Contributed by' line.
> 
> Ok did explicit add/del but still git rename detection triggers, this time
> matching it to x86 version (with 90% similarity). I'm pretty sure in the past
> delete/add used to elide renames, perhaps the heuristics have gotten better. AFAIK
> there is no gitconfig setting to disable the rename detection.
> 
> ...
>  sysdeps/{x86 => unix/sysv/linux}/bits/semaphore.h |  5 ++---
>  sysdeps/unix/sysv/linux/powerpc/bits/semaphore.h  | 40
> 

I use both -C (detect copies as well as renames) and -M (detect renames)
with git format-patch and send-email to try avoid such issues. Sometimes
it is required to change the -M threshold to get the rename right.
  

Patch

diff --git a/sysdeps/arc/atomic-machine.h b/sysdeps/arc/atomic-machine.h
new file mode 100644
index 000000000000..6cf128dc7fa8
--- /dev/null
+++ b/sysdeps/arc/atomic-machine.h
@@ -0,0 +1,69 @@ 
+/* Low-level functions for atomic operations. ARC version.
+   Copyright (C) 2012-2020 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef _ARC_BITS_ATOMIC_H
+#define _ARC_BITS_ATOMIC_H 1
+
+#include <stdint.h>
+
+typedef int32_t atomic32_t;
+typedef uint32_t uatomic32_t;
+typedef int_fast32_t atomic_fast32_t;
+typedef uint_fast32_t uatomic_fast32_t;
+
+typedef intptr_t atomicptr_t;
+typedef uintptr_t uatomicptr_t;
+typedef intmax_t atomic_max_t;
+typedef uintmax_t uatomic_max_t;
+
+#define __HAVE_64B_ATOMICS 0
+#define USE_ATOMIC_COMPILER_BUILTINS 1
+
+/* ARC does have legacy atomic EX reg, [mem] instruction but the micro-arch
+   is not as optimal as LLOCK/SCOND specially for SMP.  */
+#define ATOMIC_EXCHANGE_USES_CAS 1
+
+#define __arch_compare_and_exchange_bool_8_acq(mem, newval, oldval)	\
+  (abort (), 0)
+#define __arch_compare_and_exchange_bool_16_acq(mem, newval, oldval)	\
+  (abort (), 0)
+#define __arch_compare_and_exchange_bool_64_acq(mem, newval, oldval)	\
+  (abort (), 0)
+
+#define __arch_compare_and_exchange_val_8_int(mem, newval, oldval, model)	\
+  (abort (), (__typeof (*mem)) 0)
+#define __arch_compare_and_exchange_val_16_int(mem, newval, oldval, model)	\
+  (abort (), (__typeof (*mem)) 0)
+#define __arch_compare_and_exchange_val_64_int(mem, newval, oldval, model)	\
+  (abort (), (__typeof (*mem)) 0)
+
+#define __arch_compare_and_exchange_val_32_int(mem, newval, oldval, model)	\
+  ({										\
+    typeof (*mem) __oldval = (oldval);                                  	\
+    __atomic_compare_exchange_n (mem, (void *) &__oldval, newval, 0,    	\
+                                 model, __ATOMIC_RELAXED);              	\
+    __oldval;                                                           	\
+  })
+
+#define atomic_compare_and_exchange_val_acq(mem, new, old)		\
+  __atomic_val_bysize (__arch_compare_and_exchange_val, int,		\
+		       mem, new, old, __ATOMIC_ACQUIRE)
+
+#define atomic_full_barrier()  ({ asm volatile ("dmb 3":::"memory"); })
+
+#endif /* _ARC_BITS_ATOMIC_H */
diff --git a/sysdeps/arc/nptl/bits/semaphore.h b/sysdeps/arc/nptl/bits/semaphore.h
new file mode 100644
index 000000000000..772dc4cb9b01
--- /dev/null
+++ b/sysdeps/arc/nptl/bits/semaphore.h
@@ -0,0 +1,32 @@ 
+/* Machine-specific POSIX semaphore type layouts.  ARC version.
+   Copyright (C) 2002-2020 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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
+   <https://www.gnu.org/licenses/>.  */
+
+#ifndef _SEMAPHORE_H
+# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
+#endif
+
+#define __SIZEOF_SEM_T	16
+
+/* Value returned if `sem_open' failed.  */
+#define SEM_FAILED      ((sem_t *) 0)
+
+typedef union
+{
+  char __size[__SIZEOF_SEM_T];
+  long int __align;
+} sem_t;