8 #define ODIRLEN 116 /* compatibility; used in _stat etc. */
9 #define OERRLEN 64 /* compatibility; used in _stat etc. */
14 #include "/sys/src/libc/9syscall/sys.h"
28 [_FSESSION] "_Fsession",
49 [SEGATTACH] "Segattach",
50 [SEGDETACH] "Segdetach",
52 [SEGFLUSH] "Segflush",
53 [RENDEZVOUS] "Rendezvous",
57 [FVERSION] "Fversion",
71 Bprint(bioout, "no system call %s\n", sysctab[reg.r[1]]);
80 str = getmem_w(reg.r[13]+4);
82 itrace("errstr(0x%lux)", str);
84 memio(errbuf, str, OERRLEN, MemWrite);
85 strcpy(errbuf, "no error");
96 str = getmem_w(reg.r[13]+4);
97 n = getmem_w(reg.r[13]+8);
99 itrace("errstr(0x%lux, 0x%lux)", str, n);
101 if(n > strlen(errbuf)+1)
102 n = strlen(errbuf)+1;
103 memio(errbuf, str, n, MemWrite);
104 strcpy(errbuf, "no error");
111 ulong pname, pold, flags;
112 char name[1024], old[1024];
115 pname = getmem_w(reg.r[13]+4);
116 pold = getmem_w(reg.r[13]+8);
117 flags = getmem_w(reg.r[13]+12);
118 memio(name, pname, sizeof(name), MemReadstring);
119 memio(old, pold, sizeof(old), MemReadstring);
121 itrace("bind(0x%lux='%s', 0x%lux='%s', 0x%lux)", name, name, old, old, flags);
123 n = bind(name, old, flags);
125 errstr(errbuf, sizeof errbuf);
138 fd = getmem_w(reg.r[13]+4);
139 str = getmem_w(reg.r[13]+8);
140 n = getmem_w(reg.r[13]+12);
142 itrace("fd2path(0x%lux, 0x%lux, 0x%lux)", fd, str, n);
145 strcpy(errbuf, "buffer too big");
148 n = fd2path(fd, buf, sizeof buf);
150 errstr(buf, sizeof buf);
152 memio(errbuf, str, n, MemWrite);
164 name = getmem_w(reg.r[13]+4);
165 memio(file, name, sizeof(file), MemReadstring);
167 itrace("chdir(0x%lux='%s', 0x%lux)", name, file);
171 errstr(errbuf, sizeof errbuf);
182 fd = getmem_w(reg.r[13]+4);
184 itrace("close(%d)", fd);
188 errstr(errbuf, sizeof errbuf);
198 oldfd = getmem_w(reg.r[13]+4);
199 newfd = getmem_w(reg.r[13]+8);
201 itrace("dup(%d, %d)", oldfd, newfd);
203 n = dup(oldfd, newfd);
205 errstr(errbuf, sizeof errbuf);
215 str = getmem_w(reg.r[13]+4);
217 itrace("exits(0x%lux)", str);
221 memio(buf, str, sizeof buf, MemRead);
222 Bprint(bioout, "exits(%s)\n", buf);
225 Bprint(bioout, "exits(0)\n");
235 name = getmem_w(reg.r[13]+4);
236 mode = getmem_w(reg.r[13]+8);
237 memio(file, name, sizeof(file), MemReadstring);
239 n = open(file, mode);
241 errstr(errbuf, sizeof errbuf);
244 itrace("open(0x%lux='%s', 0x%lux) = %d", name, file, mode, n);
251 sysread(vlong offset)
258 fd = getmem_w(reg.r[13]+4);
259 a = getmem_w(reg.r[13]+8);
260 size = getmem_w(reg.r[13]+12);
280 n = pread(fd, buf, size, offset);
283 errstr(errbuf, sizeof errbuf);
285 memio(buf, a, n, MemWrite);
288 itrace("read(%d, 0x%lux, %d, 0x%llx) = %d", fd, a, size, offset, n);
303 sysread(getmem_v(reg.r[13]+16));
314 retp = getmem_w(reg.r[13]+4);
315 fd = getmem_w(reg.r[13]+8);
316 v = getmem_v(reg.r[13]+16);
317 mode = getmem_w(reg.r[13]+20);
319 itrace("seek(%d, %lld, %d)", fd, v, mode);
321 v = seek(fd, v, mode);
323 errstr(errbuf, sizeof errbuf);
334 fd = getmem_w(reg.r[13]+4);
335 off = getmem_w(reg.r[13]+8);
336 mode = getmem_w(reg.r[13]+12);
338 itrace("seek(%d, %lud, %d)", fd, off, mode);
340 n = seek(fd, off, mode);
342 errstr(errbuf, sizeof errbuf);
353 len = getmem_w(reg.r[13]+4);
355 itrace("sleep(%d)", len);
359 errstr(errbuf, sizeof errbuf);
370 extern int _stat(char*, char*); /* old system call */
373 name = getmem_w(reg.r[13]+4);
374 edir = getmem_w(reg.r[13]+8);
375 memio(nambuf, name, sizeof(nambuf), MemReadstring);
377 itrace("stat(0x%lux='%s', 0x%lux)", name, nambuf, edir);
379 n = _stat(nambuf, buf);
381 errstr(errbuf, sizeof errbuf);
383 memio(buf, edir, ODIRLEN, MemWrite);
396 name = getmem_w(reg.r[13]+4);
397 edir = getmem_w(reg.r[13]+8);
398 n = getmem_w(reg.r[13]+12);
399 memio(nambuf, name, sizeof(nambuf), MemReadstring);
401 itrace("stat(0x%lux='%s', 0x%lux, 0x%lux)", name, nambuf, edir, n);
403 errstr(errbuf, sizeof errbuf);
405 n = stat(nambuf, buf, n);
407 errstr(errbuf, sizeof errbuf);
409 memio((char*)buf, edir, n, MemWrite);
418 extern int _fstat(int, char*); /* old system call */
422 fd = getmem_w(reg.r[13]+4);
423 edir = getmem_w(reg.r[13]+8);
425 itrace("fstat(%d, 0x%lux)", fd, edir);
429 errstr(errbuf, sizeof errbuf);
431 memio(buf, edir, ODIRLEN, MemWrite);
443 fd = getmem_w(reg.r[13]+4);
444 edir = getmem_w(reg.r[13]+8);
445 n = getmem_w(reg.r[13]+12);
447 itrace("fstat(%d, 0x%lux, 0x%lux)", fd, edir, n);
451 strcpy(errbuf, "stat buffer too big");
454 n = fstat(fd, buf, n);
456 errstr(errbuf, sizeof errbuf);
458 memio((char*)buf, edir, n, MemWrite);
463 syswrite(vlong offset)
470 fd = getmem_w(reg.r[13]+4);
471 a = getmem_w(reg.r[13]+8);
472 size = getmem_w(reg.r[13]+12);
475 buf = memio(0, a, size, MemRead);
476 n = pwrite(fd, buf, size, offset);
478 errstr(errbuf, sizeof errbuf);
481 itrace("write(%d, %lux, %d, 0x%llx) = %d", fd, a, size, offset, n);
497 syswrite(getmem_v(reg.r[13]+16));
506 fd = getmem_w(reg.r[13]+4);
508 itrace("pipe(%lux)", fd);
512 errstr(errbuf, sizeof errbuf);
515 putmem_w(fd+4, p[1]);
525 ulong mode, name, perm;
527 name = getmem_w(reg.r[13]+4);
528 mode = getmem_w(reg.r[13]+8);
529 perm = getmem_w(reg.r[13]+12);
530 memio(file, name, sizeof(file), MemReadstring);
532 itrace("create(0x%lux='%s', 0x%lux, 0x%lux)", name, file, mode, perm);
534 n = create(file, mode, perm);
536 errstr(errbuf, sizeof errbuf);
544 ulong addr, osize, nsize;
547 addr = getmem_w(reg.r[13]+4);
549 itrace("brk_(0x%lux)", addr);
552 if(addr < memory.seg[Data].base+datasize) {
553 strcpy(errbuf, "address below segment");
556 if(addr > memory.seg[Stack].base) {
557 strcpy(errbuf, "segment too big");
560 s = &memory.seg[Bss];
562 osize = ((s->end-s->base)/BY2PG)*sizeof(uchar*);
563 addr = ((addr)+(BY2PG-1))&~(BY2PG-1);
565 nsize = ((s->end-s->base)/BY2PG)*sizeof(uchar*);
566 s->table = erealloc(s->table, osize, nsize);
579 name = getmem_w(reg.r[13]+4);
580 memio(nambuf, name, sizeof(nambuf), MemReadstring);
582 itrace("remove(0x%lux='%s')", name, nambuf);
586 errstr(errbuf, sizeof errbuf);
593 nofunc = getmem_w(reg.r[13]+4);
595 itrace("notify(0x%lux)\n", nofunc);
603 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
609 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
615 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
621 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
627 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
633 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
639 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
645 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
651 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
657 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
663 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
669 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
675 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
681 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
687 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
693 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
699 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
705 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
711 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
717 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
723 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
729 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
735 Bprint(bioout, "No system call %s\n", sysctab[reg.r[REGARG]]);
739 void (*systab[])(void) =
742 [_ERRSTR] sys_errstr,
750 [_FSESSION] sys_fsession,
764 [FD2PATH] sysfd2path,
768 [_FWSTAT] sys_fwstat,
771 [SEGATTACH] syssegattach,
772 [SEGDETACH] syssegdetach,
773 [SEGFREE] syssegfree,
774 [SEGFLUSH] syssegflush,
775 [RENDEZVOUS] sysrendezvous,
776 [UNMOUNT] sysunmount,
779 [FVERSION] sysfversion,
795 call = reg.r[REGARG];
796 if(call < 0 || call >= nelem(systab) || systab[call] == nil) {
797 Bprint(bioout, "bad system call %d (%#ux)\n", call, call);
804 itrace("SWI\t%s", sysctab[call]);