use option unixruntime for runtime compiler
[nestedvm.git] / src / org / ibex / nestedvm / UnixRuntime.java
index a4b1991..bee9c24 100644 (file)
@@ -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) {
@@ -1059,13 +1014,14 @@ public abstract class UnixRuntime extends Runtime implements Cloneable {
                 for(int i=0;i<list.length;i++) {
                     MP mp = list[i];
                     int mpl = mp.path.length();
-                    if(normalizedPath.startsWith(mp.path) && (pl == mpl || (pl < mpl && normalizedPath.charAt(mpl) == '/')))
+                    if(normalizedPath.startsWith(mp.path) && (pl == mpl || normalizedPath.charAt(mpl) == '/'))
                         return dispatch(mp.fs,op,r,pl == mpl ? "" : normalizedPath.substring(mpl+1),arg1,arg2);
                 }
             }
             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) {
@@ -1517,7 +1473,7 @@ public abstract class UnixRuntime extends Runtime implements Cloneable {
             if(path.startsWith("fd/")) {
                 int n;
                 try {
-                    n = Integer.parseInt(path.substring(4));
+                    n = Integer.parseInt(path.substring(3));
                 } catch(NumberFormatException e) {
                     return null;
                 }