diff options
author | aiju <aiju@phicode.de> | 2011-06-16 17:49:24 +0200 |
---|---|---|
committer | aiju <aiju@phicode.de> | 2011-06-16 17:49:24 +0200 |
commit | 2acb5433d8008012d7208a7bfcb9c6a1544f218f (patch) | |
tree | 19f0c7afc013113c5f8b3de005b2245e33ce2f5e /sys/src/cmd/5e/5e.c | |
parent | fcf30f314b4c4157b536647a09a214576711ad16 (diff) |
added 5e (not finished)
Diffstat (limited to 'sys/src/cmd/5e/5e.c')
-rw-r--r-- | sys/src/cmd/5e/5e.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/sys/src/cmd/5e/5e.c b/sys/src/cmd/5e/5e.c new file mode 100644 index 000000000..3aac578d1 --- /dev/null +++ b/sys/src/cmd/5e/5e.c @@ -0,0 +1,76 @@ +#include <u.h> +#include <libc.h> +#include <thread.h> +#include "dat.h" +#include "fns.h" + +Process **PP; + +static int nflag; + +void +dump(void) +{ + int i; + + for(i = 0; i < 16; i++) { + print("R%2d %.8ux", i, P->R[i]); + if((i % 4) == 3) print("\n"); + else print("\t"); + } +} + +static void +adjustns(void) +{ + if(bind("/arm/bin", "/bin", MREPL) < 0) + sysfatal("bind: %r"); + if(bind("/rc/bin", "/bin", MAFTER) < 0) + sysfatal("bind: %r"); + putenv("cputype", "arm"); + putenv("objtype", "arm"); +} + +void +cleanup(void) +{ + if(P == nil) + return; + + freesegs(); + fddecref(P->fd); + free(P); +} + +static void +usage(void) +{ + fprint(2, "usage: 5e [ -n ] text [ args ]\n"); + exits(nil); +} + +void +main(int argc, char **argv) +{ + ARGBEGIN { + case 'n': nflag++; break; + default: usage(); + } ARGEND; + if(argc < 1) + usage(); + if(_nprivates < 1) + sysfatal("we don't have privates"); + if(rfork(RFREND | RFNAMEG | RFENVG) < 0) + sysfatal("rfork: %r"); + atexit(cleanup); + if(nflag) + adjustns(); + initproc(); + if(loadtext(argv[0], argc, argv) < 0) + sysfatal("%r"); + for(;;) { + if(ultraverbose) + dump(); + step(); + } +} |