X-Git-Url: http://git.megacz.com/?p=nestedvm.git;a=blobdiff_plain;f=src%2Forg%2Fibex%2Fnestedvm%2FUnixRuntime.java;h=c88cf241746e90e71fdae72ff6132b647ff21ba4;hp=0ce093bf68aa7dd48910e6fd26e19492266c0986;hb=79be771d6242d4ed6831d737c701587e87528572;hpb=beabe49c6d19528ab3d27081c7af4fd9fb74027b diff --git a/src/org/ibex/nestedvm/UnixRuntime.java b/src/org/ibex/nestedvm/UnixRuntime.java index 0ce093b..c88cf24 100644 --- a/src/org/ibex/nestedvm/UnixRuntime.java +++ b/src/org/ibex/nestedvm/UnixRuntime.java @@ -169,7 +169,12 @@ public abstract class UnixRuntime extends Runtime implements Cloneable { case SYS_select: return sys_select(a,b,c,d,e); case SYS_access: return sys_access(a,b); case SYS_realpath: return sys_realpath(a,b); - + case SYS_chown: return sys_chown(a,b,c); + case SYS_lchown: return sys_chown(a,b,c); + case SYS_fchown: return sys_fchown(a,b,c); + case SYS_chmod: return sys_chmod(a,b,c); + case SYS_fchmod: return sys_fchmod(a,b,c); + default: return super._syscall(syscall,a,b,c,d,e,f); } } @@ -182,10 +187,26 @@ public abstract class UnixRuntime extends Runtime implements Cloneable { return parent == null ? 1 : parent.pid; } + private int sys_chown(int fileAddr, int uid, int gid) { + return 0; + } + private int sys_lchown(int fileAddr, int uid, int gid) { + return 0; + } + private int sys_fchown(int fd, int uid, int gid) { + return 0; + } + private int sys_chmod(int fileAddr, int uid, int gid) { + return 0; + } + private int sys_fchmod(int fd, int uid, int gid) { + return 0; + } + - private int sys_access(int cstring, int mode) { + private int sys_access(int cstring, int mode) throws ErrnoException, ReadFaultException { // FEATURE: sys_access - return 0; + return gs.stat(this,cstring(cstring)) == null ? -ENOENT : 0; } private int sys_realpath(int inAddr, int outAddr) throws FaultException { @@ -387,7 +408,7 @@ public abstract class UnixRuntime extends Runtime implements Cloneable { static { Method m; try { - m = Class.forName("org.ibex.nestedvm.RuntimeCompiler").getMethod("compile",new Class[]{Seekable.class,String.class}); + m = Class.forName("org.ibex.nestedvm.RuntimeCompiler").getMethod("compile",new Class[]{Seekable.class,String.class,String.class}); } catch(NoSuchMethodException e) { m = null; } catch(ClassNotFoundException e) { @@ -396,14 +417,14 @@ public abstract class UnixRuntime extends Runtime implements Cloneable { runtimeCompilerCompile = m; } - public Class runtimeCompile(Seekable s) throws IOException { + public Class runtimeCompile(Seekable s, String sourceName) throws IOException { if(runtimeCompilerCompile == null) { if(STDERR_DIAG) System.err.println("WARNING: Exec attempted but RuntimeCompiler not found!"); return null; } try { - return (Class) runtimeCompilerCompile.invoke(null,new Object[]{s,"unixruntime"}); + return (Class) runtimeCompilerCompile.invoke(null,new Object[]{s,"unixruntime,maxinsnpermethod=256,lessconstants",sourceName}); } catch(IllegalAccessException e) { e.printStackTrace(); return null; @@ -463,7 +484,9 @@ public abstract class UnixRuntime extends Runtime implements Cloneable { if(n < 4) s.tryReadFully(buf,n,4-n); if(buf[1] != 'E' || buf[2] != 'L' || buf[3] != 'F') return -ENOEXEC; s.seek(0); - Class c = runtimeCompile(s); + if(STDERR_DIAG) System.err.println("Running RuntimeCompiler for " + path); + Class c = runtimeCompile(s,path); + if(STDERR_DIAG) System.err.println("RuntimeCompiler finished for " + path); if(c == null) throw new ErrnoException(ENOEXEC); gs.execCache.put(path,new GlobalState.CacheEnt(mtime,size,c)); return execClass(c,argv,envp); @@ -1430,7 +1453,7 @@ public abstract class UnixRuntime extends Runtime implements Cloneable { private static File getParentFile(File f) { String p = f.getParent(); - return p == null ? null : new File(f,p); + return p == null ? null : new File(p); } public class HostDirFD extends DirFD {