diff db0a8cec19bd6e1ce6c0f7cd32dd15658a1c2350 uncommitted --- a/gefsroot.rc +++ b/gefsroot.rc @@ -76,6 +76,10 @@ mount -c /srv/dos /n/9fat $disk^'/9fat' disk/mkfs -z 16372 -U -s /n/dist -d /n/newfs /sys/lib/sysconfig/proto/allproto cp /n/newfs/386/9bootfat /n/9fat +chmod +al /n/9fat/9bootfat # make file continous on disk +mkdir -p /n/9fat/efi/boot +cp /386/*.efi /n/9fat/efi/boot/ + >/n/9fat/plan9.ini cat <<EOF bootfile=9pc64
Mon Dec 4 22:20:38 EST 2023
% r2 rc [0x0001cff4]> s sym.exits [0x0001ddac]> af [0x0001ddac]> pdf ┌ 44: sym.exits (int64_t arg1, int64_t arg_18h); │ ; arg int64_t arg1 @ x0 │ ; arg int64_t arg_18h @ sp+0x18 │ 0x0001ddac fe0f1ff8 str x30, [sp, -0x10]! ; exits.c:9 │ 0x0001ddb0 891b42f9 ldr x9, [x28, 0x430] ; 0xf6 ; 246 │ 0x0001ddb4 ea0300aa mov x10, x0 ; arg1 │ 0x0001ddb8 e00f00f9 str x0, [sp, 0x18] │ ┌─< 0x0001ddbc 690000b4 cbz x9, 0x1ddc8 ; exits.c:11 │ │ 0x0001ddc0 20013fd6 blr x9 │ │ 0x0001ddc4 ea0f40f9 ldr x10, [arg_18h] ; 5 │ └─> 0x0001ddc8 e0030aaa mov x0, x10 ; exits.c:12 │ 0x0001ddcc 48060094 bl sym._exits │ 0x0001ddd0 fe0741f8 ldr x30, [sp], 0x10 ; 5 └ 0x0001ddd4 c0035fd6 ret [0x0001ddac]>
Mon Dec 4 22:14:40 EST 2023
// /sys/src/libc/fmt/vsnprint.c:5:vsnprint(char *buf, int len, char *fmt, va_list args) TEXT vsnprint: // vsnprint(char *buf, int len, char *fmt, va_list args) SUBQ $0x70,SP MOVL len+0x8(FP),DX // if(len <= 0) CMPL DX,$0x0 JGT vsnprint+0x1a(SB) // return -1; MOVL $0xffffffff,AX ADDQ $0x70,SP RET // f.runes = 0; MOVB $0x0,f+0x20(SP) // f.start = buf; MOVQ BP,0x28(SP) // f.to = buf; MOVQ BP,0x30(SP) // f.stop = buf + len - 1; MOVLQSX DX,DI MOVQ BP,SI MOVQ BP,buf+0x0(FP) LEAQ 0x0(SI)(DI*1),DI DECQ DI MOVQ DI,0x38(SP) // f.flush = nil; MOVQ $0x0,0x40(SP) // f.farg = nil; MOVQ $0x0,0x48(SP) // f.nfmt = 0; MOVL $0x0,0x50(SP) // f.args = args; MOVQ args+0x18(FP),DI MOVQ DI,0x58(SP) // dofmt(&f, fmt); LEAQ f+0x20(SP),BP MOVQ fmt+0x10(FP),DI MOVQ DI,0x8(SP) CALL dofmt(SB) // *(char*)f.to = '\0'; MOVQ 0x30(SP),DI MOVB $0x0,0x0(DI) // return (char*)f.to - buf; MOVQ 0x30(SP),AX SUBQ buf+0x0(FP),AX MOVL AX,AX ADDQ $0x70,SP RET
Mon Dec 4 21:46:45 EST 2023
// /sys/src/libc/port/nan.c:9:NaN(void) TEXT NaN: // NaN(void) SUBQ $0x10,SP // a.hi = NANEXP; MOVL $0x7ff00000,0xc(SP) // a.lo = 1; MOVL $0x1,a+0x8(SP) // return a.x; MOVSD a+0x8(SP),X0 ADDQ $0x10,SP RET
Mon Dec 4 20:16:21 EST 2023
TEXT NaN: /sys/src/libc/port/nan.c:9 SUBQ $0x10,SP /sys/src/libc/port/nan.c:13 MOVL $0x7ff00000,0xc(SP) /sys/src/libc/port/nan.c:14 MOVL $0x1,a+0x8(SP) /sys/src/libc/port/nan.c:15 MOVSD a+0x8(SP),X0 ADDQ $0x10,SP RET
Mon Dec 4 20:13:46 EST 2023
#!/bin/acid -f defn das1(name, addr) { local bound; bound = fnbound(addr); addr = fmt(addr, 'i'); oldln = -1; print("TEXT ", name, ":\n"); while 1 do { newln = pcline(addr); if oldln != newln then { print("\t", pcfile(addr), ":", pcline(addr), "\n"); oldln = newln; } print("\t", @addr++, "\n"); if bound != {} && addr >= bound[1] then return {}; } } defn das() { s = symbols; while s do { if s[0][2] != etext && s[0][1] == 'T' then das1(s[0][0], s[0][2]); print("\n"); s = tail(s); } } das();
Mon Dec 4 17:05:23 EST 2023
diff 73ffc757d57e3b84fe62d679425be6be209fcfac uncommitted --- a/sys/src/cmd/acid/acid.h +++ b/sys/src/cmd/acid/acid.h @@ -223,7 +223,7 @@ int popio(void); void pstr(String*); void pushfile(char*); -void pushstr(Node*); +void pushstr(char*); void readtext(char*); void restartio(void); uvlong rget(Map*, char*); --- a/sys/src/cmd/acid/builtin.c +++ b/sys/src/cmd/acid/builtin.c @@ -456,7 +456,7 @@ if(res.type != TSTRING) error("interpret(string): arg type"); - pushstr(&res); + pushstr(res.string->string); isave = interactive; interactive = 0; --- a/sys/src/cmd/acid/exec.c +++ b/sys/src/cmd/acid/exec.c @@ -34,7 +34,7 @@ } while(popio()) ; - interactive = 1; +// interactive = 1; longjmp(err, 1); } --- a/sys/src/cmd/acid/lex.c +++ b/sys/src/cmd/acid/lex.c @@ -103,7 +103,7 @@ } void -pushstr(Node *s) +pushstr(char *s) { IOstack *io; @@ -117,7 +117,7 @@ fatal("no memory"); io->line = line; line = 1; - io->text = strdup(s->string->string); + io->text = strdup(s); if(io->text == 0) fatal("no memory"); io->ip = io->text; --- a/sys/src/cmd/acid/main.c +++ b/sys/src/cmd/acid/main.c @@ -30,6 +30,7 @@ void main(int argc, char *argv[]) { + char *expr; Lsym *l; Node *n; char *s; @@ -40,7 +41,8 @@ aout = "8.out"; quiet = 1; - mtype = 0; + mtype = nil; + expr = nil; ARGBEGIN{ case 'm': mtype = ARGF(); @@ -49,10 +51,9 @@ wtflag = 1; break; case 'l': - s = ARGF(); - if(s == 0) - usage(); - lm[nlm++] = s; + if(nlm == nelem(lm)) + sysfatal("too many libs specified"); + lm[nlm++] = EARGF(usage()); break; case 'k': kernel++; @@ -60,6 +61,9 @@ case 'q': quiet = 0; break; + case 'e': + expr = EARGF(usage()); + break; default: usage(); }ARGEND @@ -90,7 +94,10 @@ kinit(); initialising = 1; - pushfile(0); + if(expr != nil) + pushstr(expr); + else + pushfile(nil); loadvars(); installbuiltin(); @@ -124,7 +131,8 @@ execute(n); } - interactive = 1; + if(expr == nil) + interactive = 1; initialising = 0; line = 1; @@ -136,9 +144,9 @@ unwind(); } stacked = 0; + if(interactive) + Bprint(bout, "acid: "); - Bprint(bout, "acid: "); - if(yyparse() != 1) die(); restartio(); @@ -176,14 +184,15 @@ Lsym *s; List *f; - Bprint(bout, "\n"); - if(setjmp(err) == 0) callhook("dying"); - s = look("proclist"); - if(s && s->v->type == TLIST) { - for(f = s->v->l; f; f = f->next) - Bprint(bout, "echo kill > /proc/%d/ctl\n", (int)f->ival); + if(interactive){ + Bprint(bout, "\n"); + s = look("proclist"); + if(s && s->v->type == TLIST) { + for(f = s->v->l; f; f = f->next) + Bprint(bout, "echo kill > /proc/%d/ctl\n", (int)f->ival); + } } exits(0); } @@ -287,7 +296,8 @@ print("%s: (error) syminit: %r", argv0); return; } - print("%s:%s\n", s, fhdr.name); + if(interactive) + print("%s:%s\n", s, fhdr.name); if(mach->sbreg && lookup(0, mach->sbreg, &sym)) { mach->sb = sym.value;
Mon Dec 4 16:27:40 EST 2023
diff 73ffc757d57e3b84fe62d679425be6be209fcfac uncommitted --- a/sys/lib/acid/port +++ b/sys/lib/acid/port @@ -505,9 +505,7 @@ setproc(pid); } -_asmlines = 30; - -defn asm(addr) +defn _asm(addr, lim) { local bound; @@ -514,7 +512,14 @@ bound = fnbound(addr); addr = fmt(addr, 'i'); + oldln = -1; loop 1,_asmlines do { + newln = pcline(addr); + if oldln != newln then { + oldln = newln; + print("\t// "); + line(addr); + } print(fmt(addr, 'a'), " ", fmt(addr, 'A')); print("\t", @addr++, "\n"); if bound != {} && addr >= bound[1] then { @@ -523,6 +528,16 @@ } } lasmaddr = addr; +} + +defn asm(addr) +{ + _asm(addr, 30); +} + +defn asmx(addr) +{ + _asm(addr, 0x80000000); } defn casm()
Mon Dec 4 12:26:02 EST 2023
ffs
Mon Dec 4 12:18:16 EST 2023
fsd
Sun Dec 3 15:16:03 EST 2023
test