Re: [PATCH v1 1/8] tools/nolibc: add support for powerpc

From: Thomas Weißschuh
Date: Sun Jul 23 2023 - 03:32:48 EST


On 2023-07-19 05:10:48+0800, Zhangjin Wu wrote:
> Both syscall declarations and _start code definition are added for
> powerpc to nolibc.
>
> Like mips, powerpc uses a register (exactly, the summary overflow bit)
> to record the error occurred, and uses another register to return the
> value [1]. So, the return value of every syscall declaration must be
> normalized to easier the __sysret helper, return -value when there is an
> error, otheriwse, return value directly.
>
> Glibc and musl use different methods to check the summary overflow bit,
> glibc (sysdeps/unix/sysv/linux/powerpc/sysdep.h) saves the cr register
> to r0 at first, and then check the summary overflow bit in cr0:
>
> mfcr r0
> r0 & (1 << 28) ? -r3 : r3
>
> -->
>
> 10003c14: 7c 00 00 26 mfcr r0
> 10003c18: 74 09 10 00 andis. r9,r0,4096
> 10003c1c: 41 82 00 08 beq 0x10003c24
> 10003c20: 7c 63 00 d0 neg r3,r3
>
> Musl (arch/powerpc/syscall_arch.h) directly checks the summary overflow
> bit with the 'bns' instruction:
>
> /* no summary overflow bit means no error, return value directly */
> bns+ 1f
> /* otherwise, return negated value */
> neg r3, r3
> 1:
>
> -->
>
> 10000418: 40 a3 00 08 bns 0x10000420
> 1000041c: 7c 63 00 d0 neg r3,r3
>
> The later one is smaller, here applies it.
>
> arch/powerpc/include/asm/vdso/gettimeofday.h file uses the smaller
> method for do_syscall_2() too.
>
> [1]: https://man7.org/linux/man-pages/man2/syscall.2.html
>
> Signed-off-by: Zhangjin Wu <falcon@xxxxxxxxxxx>
> ---
> tools/include/nolibc/arch-powerpc.h | 156 ++++++++++++++++++++++++++++

This also should be added to nolibc/arch.h.

> 1 file changed, 156 insertions(+)
> create mode 100644 tools/include/nolibc/arch-powerpc.h
>
> diff --git a/tools/include/nolibc/arch-powerpc.h b/tools/include/nolibc/arch-powerpc.h
> new file mode 100644
> index 000000000000..100ec0f412dc
> --- /dev/null
> +++ b/tools/include/nolibc/arch-powerpc.h
> @@ -0,0 +1,156 @@
> +/* SPDX-License-Identifier: LGPL-2.1 OR MIT */
> +/*
> + * PowerPC specific definitions for NOLIBC
> + * Copyright (C) 2023 Zhangjin Wu <falcon@xxxxxxxxxxx>

If it is taken from musl, shouldn't there also be a musl copyright?

> [..]