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? > [..]