summaryrefslogtreecommitdiff
path: root/sys/src/cmd/5e/5e.c
diff options
context:
space:
mode:
authoraiju <aiju@phicode.de>2011-06-16 17:49:24 +0200
committeraiju <aiju@phicode.de>2011-06-16 17:49:24 +0200
commit2acb5433d8008012d7208a7bfcb9c6a1544f218f (patch)
tree19f0c7afc013113c5f8b3de005b2245e33ce2f5e /sys/src/cmd/5e/5e.c
parentfcf30f314b4c4157b536647a09a214576711ad16 (diff)
added 5e (not finished)
Diffstat (limited to 'sys/src/cmd/5e/5e.c')
-rw-r--r--sys/src/cmd/5e/5e.c76
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();
+ }
+}