[v3,00/13] GLIBC LoongArch PATCHES

Message ID 20220509022611.1248063-1-caiyinyu@loongson.cn
Headers
Series GLIBC LoongArch PATCHES |

Message

caiyinyu May 9, 2022, 2:25 a.m. UTC
  Hello, these are LoongArch patches v4, and we really need your futher suggestions:

HISTORY:
LoongArch patches v1: https://sourceware.org/pipermail/libc-alpha/2021-August/130262.html
LoongArch patches v2: https://sourceware.org/pipermail/libc-alpha/2021-December/134811.html
LoongArch patches v3: https://sourceware.org/pipermail/libc-alpha/2022-April/137888.html

LoongArch-Doc:  https://github.com/loongson/LoongArch-Documentation

We add new section: procedure calling convention.
https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html#_procedure_calling_convention

Source code:
linux:		https://github.com/loongson/linux/tree/loongarch-next
glibc:		https://github.com/loongson/glibc/tree/loongarch_2_36_upstream_v4

GCC and Binutils Loongarch parts have been into GNU Open Source community.
Loongarch kernal may be no problem on 5.19:
https://lore.kernel.org/linux-arch/20220319142759.1026237-1-chenhuacai@loongson.cn/T/#m9d06c1882053c313ced32eaddda61e2514c712e8
---------------------------------------------------------------------------
* Re: [PATCH V8 00/22] arch: Add basic LoongArch support
  2022-03-21 21:55     ` Arnd Bergmann
@ 2022-03-21 22:03       ` Linus Torvalds
  0 siblings, 0 replies; 46+ messages in thread
From: Linus Torvalds @ 2022-03-21 22:03 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Huacai Chen, Andy Lutomirski, Thomas Gleixner, Peter Zijlstra,
	Andrew Morton, David Airlie, Jonathan Corbet, linux-arch,
	open list:DOCUMENTATION, Linux Kernel Mailing List, Xuefeng Li,
	Yanteng Si, Huacai Chen, Jiaxun Yang, Huacai Chen

On Mon, Mar 21, 2022 at 2:55 PM Arnd Bergmann <arnd@arndb.de> wrote:
>
> I can prepare a pull request when it gets to that, but I think the boot protocol
> should be fixed first, and that makes it 5.19 material.

Thanks. No problem on 5.19, it's not like I don't have enough pending
for this merge window already..

                 Linus
---------------------------------------------------------------------------

test result: all passed.

XPASS: conform/UNIX98/ndbm.h/linknamespace
XPASS: conform/XOPEN2K/ndbm.h/linknamespace
XPASS: conform/XOPEN2K8/ndbm.h/linknamespace
XPASS: conform/XPG42/ndbm.h/linknamespace
UNSUPPORTED: crypt/cert
UNSUPPORTED: elf/tst-env-setuid
UNSUPPORTED: elf/tst-env-setuid-tunables
XPASS: elf/tst-protected1a
XPASS: elf/tst-protected1b
UNSUPPORTED: elf/tst-valgrind-smoke
UNSUPPORTED: misc/tst-adjtimex
UNSUPPORTED: misc/tst-clock_adjtime
UNSUPPORTED: misc/tst-ntp_adjtime
UNSUPPORTED: misc/tst-pkey
UNSUPPORTED: misc/tst-rseq
UNSUPPORTED: misc/tst-rseq-disable
UNSUPPORTED: nptl/test-cond-printers
UNSUPPORTED: nptl/test-condattr-printers
UNSUPPORTED: nptl/test-mutex-printers
UNSUPPORTED: nptl/test-mutexattr-printers
UNSUPPORTED: nptl/test-rwlock-printers
UNSUPPORTED: nptl/test-rwlockattr-printers
UNSUPPORTED: nptl/tst-rseq-nptl
UNSUPPORTED: stdlib/tst-secure-getenv
UNSUPPORTED: time/tst-clock_settime
UNSUPPORTED: time/tst-settimeofday
Summary of test results:
   4556 PASS
     20 UNSUPPORTED
     12 XFAIL
      6 XPASS

caiyinyu (13):
  LoongArch: Update NEWS and README for the LoongArch port.
  LoongArch: Add LoongArch entries to config.h.in
  LoongArch: Add relocations and ELF flags to elf.h and
    scripts/glibcelf.py
  LoongArch: ABI Implementation
  LoongArch: Thread-Local Storage Support
  LoongArch: Generic <math.h> and soft-fp Routines
  LoongArch: Atomic and Locking Routines
  LoongArch: Linux Syscall Interface
  LoongArch: Linux ABI
  LoongArch: Add ABI Lists
  LoongArch: Build Infastructure
  LoongArch: Hard Float Support
  LoongArch: Update build-many-glibcs.py for the LoongArch Port.

 NEWS                                          |    9 +
 README                                        |    1 +
 config.h.in                                   |    6 +
 elf/elf.h                                     |   68 +-
 manual/math.texi                              |    2 +-
 scripts/build-many-glibcs.py                  |    5 +
 scripts/glibcelf.py                           |    3 +-
 sysdeps/loongarch/Implies                     |    3 +
 sysdeps/loongarch/Makefile                    |   15 +
 sysdeps/loongarch/__longjmp.S                 |   52 +
 sysdeps/loongarch/abort-instr.h               |    2 +
 sysdeps/loongarch/bits/endianness.h           |   11 +
 sysdeps/loongarch/bits/fenv.h                 |   90 +
 sysdeps/loongarch/bits/link.h                 |   58 +
 sysdeps/loongarch/bits/setjmp.h               |   42 +
 sysdeps/loongarch/bsd-_setjmp.c               |    1 +
 sysdeps/loongarch/bsd-setjmp.c                |    1 +
 sysdeps/loongarch/configure                   |    5 +
 sysdeps/loongarch/configure.ac                |    6 +
 sysdeps/loongarch/dl-irel.h                   |   48 +
 sysdeps/loongarch/dl-machine.h                |  362 +++
 sysdeps/loongarch/dl-tls.h                    |   46 +
 sysdeps/loongarch/dl-trampoline.S             |   91 +
 sysdeps/loongarch/e_sqrtl.c                   |   38 +
 sysdeps/loongarch/fpu/fclrexcpt.c             |   46 +
 sysdeps/loongarch/fpu/fedisblxcpt.c           |   39 +
 sysdeps/loongarch/fpu/feenablxcpt.c           |   39 +
 sysdeps/loongarch/fpu/fegetenv.c              |   31 +
 sysdeps/loongarch/fpu/fegetexcept.c           |   32 +
 sysdeps/loongarch/fpu/fegetmode.c             |   27 +
 sysdeps/loongarch/fpu/fegetround.c            |   33 +
 sysdeps/loongarch/fpu/feholdexcpt.c           |   40 +
 sysdeps/loongarch/fpu/fenv_libc.h             |   30 +
 sysdeps/loongarch/fpu/fesetenv.c              |   42 +
 sysdeps/loongarch/fpu/fesetexcept.c           |   32 +
 sysdeps/loongarch/fpu/fesetmode.c             |   38 +
 sysdeps/loongarch/fpu/fesetround.c            |   44 +
 sysdeps/loongarch/fpu/feupdateenv.c           |   43 +
 sysdeps/loongarch/fpu/fgetexcptflg.c          |   38 +
 sysdeps/loongarch/fpu/fraiseexcpt.c           |   75 +
 sysdeps/loongarch/fpu/fsetexcptflg.c          |   41 +
 sysdeps/loongarch/fpu/ftestexcept.c           |   32 +
 .../loongarch/fpu/math-use-builtins-sqrt.h    |    4 +
 sysdeps/loongarch/fpu_control.h               |  102 +
 sysdeps/loongarch/hp-timing.h                 |   42 +
 sysdeps/loongarch/jmpbuf-offsets.h            |   22 +
 sysdeps/loongarch/jmpbuf-unwind.h             |   45 +
 sysdeps/loongarch/ldsodefs.h                  |   41 +
 sysdeps/loongarch/libc-tls.c                  |   32 +
 sysdeps/loongarch/linkmap.h                   |   22 +
 sysdeps/loongarch/lp64/Implies-after          |    1 +
 sysdeps/loongarch/lp64/libm-test-ulps         | 1412 +++++++++++
 sysdeps/loongarch/lp64/libm-test-ulps-name    |    1 +
 sysdeps/loongarch/machine-gmon.h              |   37 +
 sysdeps/loongarch/math_private.h              |  248 ++
 sysdeps/loongarch/nptl/Makefile               |   21 +
 sysdeps/loongarch/nptl/pthreaddef.h           |   32 +
 sysdeps/loongarch/nptl/tcb-offsets.sym        |    6 +
 sysdeps/loongarch/nptl/tls.h                  |  138 ++
 sysdeps/loongarch/preconfigure                |   47 +
 sysdeps/loongarch/setjmp.S                    |   66 +
 sysdeps/loongarch/sfp-machine.h               |  102 +
 sysdeps/loongarch/sotruss-lib.c               |   50 +
 sysdeps/loongarch/stackinfo.h                 |   33 +
 sysdeps/loongarch/start.S                     |   67 +
 sysdeps/loongarch/sys/asm.h                   |   59 +
 sysdeps/loongarch/sys/regdef.h                |   93 +
 sysdeps/loongarch/tininess.h                  |    1 +
 sysdeps/loongarch/tst-audit.h                 |   23 +
 sysdeps/unix/sysv/linux/loongarch/Implies     |    1 +
 sysdeps/unix/sysv/linux/loongarch/Makefile    |    4 +
 .../unix/sysv/linux/loongarch/arch-syscall.h  |  303 +++
 .../sysv/linux/loongarch/atomic-machine.h     |  181 ++
 .../unix/sysv/linux/loongarch/bits/fcntl.h    |   61 +
 .../unix/sysv/linux/loongarch/bits/procfs.h   |   52 +
 .../linux/loongarch/bits/pthread_stack_min.h  |   20 +
 .../unix/sysv/linux/loongarch/bits/sigstack.h |   32 +
 sysdeps/unix/sysv/linux/loongarch/clone.S     |   96 +
 sysdeps/unix/sysv/linux/loongarch/clone3.S    |   83 +
 sysdeps/unix/sysv/linux/loongarch/configure   |  174 ++
 .../unix/sysv/linux/loongarch/configure.ac    |   22 +
 .../unix/sysv/linux/loongarch/getcontext.S    |   59 +
 sysdeps/unix/sysv/linux/loongarch/ldconfig.h  |   26 +
 .../unix/sysv/linux/loongarch/ldd-rewrite.sed |    3 +
 .../unix/sysv/linux/loongarch/localplt.data   |   12 +
 .../unix/sysv/linux/loongarch/lp64/Implies    |    3 +
 .../sysv/linux/loongarch/lp64/c++-types.data  |   67 +
 .../unix/sysv/linux/loongarch/lp64/ld.abilist |    8 +
 .../loongarch/lp64/libBrokenLocale.abilist    |    1 +
 .../sysv/linux/loongarch/lp64/libc.abilist    | 2139 +++++++++++++++++
 .../loongarch/lp64/libc_malloc_debug.abilist  |   26 +
 .../linux/loongarch/lp64/libcrypt.abilist     |    2 +
 .../sysv/linux/loongarch/lp64/libm.abilist    | 1031 ++++++++
 .../linux/loongarch/lp64/libpthread.abilist   |    0
 .../linux/loongarch/lp64/libresolv.abilist    |   55 +
 .../sysv/linux/loongarch/lp64/librt.abilist   |    0
 .../linux/loongarch/lp64/libthread_db.abilist |   40 +
 .../unix/sysv/linux/loongarch/makecontext.c   |   79 +
 .../unix/sysv/linux/loongarch/setcontext.S    |  100 +
 .../unix/sysv/linux/loongarch/shlib-versions  |    7 +
 .../sysv/linux/loongarch/sigcontextinfo.h     |   32 +
 .../unix/sysv/linux/loongarch/swapcontext.S   |   95 +
 .../unix/sysv/linux/loongarch/sys/ucontext.h  |   61 +
 sysdeps/unix/sysv/linux/loongarch/sys/user.h  |   42 +
 sysdeps/unix/sysv/linux/loongarch/sysdep.S    |   53 +
 sysdeps/unix/sysv/linux/loongarch/sysdep.h    |  321 +++
 .../sysv/linux/loongarch/ucontext-macros.h    |   32 +
 .../unix/sysv/linux/loongarch/ucontext_i.sym  |   31 +
 sysdeps/unix/sysv/linux/loongarch/vfork.S     |   50 +
 109 files changed, 9815 insertions(+), 3 deletions(-)
 create mode 100644 sysdeps/loongarch/Implies
 create mode 100644 sysdeps/loongarch/Makefile
 create mode 100644 sysdeps/loongarch/__longjmp.S
 create mode 100644 sysdeps/loongarch/abort-instr.h
 create mode 100644 sysdeps/loongarch/bits/endianness.h
 create mode 100644 sysdeps/loongarch/bits/fenv.h
 create mode 100644 sysdeps/loongarch/bits/link.h
 create mode 100644 sysdeps/loongarch/bits/setjmp.h
 create mode 100644 sysdeps/loongarch/bsd-_setjmp.c
 create mode 100644 sysdeps/loongarch/bsd-setjmp.c
 create mode 100644 sysdeps/loongarch/configure
 create mode 100644 sysdeps/loongarch/configure.ac
 create mode 100644 sysdeps/loongarch/dl-irel.h
 create mode 100644 sysdeps/loongarch/dl-machine.h
 create mode 100644 sysdeps/loongarch/dl-tls.h
 create mode 100644 sysdeps/loongarch/dl-trampoline.S
 create mode 100644 sysdeps/loongarch/e_sqrtl.c
 create mode 100644 sysdeps/loongarch/fpu/fclrexcpt.c
 create mode 100644 sysdeps/loongarch/fpu/fedisblxcpt.c
 create mode 100644 sysdeps/loongarch/fpu/feenablxcpt.c
 create mode 100644 sysdeps/loongarch/fpu/fegetenv.c
 create mode 100644 sysdeps/loongarch/fpu/fegetexcept.c
 create mode 100644 sysdeps/loongarch/fpu/fegetmode.c
 create mode 100644 sysdeps/loongarch/fpu/fegetround.c
 create mode 100644 sysdeps/loongarch/fpu/feholdexcpt.c
 create mode 100644 sysdeps/loongarch/fpu/fenv_libc.h
 create mode 100644 sysdeps/loongarch/fpu/fesetenv.c
 create mode 100644 sysdeps/loongarch/fpu/fesetexcept.c
 create mode 100644 sysdeps/loongarch/fpu/fesetmode.c
 create mode 100644 sysdeps/loongarch/fpu/fesetround.c
 create mode 100644 sysdeps/loongarch/fpu/feupdateenv.c
 create mode 100644 sysdeps/loongarch/fpu/fgetexcptflg.c
 create mode 100644 sysdeps/loongarch/fpu/fraiseexcpt.c
 create mode 100644 sysdeps/loongarch/fpu/fsetexcptflg.c
 create mode 100644 sysdeps/loongarch/fpu/ftestexcept.c
 create mode 100644 sysdeps/loongarch/fpu/math-use-builtins-sqrt.h
 create mode 100644 sysdeps/loongarch/fpu_control.h
 create mode 100644 sysdeps/loongarch/hp-timing.h
 create mode 100644 sysdeps/loongarch/jmpbuf-offsets.h
 create mode 100644 sysdeps/loongarch/jmpbuf-unwind.h
 create mode 100644 sysdeps/loongarch/ldsodefs.h
 create mode 100644 sysdeps/loongarch/libc-tls.c
 create mode 100644 sysdeps/loongarch/linkmap.h
 create mode 100644 sysdeps/loongarch/lp64/Implies-after
 create mode 100644 sysdeps/loongarch/lp64/libm-test-ulps
 create mode 100644 sysdeps/loongarch/lp64/libm-test-ulps-name
 create mode 100644 sysdeps/loongarch/machine-gmon.h
 create mode 100644 sysdeps/loongarch/math_private.h
 create mode 100644 sysdeps/loongarch/nptl/Makefile
 create mode 100644 sysdeps/loongarch/nptl/pthreaddef.h
 create mode 100644 sysdeps/loongarch/nptl/tcb-offsets.sym
 create mode 100644 sysdeps/loongarch/nptl/tls.h
 create mode 100644 sysdeps/loongarch/preconfigure
 create mode 100644 sysdeps/loongarch/setjmp.S
 create mode 100644 sysdeps/loongarch/sfp-machine.h
 create mode 100644 sysdeps/loongarch/sotruss-lib.c
 create mode 100644 sysdeps/loongarch/stackinfo.h
 create mode 100644 sysdeps/loongarch/start.S
 create mode 100644 sysdeps/loongarch/sys/asm.h
 create mode 100644 sysdeps/loongarch/sys/regdef.h
 create mode 100644 sysdeps/loongarch/tininess.h
 create mode 100644 sysdeps/loongarch/tst-audit.h
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/Implies
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/Makefile
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/arch-syscall.h
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/atomic-machine.h
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/bits/fcntl.h
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/bits/procfs.h
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/bits/pthread_stack_min.h
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/bits/sigstack.h
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/clone.S
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/clone3.S
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/configure
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/configure.ac
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/getcontext.S
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/ldconfig.h
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/ldd-rewrite.sed
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/localplt.data
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/Implies
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/c++-types.data
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/ld.abilist
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libBrokenLocale.abilist
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libc.abilist
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libc_malloc_debug.abilist
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libcrypt.abilist
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libm.abilist
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libpthread.abilist
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libresolv.abilist
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/librt.abilist
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/lp64/libthread_db.abilist
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/makecontext.c
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/setcontext.S
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/shlib-versions
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/sigcontextinfo.h
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/swapcontext.S
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/sys/ucontext.h
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/sys/user.h
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/sysdep.S
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/sysdep.h
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/ucontext-macros.h
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/ucontext_i.sym
 create mode 100644 sysdeps/unix/sysv/linux/loongarch/vfork.S
  

Comments

Florian Weimer May 10, 2022, 7:37 p.m. UTC | #1
> GCC and Binutils Loongarch parts have been into GNU Open Source community.
> Loongarch kernal may be no problem on 5.19:

It seems that the Linux 5.19 release date could be really close to the
glibc 2.36 release date, or even after it.  I think we wouldn't want to
release with an ABI whose kernel interface is not in a mainline kernel
yet.

We have the option to backdate ABIs, so we could release the port with a
GLIBC_2.36 ABI baseline in glibc 2.37.

Or we could merge the port now, and back it out once more if Linux 5.19
does not get released in time.

Maybe it's sufficient if the Linux port makes it to mainline during the
5.19 rc phase?

Thoughts?

Thanks,
Florian
  
Joseph Myers May 10, 2022, 8:33 p.m. UTC | #2
On Tue, 10 May 2022, Florian Weimer via Libc-alpha wrote:

> Maybe it's sufficient if the Linux port makes it to mainline during the
> 5.19 rc phase?

I think having the port in Linus's tree, but not yet in a release, ought 
to be sufficient.
  
Arnd Bergmann May 11, 2022, 6:57 a.m. UTC | #3
On Tue, May 10, 2022 at 9:37 PM Florian Weimer via Libc-alpha
<libc-alpha@sourceware.org> wrote:
>
> > GCC and Binutils Loongarch parts have been into GNU Open Source community.
> > Loongarch kernal may be no problem on 5.19:
>
> It seems that the Linux 5.19 release date could be really close to the
> glibc 2.36 release date, or even after it.  I think we wouldn't want to
> release with an ABI whose kernel interface is not in a mainline kernel
> yet.
>
> We have the option to backdate ABIs, so we could release the port with a
> GLIBC_2.36 ABI baseline in glibc 2.37.
>
> Or we could merge the port now, and back it out once more if Linux 5.19
> does not get released in time.
>
> Maybe it's sufficient if the Linux port makes it to mainline during the
> 5.19 rc phase?
>
> Thoughts?

From the kernel side, there is only one open question on the ABI:
either this will include both clone() and clone3(), or just clone3().

This is a surprisingly hard decision. Normally the policy in the kernel
is that new architectures only get the latest syscall interface, dropping
earlier syscalls in favor of backward-compatible new interfaces.

For clone3(), this may not work out because
- clone3 requires knowing the stack frame size for the child, but
  when emulating clone() in libc, that information may not be there.
  We need to work around this by allowing clone3 to be called without
  a size argument
- some other architectures still don't implement clone3() since we
  are missing the assembly bits for it. So unlike the other recently
  added calls, there is no minimum kernel version that guarantees clone3
  to be available.
- the seccomp/bfp infrastructure in the kernel cannot currently
  introspect indirect syscall arguments. This has to be added at
  some point anyway, but until then the chrome sandbox disallows
  the clone3 syscall.

The easy way out of course is to include both in the kernel, though
this feels like taking a step backwards. If libc developers feel strongly
either way, please also reply on the kernel thread so we can come
to a consensus more quickly.

There is still another open discussion that blocks merging the
loongarch kernel port, but that is only for the bootloader and not
visible to libc. We should merge it as soon as we have concluded
both points, but it's unclear if that happens before the merge
window.

      Arnd
  
Adhemerval Zanella Netto May 11, 2022, 1:17 p.m. UTC | #4
On 11/05/2022 03:57, Arnd Bergmann wrote:
> On Tue, May 10, 2022 at 9:37 PM Florian Weimer via Libc-alpha
> <libc-alpha@sourceware.org> wrote:
>>
>>> GCC and Binutils Loongarch parts have been into GNU Open Source community.
>>> Loongarch kernal may be no problem on 5.19:
>>
>> It seems that the Linux 5.19 release date could be really close to the
>> glibc 2.36 release date, or even after it.  I think we wouldn't want to
>> release with an ABI whose kernel interface is not in a mainline kernel
>> yet.
>>
>> We have the option to backdate ABIs, so we could release the port with a
>> GLIBC_2.36 ABI baseline in glibc 2.37.
>>
>> Or we could merge the port now, and back it out once more if Linux 5.19
>> does not get released in time.
>>
>> Maybe it's sufficient if the Linux port makes it to mainline during the
>> 5.19 rc phase?
>>
>> Thoughts?
> 
> From the kernel side, there is only one open question on the ABI:
> either this will include both clone() and clone3(), or just clone3().
> 
> This is a surprisingly hard decision. Normally the policy in the kernel
> is that new architectures only get the latest syscall interface, dropping
> earlier syscalls in favor of backward-compatible new interfaces.
> 
> For clone3(), this may not work out because
> - clone3 requires knowing the stack frame size for the child, but
>   when emulating clone() in libc, that information may not be there.
>   We need to work around this by allowing clone3 to be called without
>   a size argument

The clone is used internally without a stack only for fork
(sysdeps/unix/sysv/linux/arch-fork.h) and loongarch seems to be using
__ASSUME_CLONE_DEFAULT and exporting __NR_clone as a distinct syscall
(220).

> - some other architectures still don't implement clone3() since we
>   are missing the assembly bits for it. So unlike the other recently
>   added calls, there is no minimum kernel version that guarantees clone3
>   to be available.

If I understood correctly, Intel has added clone3 support on glibc mainly
to implement full CET (since it required stack size).  As far as I know
there is no pressing requirement to use clone3 internally, neither to
export as we did for clone; besides to support an new ABI that only 
defines clone3.

> - the seccomp/bfp infrastructure in the kernel cannot currently
>   introspect indirect syscall arguments. This has to be added at
>   some point anyway, but until then the chrome sandbox disallows
>   the clone3 syscall.
> 
> The easy way out of course is to include both in the kernel, though
> this feels like taking a step backwards. If libc developers feel strongly
> either way, please also reply on the kernel thread so we can come
> to a consensus more quickly.

I think if kernel allows fork like call for clone3, where if no starting
function is set there is no need for stack or stack size; we can adapt
internally fork to use __clone_internal (which first try to use clone3
and then fallbacks to clone).

Even for x86_64 and i686, clone3 is not used for fork (only for
pthread_create and posix_spawn).

> 
> There is still another open discussion that blocks merging the
> loongarch kernel port, but that is only for the bootloader and not
> visible to libc. We should merge it as soon as we have concluded
> both points, but it's unclear if that happens before the merge
> window.
> 
>       Arnd