2022-02-07 17:23:17 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-06-18 20:30:30 +02:00
|
|
|
|
|
|
|
|
|
2022-02-07 17:23:17 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-06-23 23:48:34 +02:00
|
|
|
|
2023-10-20 09:30:33 +02:00
|
|
|
|
2022-02-07 17:23:17 +01:00
|
|
|
|
tools/nolibc: add support for powerpc
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 match 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, it is smaller:
/* 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
Like musl, Linux (arch/powerpc/include/asm/vdso/gettimeofday.h) uses the
same method for do_syscall_2() too.
Here applies the second method to get smaller size.
[1]: https://man7.org/linux/man-pages/man2/syscall.2.html
Reviewed-by: Thomas Weißschuh <linux@weissschuh.net>
Signed-off-by: Zhangjin Wu <falcon@tinylab.org>
Signed-off-by: Willy Tarreau <w@1wt.eu>
2023-08-06 02:39:26 +08:00
|
|
|
|
|
|
|
|
|
2022-02-07 17:23:17 +01:00
|
|
|
|
|
|
|
|
|
2025-11-10 19:54:36 +01:00
|
|
|
|
2023-01-09 09:09:07 +01:00
|
|
|
|
2023-03-04 15:29:53 +01:00
|
|
|
|
|
|
|
|
|
2025-02-26 15:05:17 +01:00
|
|
|
|
|
|
|
|
|
2025-04-27 07:47:38 +09:00
|
|
|
|
|
|
|
|
|
2025-06-23 23:15:54 +02:00
|
|
|
|
|
|
|
|
|
2023-11-05 11:07:05 +01:00
|
|
|
|
|
|
|
|
|
2022-02-07 17:23:17 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|