diff --git a/lib/libc/powerpc/SYS.h b/lib/libc/powerpc/SYS.h index 24315f369531..8c47a65735f5 100644 --- a/lib/libc/powerpc/SYS.h +++ b/lib/libc/powerpc/SYS.h @@ -40,17 +40,14 @@ li 0,(SYS_##name); \ sc -#define _SYSCALL_BODY(name) \ - _SYSCALL(name) \ - bnslr; \ - b CNAME(HIDENAME(cerror)) - #define PSEUDO(name) \ .text; \ .align 2; \ ENTRY(__sys_##name); \ WEAK_REFERENCE(__sys_##name, _##name); \ - _SYSCALL_BODY(name); \ + _SYSCALL(name); \ + bnslr; \ + b CNAME(HIDENAME(cerror)); \ END(__sys_##name) #define RSYSCALL(name) \ @@ -59,5 +56,7 @@ END(__sys_##name) ENTRY(__sys_##name); \ WEAK_REFERENCE(__sys_##name, name); \ WEAK_REFERENCE(__sys_##name, _##name); \ - _SYSCALL_BODY(name); \ + _SYSCALL(name); \ + bnslr; \ + b CNAME(HIDENAME(cerror)); \ END(__sys_##name) diff --git a/lib/libc/powerpc64/SYS.h b/lib/libc/powerpc64/SYS.h index bf8bc6cc0e27..dccd08b63541 100644 --- a/lib/libc/powerpc64/SYS.h +++ b/lib/libc/powerpc64/SYS.h @@ -40,7 +40,11 @@ li 0,(SYS_##name); \ sc -#define _SYSCALL_BODY(name) \ +#define PSEUDO(name) \ + .text; \ + .align 2; \ +ENTRY(__sys_##name); \ + WEAK_REFERENCE(__sys_##name, _##name); \ _SYSCALL(name); \ bnslr; \ mflr %r0; \ @@ -51,14 +55,7 @@ addi %r1,%r1,48; \ ld %r0,16(%r1); \ mtlr %r0; \ - blr - -#define PSEUDO(name) \ - .text; \ - .align 2; \ -ENTRY(__sys_##name); \ - WEAK_REFERENCE(__sys_##name, _##name); \ - _SYSCALL_BODY(name); \ + blr; \ END(__sys_##name) #define RSYSCALL(name) \ @@ -67,5 +64,16 @@ END(__sys_##name) ENTRY(__sys_##name); \ WEAK_REFERENCE(__sys_##name, name); \ WEAK_REFERENCE(__sys_##name, _##name); \ - _SYSCALL_BODY(name); \ + _SYSCALL(name); \ + bnslr; \ + \ + mflr %r0; \ + std %r0,16(%r1); \ + stdu %r1,-48(%r1); \ + bl CNAME(HIDENAME(cerror)); \ + nop; \ + addi %r1,%r1,48; \ + ld %r0,16(%r1); \ + mtlr %r0; \ + blr; \ END(__sys_##name)