[5580] in Athena Bugs
changes to RT SYS.h
daemon@ATHENA.MIT.EDU (John Carr)
Thu Jul 19 16:36:18 1990
To: bugs@ATHENA.MIT.EDU
Date: Thu, 19 Jul 90 16:36:06 EDT
From: John Carr <jfc@ATHENA.MIT.EDU>
This patch
. puts all the syscall code into the text segment
. comments an apparently noop instruction (r0 is loaded,
but the syscall calling convention doesn't use it)
. makes the error return branch from the syscall faster/smaller
*** /source/bsd-4.3/rt/lib/libc/ca/sys/SYS.h Tue Sep 19 14:21:07 1989
--- SYS.h Thu Jul 19 16:21:45 1990
***************
*** 21,33 ****
.text; .globl _./**/x; _./**/x: stm r14,ARG3_OFFSET(r1); ai r1,-REG_SAVE_SZ;\
get r14,$_/**/x; mr r0,r15 ; bali r15,mcount; ai r1,REG_SAVE_SZ; lm r14,ARG3_OFFSET(r1);
#else
! #define ENTRY(x) .data; .align 2; .globl _/**/x;_/**/x: .long _./**/x;\
! .text; .globl _./**/x; _./**/x:;
#endif
! #define SYSCALL(x) ENTRY(x); SVC(x) ; bntbr r15; /* no-error return */\
! .globl _errno; get r5,$_errno; sts r2,0(r5); get r2,$-1; br r15; TTNOFRM
#define SYSCODE(x) ENTRY(x)
! #define SVC(x) get r0,0(sp); svc SYS_/**/x(r0)
#define TTNOFRM .align 2; .byte 0xdf, D_NOFRAME, 0xdf, 0;
.globl .oVncs; .set .oVncs,0
--- 21,35 ----
.text; .globl _./**/x; _./**/x: stm r14,ARG3_OFFSET(r1); ai r1,-REG_SAVE_SZ;\
get r14,$_/**/x; mr r0,r15 ; bali r15,mcount; ai r1,REG_SAVE_SZ; lm r14,ARG3_OFFSET(r1);
#else
! #define ENTRY(x) .text; .align 2; .globl _/**/x;_/**/x: .long _./**/x;\
! .globl _./**/x; _./**/x:;
#endif
! /* The ls r0,0(r1) forces a page fault and a stack grow if the allocated
! stack does not extend to the bottom of the current stack frame. */
! #define SYSCALL(x) ENTRY(x); ls r0,0(r1); SVC(x) ; bntbr r15; /* no-error return */\
! .globl _errno; store r2,_errno,r5; brx r15; cal r2,-1(r0) TTNOFRM
#define SYSCODE(x) ENTRY(x)
! #define SVC(x) svc SYS_/**/x(r0)
#define TTNOFRM .align 2; .byte 0xdf, D_NOFRAME, 0xdf, 0;
.globl .oVncs; .set .oVncs,0