X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fnestedvm%2FUnixRuntime.java;h=bee9c24499209d5db26dffff0d1d3463250e4861;hb=f4a70cc5b4dc1a175ba741a4eac3a52985b1b322;hp=491a486836340cc391bda8f31a19d04b95fde883;hpb=a70d242f5b4d0c7bc97e305cd5825a85a4d5bda6;p=nestedvm.git diff --git a/src/org/ibex/nestedvm/UnixRuntime.java b/src/org/ibex/nestedvm/UnixRuntime.java index 491a486..bee9c24 100644 --- a/src/org/ibex/nestedvm/UnixRuntime.java +++ b/src/org/ibex/nestedvm/UnixRuntime.java @@ -1,6 +1,8 @@ package org.ibex.nestedvm; import org.ibex.nestedvm.util.*; +// FEATURE: This is ugly, this stuff needs to be in org.ibex.util or something +import org.ibex.classgen.util.Sort; import java.io.*; import java.util.*; import java.net.*; @@ -533,7 +535,7 @@ public abstract class UnixRuntime extends Runtime implements Cloneable { return n; } - // FIXME: UDP is totally broken + // FEATURE: UDP is totally broken static class SocketFD extends FD { public static final int TYPE_STREAM = 0; @@ -913,54 +915,6 @@ public abstract class UnixRuntime extends Runtime implements Cloneable { } return 0; } - - - /*public int sys_opensocket(int cstring, int port) throws FaultException, ErrnoException { - String hostname = cstring(cstring); - try { - FD fd = new SocketFD(new Socket(hostname,port)); - int n = addFD(fd); - if(n == -1) fd.close(); - return n; - } catch(IOException e) { - return -EIO; - } - } - - private static class ListenSocketFD extends FD { - ServerSocket s; - public ListenSocketFD(ServerSocket s) { this.s = s; } - public int flags() { return 0; } - // FEATURE: What should these be? - public FStat _fstat() { return new FStat(); } - public void _close() { try { s.close(); } catch(IOException e) { } } - } - - public int sys_listensocket(int port) { - try { - ListenSocketFD fd = new ListenSocketFD(new ServerSocket(port)); - int n = addFD(fd); - if(n == -1) fd.close(); - return n; - } catch(IOException e) { - return -EIO; - } - } - - public int sys_accept(int fdn) { - if(fdn < 0 || fdn >= OPEN_MAX) return -EBADFD; - if(fds[fdn] == null) return -EBADFD; - if(!(fds[fdn] instanceof ListenSocketFD)) return -EBADFD; - try { - ServerSocket s = ((ListenSocketFD)fds[fdn]).s; - SocketFD fd = new SocketFD(s.accept()); - int n = addFD(fd); - if(n == -1) fd.close(); - return n; - } catch(IOException e) { - return -EIO; - } - }*/ // FEATURE: Run through the fork/wait stuff one more time public static class GlobalState { @@ -1051,6 +1005,7 @@ public abstract class UnixRuntime extends Runtime implements Cloneable { mps = newMPS; } + // FEATURE: We shouldn't need to special case the root dir, it should work in the MP array private Object fsop(int op, UnixRuntime r, String normalizedPath, int arg1, int arg2) throws ErrnoException { int pl = normalizedPath.length(); if(pl != 0) { @@ -1066,6 +1021,7 @@ public abstract class UnixRuntime extends Runtime implements Cloneable { return dispatch(root,op,r,normalizedPath,arg1,arg2); } + // FEATURE: move this into FS so some filesystem can override it directly (devfs) private static Object dispatch(FS fs, int op, UnixRuntime r, String path, int arg1, int arg2) throws ErrnoException { switch(op) { case OPEN: return fs.open(r,path,arg1,arg2); @@ -1092,7 +1048,7 @@ public abstract class UnixRuntime extends Runtime implements Cloneable { } public synchronized Object exec(UnixRuntime r, String path) throws ErrnoException { - // FIXME: Hideous hack to make a standalone busybox possible + // HACK: Hideous hack to make a standalone busybox possible if(path.equals("bin/busybox") && Boolean.valueOf(getSystemProperty("nestedvm.busyboxhack")).booleanValue()) return r.getClass(); FStat fstat = stat(r,path); @@ -1164,7 +1120,7 @@ public abstract class UnixRuntime extends Runtime implements Cloneable { // its an elf binary try { s.seek(0); - Class c = RuntimeCompiler.compile(s); + Class c = RuntimeCompiler.compile(s,"unixruntime"); //System.err.println("Compile succeeded: " + c); ent = new CacheEnt(mtime,size,c); } catch(Compiler.Exn e) {