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.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 18040 invoked from network); 31 Dec 2023 00:24:37 -0000 Received: from 9front.inri.net (168.235.81.73) by inbox.vuxu.org with ESMTPUTF8; 31 Dec 2023 00:24:37 -0000 Received: from mail.posixcafe.org ([45.76.19.58]) by 9front; Sat Dec 30 19:22:50 -0500 2023 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=posixcafe.org; s=20200506; t=1703982251; h=from:from:reply-to: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: in-reply-to:in-reply-to:references:references; bh=18iR2oRgAA9QNDZzTO/0ZfD9Tyf/ZbMsTFYl/wm40YM=; b=n993NgdX9nOFjr3r8jns9qKZp8o3RRzuLneys4XrV1oEkzIokbKlr2CZPcYo4t2LQNPpev QceWqsDmcQhmXBeNjlFkQIwafop00NVTZ+D8Tu0JcL3DyuRgrWq15Heq0CQBhht5RAfkPJ MgOQ5XLdYc+1sHPomeeQgdWsR0DgkUY= Received: from [192.168.168.200] ( [207.45.82.38]) by mail.posixcafe.org (OpenSMTPD) with ESMTPSA id ca5684b4 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO) for <9front@9front.org>; Sat, 30 Dec 2023 18:24:11 -0600 (CST) Message-ID: Date: Sat, 30 Dec 2023 18:22:47 -0600 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US From: Jacob Moody To: 9front@9front.org References: <6eb35852-0af3-4b81-8d9f-3acdc0cb7707@posixcafe.org> In-Reply-To: <6eb35852-0af3-4b81-8d9f-3acdc0cb7707@posixcafe.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: open secure software information frontend Subject: Re: [9front] [PATCH] libc: add _callmain to share more initialization code Reply-To: 9front@9front.org Precedence: bulk Another revision on this, again tested on all I could get. After hacking on this for a bit I think this is the best its going to get, pending some modifications to 6? and 8? to make use of another opcode for directly JMP'ing. --- diff 069fd98950440119fef047c09e8816e1e1601319 63a34c9fec1f180211246f36226506589d2bb956 --- 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 @@ -34,6 +15,3 @@ MOVL argp+0(FP), AX MOVL 4(AX), AX RET - -DATA _exits<>+0(SB)/4, $"main" -GLOBL _exits<>+0(SB), $5 --- 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,6 @@ -#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 _exits<>+0(SB) - BSR exits(SB) - RTS - -DATA _exits<>+0(SB)/4, $"main" -GLOBL _exits<>+0(SB), $5 + PEA main(SB) + MOVL $0, TOS + JMP _callmain(SB) --- a/sys/src/libc/68000/main9p.s +++ b/sys/src/libc/68000/main9p.s @@ -1,23 +1,10 @@ -#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) - -loop: - PEA _exits<>+0(SB) - BSR exits(SB) + MOVL R0, _tos(SB) + PEA _profmain(SB) + MOVL $0, TOS + JMP _callmain(SB) LEA _profin(SB), A0 /* force loading of profile */ - BRA loop TEXT _saveret(SB), 1, $0 TEXT _savearg(SB), 1, $0 @@ -27,6 +14,3 @@ MOVL argp+0(FP), A0 MOVL 4(A0), R0 RTS - -DATA _exits<>+0(SB)/4, $"main" -GLOBL _exits<>+0(SB), $5 --- 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,6 @@ -#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 - BSR exits(SB) - RTS - -DATA _exits<>+0(SB)/4, $"main" -GLOBL _exits<>+0(SB), $5 + PEA main(SB) + MOVL $0, TOS + JMP _callmain(SB) --- a/sys/src/libc/68020/main9p.s +++ b/sys/src/libc/68020/main9p.s @@ -1,24 +1,10 @@ -#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) - -loop: - MOVL $_exits<>+0(SB), R0 - MOVL R0,TOS - BSR exits(SB) + MOVL R0, _tos(SB) + PEA _profmain(SB) + MOVL $0, TOS + JMP _callmain(SB) LEA _profin(SB), A0 /* force loading of profile */ - BRA loop TEXT _saveret(SB), 1, $0 TEXT _savearg(SB), 1, $0 @@ -28,6 +14,3 @@ MOVL argp+0(FP), A0 MOVL 4(A0), R0 RTS - -DATA _exits<>+0(SB)/4, $"main" -GLOBL _exits<>+0(SB), $5 --- /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,15 @@ -#define NPRIVATES 16 - arg=0 sp=13 sb=12 +lr=14 -TEXT _main(SB), 1, $(16 + NPRIVATES*4) +TEXT _main(SB), 1, $0 + SUB $8, R(sp) 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,19 @@ -#define NPRIVATES 16 - arg=0 sp=13 sb=12 +lr=14 -TEXT _mainp(SB), 1, $(16 + NPRIVATES*4) +TEXT _mainp(SB), 1, $0 + SUB $8, R(sp) 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 +22,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,9 @@ -#define NPRIVATES 16 - -TEXT _main(SB), 1, $(16 + NPRIVATES*8) +TEXT _main(SB), 1, $0 + SUB $16, SP 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,14 @@ -#define NPRIVATES 16 - -TEXT _mainp(SB), 1, $(16 + NPRIVATES*8) +TEXT _mainp(SB), 1, $0 + SUB $16, SP 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 @@ -33,6 +15,3 @@ TEXT _saveret(SB), 1, $-4 TEXT _savearg(SB), 1, $-4 RETURN - -DATA _exitstr<>+0(SB)/4, $"main" -GLOBL _exitstr<>+0(SB), $5 --- 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, $(16 + NPRIVATES*4) - +TEXT _main(SB), 1, $0 + ADD $-8, R29 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, $(16 + NPRIVATES*4) - +TEXT _mainp(SB), 1, $0 + ADD $-8, R29 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 @@ -32,6 +15,3 @@ TEXT _callpc(SB), 1, $0 MOVW argp-4(FP), R1 RET - -DATA exits<>+0(SB)/4, $"main" -GLOBL exits<>+0(SB), $5 --- 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,25 +1,10 @@ -#define NPRIVATES 16 - -TEXT _main(SB), 1, $(16 + NPRIVATES*4) - +TEXT _main(SB), 1, $0 + SUB $8, R1 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 R3, 4(R1) - MOVW R4, 8(R1) - BL main(SB) -loop: - MOVW $_exitstr<>(SB), R3 - MOVW R3, 4(R1) - BL exits(SB) - BR loop - -DATA _exitstr<>+0(SB)/4, $"main" -GLOBL _exitstr<>+0(SB), $5 + MOVW $main(SB), R3 + MOVW R0, LR + MOVW $_callmain(SB), R4 + MOVW R4, CTR + BR (CTR) --- a/sys/src/libc/power/main9p.s +++ b/sys/src/libc/power/main9p.s @@ -1,31 +1,14 @@ -#define NPRIVATES 16 - -TEXT _mainp(SB), 1, $(16 + NPRIVATES*4) - +TEXT _mainp(SB), 1, $0 + SUB $8, R1 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 $_profmain(SB), R3 + MOVW R0, LR + MOVW $_callmain(SB), R4 + MOVW R4, CTR + BR (CTR) - 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 R3, 4(R1) - MOVW R4, 8(R1) - BL main(SB) -loop: - MOVW $exits<>(SB), R3 - MOVW R3, 4(R1) - BL exits(SB) - MOVW $_profin(SB), R3 /* force loading of profile */ - BR loop - TEXT _saveret(SB), 1, $0 TEXT _savearg(SB), 1, $0 RETURN @@ -33,6 +16,3 @@ TEXT _callpc(SB), 1, $0 MOVW argp-4(FP), R3 RETURN - -DATA exits<>+0(SB)/4, $"main" -GLOBL exits<>+0(SB), $5 --- 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, $(16 + NPRIVATES*4) - +TEXT _main(SB), 1, $0 + SUB $8, R1 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 */ - MOVW inargc-4(FP), R7 - MOVW $inargv+0(FP), R8 - MOVW R8, 8(R1) - JMPL main(SB) -loop: - MOVW $_exits<>(SB), R7 - JMPL exits(SB) + MOVW $main(SB), R7 + MOVW $_callmain(SB), R24 + JMP (R24) MOVW $_mul(SB), R8 /* force loading of muldiv */ - JMP loop - -DATA _exits<>+0(SB)/5, $"main" -GLOBL _exits<>+0(SB), $5 --- 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, $(16 + NPRIVATES*4) - +TEXT _mainp(SB), 1, $0 + SUB $8, R1 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 @@ -17,21 +11,11 @@ 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) - -loop: - MOVW $_exits<>(SB), R7 - JMPL exits(SB) + MOVW $_profmain(SB), R7 + MOVW $_callmain(SB), R24 + JMP (R24) MOVW $_mul(SB), R8 /* force loading of muldiv */ MOVW $_profin(SB), R9 /* force loading of profile */ - JMP loop TEXT _saveret(SB), 1, $0 TEXT _savearg(SB), 1, $0 @@ -40,6 +24,3 @@ TEXT _callpc(SB), 1, $0 MOVW argp-4(FP), R7 RETURN - -DATA _exits<>+0(SB)/4, $"main" -GLOBL _exits<>+0(SB), $5