[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <64a95595-9716-4276-a747-0c985997c1ab@t-8ch.de>
Date: Sun, 23 Jul 2023 09:32:37 +0200
From: Thomas Weißschuh <thomas@...ch.de>
To: Zhangjin Wu <falcon@...ylab.org>
Cc: w@....eu, arnd@...db.de, linux-kernel@...r.kernel.org,
linux-kselftest@...r.kernel.org
Subject: Re: [PATCH v1 1/8] tools/nolibc: add support for powerpc
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@...ylab.org>
> ---
> 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@...ylab.org>
If it is taken from musl, shouldn't there also be a musl copyright?
> [..]
Powered by blists - more mailing lists