From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=0.2 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.4 Received: (qmail 18096 invoked from network); 29 Dec 2023 07:06:43 -0000 Received: from 9front.inri.net (168.235.81.73) by inbox.vuxu.org with ESMTPUTF8; 29 Dec 2023 07:06:43 -0000 Received: from mail.posixcafe.org ([45.76.19.58]) by 9front; Fri Dec 29 02:05:31 -0500 2023 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=posixcafe.org; s=20200506; t=1703833610; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=HM0Zu+YgDhO5DJYVEf8Gnh+Nk59yUmuV+MJvQywzQP0=; b=VCUke1CJpCGrEe4KvwD7zH6rs6MTZJfJDF0p5quueygk1/u7mXwyUZA8dyCFrU7LIciNtA sZcp2NfmVIwXngZrVjxJ+cpdejsFpAyNVKjO3EJqCYCj+MQFykd0+rfLz17Lqc04rTVoZ7 u3wlmybRaURh9I6OKO+5E9tnu9Um1G4= Received: from [192.168.168.200] ( [207.45.82.38]) by mail.posixcafe.org (OpenSMTPD) with ESMTPSA id 64ddd807 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO) for <9front@9front.org>; Fri, 29 Dec 2023 01:06:50 -0600 (CST) Message-ID: <6eb35852-0af3-4b81-8d9f-3acdc0cb7707@posixcafe.org> Date: Fri, 29 Dec 2023 01:05:30 -0600 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: 9front@9front.org From: Jacob Moody Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: managed virtual shader core database Subject: [9front] [PATCH] libc: add _callmain to share more initialization code Reply-To: 9front@9front.org Precedence: bulk Before each arch had to implement the _privates array themselves in assembly, which meant it was quite easy for them to get out of sync. This cleans this up to be a single enum and shares this initialization code. This code also reduces a lot of redundant copying, by just perserving the stack as is, pushing our main function and then JMP'ing. Tested with amd64 hardware, 386 qemu, arm64 qemu, 5e, ki, vi, and ki The only thing I was unable to test in some capacity was the 68k stuff, perhaps a resident 68k fan can help review. Would also appreciate some testing with arm32, mips and spim hardware. Assembly is not something I am super comfortable with, this has already done a lot of lookover by cinap but I could have easily missed more issues. --- diff caec06be08d80ed5c6d99367604dbba006d6013f 46acc8fa0520cd8586253a972b55a5f26faa6a47 --- a/sys/src/libc/386/argv0.s +++ b/sys/src/libc/386/argv0.s @@ -1,4 +1,2 @@ GLOBL argv0(SB), $4 GLOBL _tos(SB), $4 -GLOBL _privates(SB), $4 -GLOBL _nprivates(SB), $4 --- a/sys/src/libc/386/main9.s +++ b/sys/src/libc/386/main9.s @@ -1,21 +1,7 @@ -#define NPRIVATES 16 - -TEXT _main(SB), 1, $(8+NPRIVATES*4) +TEXT _main(SB), 1, $0 MOVL AX, _tos(SB) - LEAL 8(SP), AX - MOVL AX, _privates(SB) - MOVL $NPRIVATES, _nprivates(SB) - MOVL inargc-4(FP), AX - MOVL AX, 0(SP) - LEAL inargv+0(FP), AX - MOVL AX, 4(SP) - CALL main(SB) - -loop: - MOVL $_exits<>(SB), AX - MOVL AX, 0(SP) - CALL exits(SB) - JMP loop - -DATA _exits<>+0(SB)/4, $"main" -GLOBL _exits<>+0(SB), $5 + MOVL $main(SB), AX + PUSHL AX + PUSHL $0 + MOVL $_callmain(SB), AX + JMP* AX --- a/sys/src/libc/386/main9p.s +++ b/sys/src/libc/386/main9p.s @@ -1,30 +1,11 @@ -#define NPRIVATES 16 - -TEXT _mainp(SB), 1, $(8+NPRIVATES*4) - /* _tos = arg */ +TEXT _mainp(SB), 1, $0 MOVL AX, _tos(SB) - LEAL 8(SP), AX - MOVL AX, _privates(SB) - MOVL $NPRIVATES, _nprivates(SB) - /* _profmain(); */ - CALL _profmain(SB) - /* _tos->prof.pp = _tos->prof.next; */ - MOVL _tos+0(SB),DX - MOVL 4(DX),CX - MOVL CX,(DX) - /* main(argc, argv); */ - MOVL inargc-4(FP), AX - MOVL AX, 0(SP) - LEAL inargv+0(FP), AX - MOVL AX, 4(SP) - CALL main(SB) - -loop: - MOVL $_exits<>(SB), AX - MOVL AX, 0(SP) - CALL exits(SB) + MOVL $_profmain(SB), AX + PUSHL AX + PUSHL $0 + MOVL $_callmain(SB), AX + JMP* AX MOVL $_profin(SB), AX /* force loading of profile */ - JMP loop TEXT _saveret(SB), 1, $0 TEXT _savearg(SB), 1, $0 --- a/sys/src/libc/68000/argv0.s +++ b/sys/src/libc/68000/argv0.s @@ -1,4 +1,2 @@ GLOBL argv0(SB), $4 GLOBL _tos(SB), $4 -GLOBL _privates(SB), $4 -GLOBL _nprivates(SB), $4 --- a/sys/src/libc/68000/main9.s +++ b/sys/src/libc/68000/main9.s @@ -1,18 +1,13 @@ -#define NPRIVATES 16 - -TEXT _main(SB), 1, $(16 + NPRIVATES*4) +TEXT _main(SB), 1, $0 MOVL $a6base(SB), A6 MOVL R0, _tos(SB) - LEA p-64(SP),A0 - MOVL A0,_privates+0(SB) - MOVL $16,R0 - MOVL R0,_nprivates+0(SB) - PEA inargv+0(FP) - MOVL inargc-4(FP), TOS - BSR main(SB) + PEA main(SB) + BSR _callmain(SB) + +loop: PEA _exits<>+0(SB) BSR exits(SB) - RTS + BRA loop DATA _exits<>+0(SB)/4, $"main" GLOBL _exits<>+0(SB), $5 --- a/sys/src/libc/68000/main9p.s +++ b/sys/src/libc/68000/main9p.s @@ -1,17 +1,8 @@ -#define NPRIVATES 16 - -TEXT _mainp(SB), 1, $(16 + NPRIVATES*4) +TEXT _mainp(SB), 1, $0 MOVL $a6base(SB), A6 - MOVL R0, _tos(SB) /* return value of sys exec!! */ - LEA p-64(SP),A0 - MOVL A0,_privates+0(SB) - MOVL $16,R0 - MOVL R0,_nprivates+0(SB) - BSR _profmain(SB) - MOVL __prof+4(SB), __prof+0(SB) - PEA inargv+0(FP) - MOVL inargc-4(FP), TOS - BSR main(SB) + MOVL R0, _tos(SB) + PEA _profmain(SB) + BSR _callmain(SB) loop: PEA _exits<>+0(SB) --- a/sys/src/libc/68020/argv0.s +++ b/sys/src/libc/68020/argv0.s @@ -1,4 +1,2 @@ GLOBL argv0(SB), $4 GLOBL _tos(SB), $4 -GLOBL _privates(SB), $4 -GLOBL _nprivates(SB), $4 --- a/sys/src/libc/68020/main9.s +++ b/sys/src/libc/68020/main9.s @@ -1,19 +1,13 @@ -#define NPRIVATES 16 - -TEXT _main(SB), 1, $(16 + NPRIVATES*4) +TEXT _main(SB), 1, $0 MOVL $a6base(SB), A6 MOVL R0, _tos(SB) - LEA p-64(SP),A0 - MOVL A0,_privates+0(SB) - MOVL $16,R0 - MOVL R0,_nprivates+0(SB) - PEA inargv+0(FP) - MOVL inargc-4(FP), TOS - BSR main(SB) - MOVL $_exits<>+0(SB), R0 - MOVL R0,TOS + PEA main(SB) + BSR _callmain(SB) + +loop: + PEA _exits<>+0(SB) BSR exits(SB) - RTS + BRA loop DATA _exits<>+0(SB)/4, $"main" GLOBL _exits<>+0(SB), $5 --- a/sys/src/libc/68020/main9p.s +++ b/sys/src/libc/68020/main9p.s @@ -1,21 +1,11 @@ -#define NPRIVATES 16 - -TEXT _mainp(SB), 1, $(16 + NPRIVATES*4) +TEXT _mainp(SB), 1, $0 MOVL $a6base(SB), A6 - MOVL R0, _tos(SB) /* return value of sys exec!! */ - LEA p-64(SP),A0 - MOVL A0,_privates+0(SB) - MOVL $16,R0 - MOVL R0,_nprivates+0(SB) - BSR _profmain(SB) - MOVL __prof+4(SB), __prof+0(SB) - PEA inargv+0(FP) - MOVL inargc-4(FP), TOS - BSR main(SB) + MOVL R0, _tos(SB) + PEA _profmain(SB) + BSR _callmain(SB) loop: - MOVL $_exits<>+0(SB), R0 - MOVL R0,TOS + PEA _exits<>+0(SB) BSR exits(SB) LEA _profin(SB), A0 /* force loading of profile */ BRA loop --- /dev/null +++ b/sys/src/libc/9sys/callmain.c @@ -1,0 +1,24 @@ +#include +#include + +void **_privates; +int _nprivates; + +enum{ + NPRIVATES=16, +}; + +#pragma profile off + +void +_callmain(void (*main)(int, char**), int argc, char *arg0) +{ + void *privates[NPRIVATES]; + + _privates = privates; + _nprivates = NPRIVATES; + main(argc, &arg0); + exits("main"); +} + +#pragma profile on --- a/sys/src/libc/9sys/mkfile +++ b/sys/src/libc/9sys/mkfile @@ -5,6 +5,7 @@ abort.$O\ access.$O\ announce.$O\ + callmain.$O\ convD2M.$O\ convM2D.$O\ convM2S.$O\ --- a/sys/src/libc/amd64/argv0.s +++ b/sys/src/libc/amd64/argv0.s @@ -1,4 +1,2 @@ GLOBL argv0(SB), $8 GLOBL _tos(SB), $8 -GLOBL _privates(SB), $8 -GLOBL _nprivates(SB), $4 --- a/sys/src/libc/amd64/main9.s +++ b/sys/src/libc/amd64/main9.s @@ -1,19 +1,7 @@ -#define NPRIVATES 16 - -TEXT _main(SB), 1, $(2*8+NPRIVATES*8) +TEXT _main(SB), 1, $0 MOVQ AX, _tos(SB) - LEAQ 16(SP), AX - MOVQ AX, _privates(SB) - MOVL $NPRIVATES, _nprivates(SB) - MOVL inargc-8(FP), RARG - LEAQ inargv+0(FP), AX - MOVQ AX, 8(SP) - CALL main(SB) - -loop: - MOVQ $_exits<>(SB), RARG - CALL exits(SB) - JMP loop - -DATA _exits<>+0(SB)/4, $"main" -GLOBL _exits<>+0(SB), $5 + MOVQ $main(SB), RARG + PUSHQ RARG + PUSHQ $0 + MOVQ $_callmain(SB), AX + JMP* AX --- a/sys/src/libc/amd64/main9p.s +++ b/sys/src/libc/amd64/main9p.s @@ -1,27 +1,12 @@ -#define NPRIVATES 16 +TEXT _mainp(SB), 1, $0 + MOVQ AX, _tos(SB) + MOVQ $_profmain(SB), RARG + PUSHQ RARG + PUSHQ $0 + MOVQ $_callmain(SB), AX + JMP* AX -TEXT _mainp(SB), 1, $(2*8+NPRIVATES*8) - MOVQ AX, _tos(SB) /* _tos = arg */ - LEAQ 16(SP), AX - MOVQ AX, _privates(SB) - MOVL $NPRIVATES, _nprivates(SB) - - CALL _profmain(SB) /* _profmain(); */ - - MOVQ _tos+0(SB), DX /* _tos->prof.pp = _tos->prof.next; */ - MOVQ 8(DX), CX - MOVQ CX, (DX) - - MOVL inargc-8(FP), RARG /* main(argc, argv); */ - LEAQ inargv+0(FP), AX - MOVQ AX, 8(SP) - CALL main(SB) - -loop: - MOVQ $_exits<>(SB), RARG - CALL exits(SB) MOVQ $_profin(SB), AX /* force loading of profile */ - JMP loop TEXT _savearg(SB), 1, $0 MOVQ RARG, AX @@ -33,6 +18,3 @@ TEXT _callpc(SB), 1, $0 MOVQ 8(RARG), AX RET - -DATA _exits<>+0(SB)/4, $"main" -GLOBL _exits<>+0(SB), $5 --- a/sys/src/libc/arm/argv0.s +++ b/sys/src/libc/arm/argv0.s @@ -1,4 +1,2 @@ GLOBL argv0(SB), $4 GLOBL _tos(SB), $4 -GLOBL _privates(SB), $4 -GLOBL _nprivates(SB), $4 --- a/sys/src/libc/arm/main9.s +++ b/sys/src/libc/arm/main9.s @@ -1,29 +1,14 @@ -#define NPRIVATES 16 - arg=0 sp=13 sb=12 +lr=14 -TEXT _main(SB), 1, $(16 + NPRIVATES*4) +TEXT _main(SB), 1, $4 MOVW $setR12(SB), R(sb) MOVW R(arg), _tos(SB) - MOVW $p-64(SP), R1 - MOVW R1, _privates(SB) - MOVW $NPRIVATES, R1 - MOVW R1, _nprivates(SB) + MOVW $main(SB), R(arg) + MOVW $0, R(lr) + B _callmain(SB) - MOVW $inargv+0(FP), R(arg) - MOVW R(arg), 8(R(sp)) - MOVW inargc-4(FP), R(arg) - MOVW R(arg), 4(R(sp)) - BL main(SB) -loop: - MOVW $_exitstr<>(SB), R(arg) - MOVW R(arg), 4(R(sp)) - BL exits(SB) - BL _div(SB) - B loop - -DATA _exitstr<>+0(SB)/4, $"main" -GLOBL _exitstr<>+0(SB), $5 + BL _div(SB) /* force loading of div */ --- a/sys/src/libc/arm/main9p.s +++ b/sys/src/libc/arm/main9p.s @@ -1,35 +1,18 @@ -#define NPRIVATES 16 - arg=0 sp=13 sb=12 +lr=14 -TEXT _mainp(SB), 1, $(16 + NPRIVATES*4) +TEXT _mainp(SB), 1, $4 MOVW $setR12(SB), R(sb) MOVW R(arg), _tos(SB) - MOVW $p-64(SP), R1 - MOVW R1, _privates(SB) - MOVW $NPRIVATES, R1 - MOVW R1, _nprivates(SB) + MOVW $_profmain(SB), R(arg) + MOVW $0, R(lr) + B _callmain(SB) - BL _profmain(SB) - MOVW _tos(SB), R1 - MOVW 4(R1), R0 - MOVW R0, 0(R1) - - MOVW $inargv+0(FP), R(arg) - MOVW R(arg), 8(R(sp)) - MOVW inargc-4(FP), R(arg) - MOVW R(arg), 4(R(sp)) - BL main(SB) -loop: - MOVW $_exitstr<>(SB), R(arg) - MOVW R(arg), 4(R(sp)) - BL exits(SB) MOVW $_div(SB), R(arg) /* force loading of div */ MOVW $_profin(SB), R(arg) /* force loading of profile */ - B loop TEXT _saveret(SB), 1, $0 TEXT _savearg(SB), 1, $0 @@ -38,6 +21,3 @@ TEXT _callpc(SB), 1, $-4 MOVW 0(R13), R(arg) RET - -DATA _exitstr<>+0(SB)/4, $"main" -GLOBL _exitstr<>+0(SB), $5 --- a/sys/src/libc/arm64/argv0.s +++ b/sys/src/libc/arm64/argv0.s @@ -1,4 +1,2 @@ GLOBL argv0(SB), $8 GLOBL _tos(SB), $8 -GLOBL _privates(SB), $8 -GLOBL _nprivates(SB), $4 --- a/sys/src/libc/arm64/main9.s +++ b/sys/src/libc/arm64/main9.s @@ -1,25 +1,8 @@ -#define NPRIVATES 16 - -TEXT _main(SB), 1, $(16 + NPRIVATES*8) +TEXT _main(SB), 1, $8 MOV $setSB(SB), R28 MOV R0, _tos(SB) - ADD $32, RSP, R1 - MOV R1, _privates(SB) - MOVW $NPRIVATES, R2 - MOVW R2, _nprivates(SB) + MOV $main(SB), R0 - MOV $inargv+0(FP), R1 - MOV R1, 16(RSP) - - MOVW inargc-8(FP), R0 - MOV R0, 8(RSP) - - BL main(SB) -loop: - MOV $_exitstr<>(SB), R0 - BL exits(SB) - B loop - -DATA _exitstr<>+0(SB)/4, $"main" -GLOBL _exitstr<>+0(SB), $5 + MOV $0, R30 + B _callmain(SB) --- a/sys/src/libc/arm64/main9p.s +++ b/sys/src/libc/arm64/main9p.s @@ -1,32 +1,13 @@ -#define NPRIVATES 16 - -TEXT _mainp(SB), 1, $(16 + NPRIVATES*8) +TEXT _mainp(SB), 1, $8 MOV $setSB(SB), R28 MOV R0, _tos(SB) - ADD $32, RSP, R1 - MOV R1, _privates(SB) - MOVW $NPRIVATES, R2 - MOVW R2, _nprivates(SB) + MOV $_profmain(SB), R0 - BL _profmain(SB) + MOV $0, R30 + B _callmain(SB) - MOV _tos(SB), R0 /* _tos->prof.pp = _tos->prof.next; */ - MOV 8(R0), R1 - MOV R1, 0(R0) - - MOV $inargv+0(FP), R1 - MOV R1, 16(RSP) - - MOVW inargc-8(FP), R0 - MOV R0, 8(RSP) - - BL main(SB) -loop: - MOV $_exitstr<>(SB), R0 - BL exits(SB) MOV $_profin(SB), R0 - B loop TEXT _callpc(SB), 1, $-4 MOV 0(SP), R0 --- a/sys/src/libc/mips/argv0.s +++ b/sys/src/libc/mips/argv0.s @@ -1,4 +1,2 @@ GLOBL argv0(SB), $4 GLOBL _tos(SB), $4 -GLOBL _privates(SB), $4 -GLOBL _nprivates(SB), $4 --- a/sys/src/libc/mips/main9.s +++ b/sys/src/libc/mips/main9.s @@ -1,25 +1,8 @@ -#define NPRIVATES 16 +TEXT _main(SB), 1, $4 -TEXT _main(SB), 1, $(16 + NPRIVATES*4) - MOVW $setR30(SB), R30 MOVW R1, _tos(SB) - MOVW $p-64(SP), R1 - MOVW R1, _privates(SB) - MOVW $NPRIVATES, R1 - MOVW R1, _nprivates(SB) - - MOVW inargc-4(FP), R1 - MOVW $inargv+0(FP), R2 - MOVW R1, 4(R29) - MOVW R2, 8(R29) - JAL main(SB) -loop: - MOVW $_exitstr<>(SB), R1 - MOVW R1, 4(R29) - JAL exits(SB) - JMP loop - -DATA _exitstr<>+0(SB)/4, $"main" -GLOBL _exitstr<>+0(SB), $5 + MOVW $main(SB), R1 + MOVW $0, R31 + JMP _callmain(SB) --- a/sys/src/libc/mips/main9p.s +++ b/sys/src/libc/mips/main9p.s @@ -1,29 +1,12 @@ -#define NPRIVATES 16 +TEXT _mainp(SB), 1, $4 -TEXT _mainp(SB), 1, $(16 + NPRIVATES*4) - MOVW $setR30(SB), R30 MOVW R1, _tos(SB) - MOVW $p-64(SP), R1 - MOVW R1, _privates(SB) - MOVW $NPRIVATES, R1 - MOVW R1, _nprivates(SB) - - JAL _profmain(SB) - MOVW __prof+4(SB), R1 - MOVW R1, __prof+0(SB) - MOVW inargc-4(FP), R1 - MOVW $inargv+0(FP), R2 - MOVW R1, 4(R29) - MOVW R2, 8(R29) - JAL main(SB) -loop: - MOVW $exits<>(SB), R1 - MOVW R1, 4(R29) - JAL exits(SB) + MOVW $_profmain(SB), R1 + MOVW $0, R31 + JMP _callmain(SB) MOVW $_profin(SB), R0 /* force loading of profile */ - JMP loop TEXT _saveret(SB), 1, $0 TEXT _savearg(SB), 1, $0 --- a/sys/src/libc/port/profile.c +++ b/sys/src/libc/port/profile.c @@ -235,7 +235,7 @@ } void -_profmain(void) +_profmain(int argc, char **argv) { char ename[50]; int n, f; @@ -274,6 +274,9 @@ _tos->prof.pid = _tos->pid; atexit(_profdump); _tos->clock = 1; + _tos->prof.pp = _tos->prof.next; + extern void main(int, char**); + main(argc, argv); } void prof(void (*fn)(void*), void *arg, int entries, int what) --- a/sys/src/libc/power/argv0.s +++ b/sys/src/libc/power/argv0.s @@ -1,4 +1,2 @@ GLOBL argv0(SB), $4 GLOBL _tos(SB), $4 -GLOBL _privates(SB), $4 -GLOBL _nprivates(SB), $4 --- a/sys/src/libc/power/main9.s +++ b/sys/src/libc/power/main9.s @@ -1,23 +1,12 @@ -#define NPRIVATES 16 - -TEXT _main(SB), 1, $(16 + NPRIVATES*4) - +TEXT _main(SB), 1, $0 MOVW $setSB(SB), R2 MOVW R3, _tos(SB) - MOVW $p-64(SP), R4 - MOVW R4, _privates+0(SB) - MOVW $16, R4 - MOVW R4, _nprivates+0(SB) - - MOVW inargc-4(FP), R3 - MOVW $inargv+0(FP), R4 + MOVW $main(SB), R3 MOVW R3, 4(R1) - MOVW R4, 8(R1) - BL main(SB) + BL _callmain(SB) loop: MOVW $_exitstr<>(SB), R3 - MOVW R3, 4(R1) BL exits(SB) BR loop --- a/sys/src/libc/power/main9p.s +++ b/sys/src/libc/power/main9p.s @@ -1,27 +1,12 @@ -#define NPRIVATES 16 - -TEXT _mainp(SB), 1, $(16 + NPRIVATES*4) - +TEXT _mainp(SB), 1, $0 MOVW $setSB(SB), R2 MOVW R3, _tos(SB) - MOVW $p-64(SP), R4 - MOVW R4, _privates+0(SB) - MOVW $16, R4 - MOVW R4, _nprivates+0(SB) - - BL _profmain(SB) - MOVW _tos(SB), R3 - MOVW 4(R3), R4 - MOVW R4, 0(R3) - MOVW inargc-4(FP), R3 - MOVW $inargv+0(FP), R4 + MOVW $_profmain(SB), R3 MOVW R3, 4(R1) - MOVW R4, 8(R1) - BL main(SB) + BL _callmain(SB) loop: MOVW $exits<>(SB), R3 - MOVW R3, 4(R1) BL exits(SB) MOVW $_profin(SB), R3 /* force loading of profile */ BR loop --- a/sys/src/libc/sparc/argv0.s +++ b/sys/src/libc/sparc/argv0.s @@ -1,4 +1,2 @@ GLOBL argv0(SB), $4 GLOBL _tos(SB), $4 -GLOBL _privates(SB), $4 -GLOBL _nprivates(SB), $4 --- a/sys/src/libc/sparc/main9.s +++ b/sys/src/libc/sparc/main9.s @@ -1,14 +1,8 @@ -#define NPRIVATES 16 +TEXT _main(SB), 1, $0 -TEXT _main(SB), 1, $(16 + NPRIVATES*4) - MOVW $setSB(SB), R2 MOVW R7, _tos(SB) - MOVW $p-64(SP),R7 - MOVW R7,_privates+0(SB) - MOVW $16,R7 - MOVW R7,_nprivates+0(SB) /* MOVW _fpsr+0(SB), FSR FMOVD $0.5, F26 @@ -16,10 +10,8 @@ FADDD F26, F26, F28 FADDD F28, F28, F30 */ - MOVW inargc-4(FP), R7 - MOVW $inargv+0(FP), R8 - MOVW R8, 8(R1) - JMPL main(SB) + MOVW $main(SB), R7 + JMPL _callmain(SB) loop: MOVW $_exits<>(SB), R7 --- a/sys/src/libc/sparc/main9p.s +++ b/sys/src/libc/sparc/main9p.s @@ -1,14 +1,8 @@ -#define NPRIVATES 16 +TEXT _mainp(SB), 1, $0 -TEXT _mainp(SB), 1, $(16 + NPRIVATES*4) - MOVW $setSB(SB), R2 MOVW R7, _tos(SB) - MOVW $p-64(SP),R7 - MOVW R7,_privates+0(SB) - MOVW $16,R7 - MOVW R7,_nprivates+0(SB) /* MOVW _fpsr+0(SB), FSR FMOVD $0.5, F26 @@ -16,16 +10,8 @@ FADDD F26, F26, F28 FADDD F28, F28, F30 */ - - JMPL _profmain(SB) - MOVW __prof+4(SB), R7 - MOVW R7, __prof+0(SB) - - MOVW inargc-4(FP), R7 - MOVW $inargv+0(FP), R8 - MOVW R8, 8(R1) - JMPL main(SB) - + MOVW $_profmain(SB), R7 + JMPL _callmain(SB) loop: MOVW $_exits<>(SB), R7 JMPL exits(SB)