From 1e8bbc0228b05f14e07752cab60a274a11a22431 Mon Sep 17 00:00:00 2001 From: brian Date: Fri, 16 Jul 2004 12:58:39 -0700 Subject: [PATCH 01/16] fix amd64 bug in gcc darcs-hash:20040716195839-24bed-0ce878574bc16602315f99cbfb82c53112d3c784.gz --- upstream/Makefile | 4 ++-- upstream/patches/gcc-64bitclean.patch | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 upstream/patches/gcc-64bitclean.patch diff --git a/upstream/Makefile b/upstream/Makefile index 5885009..930f219 100644 --- a/upstream/Makefile +++ b/upstream/Makefile @@ -6,7 +6,7 @@ url_gcc-core = http://mirrors.rcn.net/pub/sourceware/gcc/releases/gcc-$(version_ url_gcc-c++ = http://mirrors.rcn.net/pub/sourceware/gcc/releases/gcc-$(version_gcc)/gcc-g++-$(version_gcc).tar.gz url_gcc-g77 = http://mirrors.rcn.net/pub/sourceware/gcc/releases/gcc-$(version_gcc)/gcc-g77-$(version_gcc).tar.gz -patches_gcc = gcc-fixes.patch gcc-fdata-sections-bss.patch +patches_gcc = gcc-fixes.patch gcc-fdata-sections-bss.patch gcc-64bitclean.patch configure_gcc = --target=mips-unknown-elf --disable-threads --with-gnu-ld --with-gnu-as --with-newlib=yes --enable-sjlj-exceptions --enable-languages="c" configure_gcc_step2 = $(configure_gcc) --enable-languages="c,c++,f77" @@ -139,7 +139,7 @@ tasks/patch_%: tasks/extract_% if [ -e $@ ]; then echo "Error: $@ exists. something isn't right"; false; else true; fi cd build/$*-$(version_$*) && \ for p in $(patches_$*) end; do \ - [ "$$p" = "end" ] || $(PATCH) -p0 < ../../patches/$$p || exit 1; \ + [ "$$p" = "end" ] || $(PATCH) -p0 -l < ../../patches/$$p || exit 1; \ done touch $@ diff --git a/upstream/patches/gcc-64bitclean.patch b/upstream/patches/gcc-64bitclean.patch new file mode 100644 index 0000000..b48d98d --- /dev/null +++ b/upstream/patches/gcc-64bitclean.patch @@ -0,0 +1,12 @@ +--- ../gcc-3.3.3.orig/gcc/config/mips/mips.c 2004-07-16 +12:58:11.873718000 -0500 ++++ gcc/config/mips/mips.c 2004-07-16 14:41:44.477442899 -0500 +@@ -6731,7 +6731,7 @@ + if (regs_ever_live[regno] && !call_used_regs[regno]) + { + fp_reg_size += FP_INC * UNITS_PER_FPREG; +- fmask |= ((1 << FP_INC) - 1) << (regno - FP_REG_FIRST); ++ fmask |= ((1L << FP_INC) - 1L) << (regno - FP_REG_FIRST); + } + } + -- 1.7.10.4 From b5282b0a1a8ca5212c75623610be6d0483fd35bd Mon Sep 17 00:00:00 2001 From: adam Date: Tue, 4 Jan 2005 14:45:12 -0800 Subject: [PATCH 02/16] licensing update to APSL 2.0 darcs-hash:20050104224512-5007d-1b6eb29381e910553043df18ff6069794ca6a37e.gz --- src/org/ibex/nestedvm/ClassFileCompiler.java | 4 ++++ src/org/ibex/nestedvm/Compiler.java | 4 +++- src/org/ibex/nestedvm/Interpreter.java | 4 ++++ src/org/ibex/nestedvm/JavaSourceCompiler.java | 6 +++++- src/org/ibex/nestedvm/Registers.java | 4 ++++ src/org/ibex/nestedvm/Runtime.java | 4 ++++ src/org/ibex/nestedvm/RuntimeCompiler.java | 4 ++++ src/org/ibex/nestedvm/UnixRuntime.java | 4 ++++ src/org/ibex/nestedvm/util/ELF.java | 4 ++++ src/org/ibex/nestedvm/util/InodeCache.java | 4 ++++ src/org/ibex/nestedvm/util/Platform.java | 4 ++++ src/org/ibex/nestedvm/util/Seekable.java | 4 ++++ src/tests/CallTest.java | 4 ++++ src/tests/Echo.java | 4 ++++ src/tests/Env.java | 4 ++++ src/tests/FreeTypeDemo.java | 4 ++++ src/tests/GenericSpeedTest.java | 4 ++++ src/tests/MSPack.java | 4 ++++ src/tests/SpeedTest.java | 4 ++++ 19 files changed, 76 insertions(+), 2 deletions(-) diff --git a/src/org/ibex/nestedvm/ClassFileCompiler.java b/src/org/ibex/nestedvm/ClassFileCompiler.java index 47f7bed..6e67c80 100644 --- a/src/org/ibex/nestedvm/ClassFileCompiler.java +++ b/src/org/ibex/nestedvm/ClassFileCompiler.java @@ -1,3 +1,7 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + package org.ibex.nestedvm; import java.io.*; diff --git a/src/org/ibex/nestedvm/Compiler.java b/src/org/ibex/nestedvm/Compiler.java index c16a18f..23e25c2 100644 --- a/src/org/ibex/nestedvm/Compiler.java +++ b/src/org/ibex/nestedvm/Compiler.java @@ -1,4 +1,6 @@ -// Copyright 2003 Adam Megacz, see the COPYING file for licensing [GPL] +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. package org.ibex.nestedvm; diff --git a/src/org/ibex/nestedvm/Interpreter.java b/src/org/ibex/nestedvm/Interpreter.java index df9a111..d0e7379 100644 --- a/src/org/ibex/nestedvm/Interpreter.java +++ b/src/org/ibex/nestedvm/Interpreter.java @@ -1,3 +1,7 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + // Copyright 2003 Brian Alliet // Based on org.xwt.imp.MIPS by Adam Megacz // Portions Copyright 2003 Adam Megacz diff --git a/src/org/ibex/nestedvm/JavaSourceCompiler.java b/src/org/ibex/nestedvm/JavaSourceCompiler.java index 596e15f..64a7d4d 100644 --- a/src/org/ibex/nestedvm/JavaSourceCompiler.java +++ b/src/org/ibex/nestedvm/JavaSourceCompiler.java @@ -1,3 +1,7 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + package org.ibex.nestedvm; import java.util.*; @@ -920,4 +924,4 @@ public class JavaSourceCompiler extends Compiler { "f"+(r+1)+" = (int)(l >>> 32); f"+r+" = (int)l; }"; } } - \ No newline at end of file + diff --git a/src/org/ibex/nestedvm/Registers.java b/src/org/ibex/nestedvm/Registers.java index 1a885a2..a441af5 100644 --- a/src/org/ibex/nestedvm/Registers.java +++ b/src/org/ibex/nestedvm/Registers.java @@ -1,3 +1,7 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + package org.ibex.nestedvm; interface Registers { diff --git a/src/org/ibex/nestedvm/Runtime.java b/src/org/ibex/nestedvm/Runtime.java index 1065693..8b57737 100644 --- a/src/org/ibex/nestedvm/Runtime.java +++ b/src/org/ibex/nestedvm/Runtime.java @@ -1,3 +1,7 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + // Copyright 2003 Brian Alliet // Based on org.xwt.imp.MIPS by Adam Megacz // Portions Copyright 2003 Adam Megacz diff --git a/src/org/ibex/nestedvm/RuntimeCompiler.java b/src/org/ibex/nestedvm/RuntimeCompiler.java index 8443326..443c217 100644 --- a/src/org/ibex/nestedvm/RuntimeCompiler.java +++ b/src/org/ibex/nestedvm/RuntimeCompiler.java @@ -1,3 +1,7 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + package org.ibex.nestedvm; import java.io.*; diff --git a/src/org/ibex/nestedvm/UnixRuntime.java b/src/org/ibex/nestedvm/UnixRuntime.java index f5b8745..ac1b595 100644 --- a/src/org/ibex/nestedvm/UnixRuntime.java +++ b/src/org/ibex/nestedvm/UnixRuntime.java @@ -1,3 +1,7 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + package org.ibex.nestedvm; import org.ibex.nestedvm.util.*; diff --git a/src/org/ibex/nestedvm/util/ELF.java b/src/org/ibex/nestedvm/util/ELF.java index 36fc4eb..db990bb 100644 --- a/src/org/ibex/nestedvm/util/ELF.java +++ b/src/org/ibex/nestedvm/util/ELF.java @@ -1,3 +1,7 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + package org.ibex.nestedvm.util; import java.io.*; diff --git a/src/org/ibex/nestedvm/util/InodeCache.java b/src/org/ibex/nestedvm/util/InodeCache.java index a169d5f..02913de 100644 --- a/src/org/ibex/nestedvm/util/InodeCache.java +++ b/src/org/ibex/nestedvm/util/InodeCache.java @@ -1,3 +1,7 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + package org.ibex.nestedvm.util; // Based on the various org.xwt.util.* classes by Adam Megacz diff --git a/src/org/ibex/nestedvm/util/Platform.java b/src/org/ibex/nestedvm/util/Platform.java index f7eea1e..448cf45 100644 --- a/src/org/ibex/nestedvm/util/Platform.java +++ b/src/org/ibex/nestedvm/util/Platform.java @@ -1,3 +1,7 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + package org.ibex.nestedvm.util; import java.io.*; diff --git a/src/org/ibex/nestedvm/util/Seekable.java b/src/org/ibex/nestedvm/util/Seekable.java index 51c7a39..bc21a55 100644 --- a/src/org/ibex/nestedvm/util/Seekable.java +++ b/src/org/ibex/nestedvm/util/Seekable.java @@ -1,3 +1,7 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + package org.ibex.nestedvm.util; import java.io.*; diff --git a/src/tests/CallTest.java b/src/tests/CallTest.java index 95184ce..c6a92d6 100644 --- a/src/tests/CallTest.java +++ b/src/tests/CallTest.java @@ -1,3 +1,7 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + package tests; import org.ibex.nestedvm.Runtime; diff --git a/src/tests/Echo.java b/src/tests/Echo.java index 33ed2a6..399ff3c 100644 --- a/src/tests/Echo.java +++ b/src/tests/Echo.java @@ -1,3 +1,7 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + package tests; import java.net.*; diff --git a/src/tests/Env.java b/src/tests/Env.java index be64739..a22f6a8 100644 --- a/src/tests/Env.java +++ b/src/tests/Env.java @@ -1,3 +1,7 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + package tests; import org.ibex.nestedvm.Runtime; diff --git a/src/tests/FreeTypeDemo.java b/src/tests/FreeTypeDemo.java index 6749728..5f116c8 100644 --- a/src/tests/FreeTypeDemo.java +++ b/src/tests/FreeTypeDemo.java @@ -1,3 +1,7 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + package tests; import org.ibex.nestedvm.Runtime; diff --git a/src/tests/GenericSpeedTest.java b/src/tests/GenericSpeedTest.java index a527f1e..f636e75 100644 --- a/src/tests/GenericSpeedTest.java +++ b/src/tests/GenericSpeedTest.java @@ -1,3 +1,7 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + package tests; import java.lang.reflect.*; diff --git a/src/tests/MSPack.java b/src/tests/MSPack.java index c154703..0c4e87f 100644 --- a/src/tests/MSPack.java +++ b/src/tests/MSPack.java @@ -1,3 +1,7 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + package tests; import org.ibex.nestedvm.Runtime; diff --git a/src/tests/SpeedTest.java b/src/tests/SpeedTest.java index 35941c1..40d3fd6 100644 --- a/src/tests/SpeedTest.java +++ b/src/tests/SpeedTest.java @@ -1,3 +1,7 @@ +// Copyright 2000-2005 the Contributors, as shown in the revision logs. +// Licensed under the Apache Public Source License 2.0 ("the License"). +// You may not use this file except in compliance with the License. + package tests; import org.ibex.nestedvm.Runtime; -- 1.7.10.4 From bca50e30043fa5ec16c58bbc42fe527d9d425351 Mon Sep 17 00:00:00 2001 From: brian Date: Wed, 4 Aug 2004 02:27:40 -0700 Subject: [PATCH 03/16] fix for really stupid O_EXCL bug darcs-hash:20040804092740-24bed-9ac3b6c0b50656f8b0b80e64b61792b688794c34.gz --- src/org/ibex/nestedvm/Runtime.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/ibex/nestedvm/Runtime.java b/src/org/ibex/nestedvm/Runtime.java index 8b57737..af84619 100644 --- a/src/org/ibex/nestedvm/Runtime.java +++ b/src/org/ibex/nestedvm/Runtime.java @@ -740,7 +740,7 @@ public abstract class Runtime implements UsermodeConstants,Registers,Cloneable { if((flags & (O_EXCL|O_CREAT)) == (O_EXCL|O_CREAT)) { try { - if(Platform.atomicCreateFile(f)) throw new ErrnoException(EEXIST); + if(!Platform.atomicCreateFile(f)) throw new ErrnoException(EEXIST); } catch(IOException e) { throw new ErrnoException(EIO); } -- 1.7.10.4 From beabe49c6d19528ab3d27081c7af4fd9fb74027b Mon Sep 17 00:00:00 2001 From: brian Date: Wed, 4 Aug 2004 02:28:14 -0700 Subject: [PATCH 04/16] few more syscalls darcs-hash:20040804092814-24bed-16412bd4aa077942f5c5e1aa4a3ee9ef409b34b9.gz --- src/org/ibex/nestedvm/UnixRuntime.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/org/ibex/nestedvm/UnixRuntime.java b/src/org/ibex/nestedvm/UnixRuntime.java index ac1b595..0ce093b 100644 --- a/src/org/ibex/nestedvm/UnixRuntime.java +++ b/src/org/ibex/nestedvm/UnixRuntime.java @@ -167,7 +167,9 @@ public abstract class UnixRuntime extends Runtime implements Cloneable { case SYS_sendto: return sys_sendto(a,b,c,d,e,f); case SYS_recvfrom: return sys_recvfrom(a,b,c,d,e,f); 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); + default: return super._syscall(syscall,a,b,c,d,e,f); } } @@ -179,6 +181,20 @@ public abstract class UnixRuntime extends Runtime implements Cloneable { private int sys_getppid() { return parent == null ? 1 : parent.pid; } + + + private int sys_access(int cstring, int mode) { + // FEATURE: sys_access + return 0; + } + + private int sys_realpath(int inAddr, int outAddr) throws FaultException { + String s = normalizePath(cstring(inAddr)); + byte[] b = getNullTerminatedBytes(s); + if(b.length > PATH_MAX) return -ERANGE; + copyout(b,outAddr,b.length); + return 0; + } // FEATURE: Signal handling // check flag only on backwards jumps to basic blocks without compulsatory checks -- 1.7.10.4 From 6b824fa9a85f2f58fcb938ea5924df0c73cea43c Mon Sep 17 00:00:00 2001 From: brian Date: Wed, 4 Aug 2004 04:49:45 -0700 Subject: [PATCH 05/16] bug in getParentFile() darcs-hash:20040804114945-24bed-dba542c53c9ccf5d5cc3f45d6de7b42ad0684818.gz --- src/org/ibex/nestedvm/UnixRuntime.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/org/ibex/nestedvm/UnixRuntime.java b/src/org/ibex/nestedvm/UnixRuntime.java index 0ce093b..f156603 100644 --- a/src/org/ibex/nestedvm/UnixRuntime.java +++ b/src/org/ibex/nestedvm/UnixRuntime.java @@ -1430,7 +1430,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 { -- 1.7.10.4 From 8197fc63ffd1d640b08d3117a13ce9d19d7336e9 Mon Sep 17 00:00:00 2001 From: brian Date: Wed, 4 Aug 2004 04:50:11 -0700 Subject: [PATCH 06/16] more syscall stubs darcs-hash:20040804115011-24bed-8f1f28bdf2f433d9eba667b3e0971623d8f74bd8.gz --- src/org/ibex/nestedvm/UnixRuntime.java | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/org/ibex/nestedvm/UnixRuntime.java b/src/org/ibex/nestedvm/UnixRuntime.java index f156603..71368d8 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 { -- 1.7.10.4 From 79be771d6242d4ed6831d737c701587e87528572 Mon Sep 17 00:00:00 2001 From: brian Date: Wed, 4 Aug 2004 04:51:24 -0700 Subject: [PATCH 07/16] include sourcename in runtime compiled binaries, more gc friendly runtime compiler darcs-hash:20040804115124-24bed-86aa2c5662d477ae2100ff0908dc3daef5af232e.gz --- src/org/ibex/nestedvm/RuntimeCompiler.java | 27 +++++++++------------------ src/org/ibex/nestedvm/UnixRuntime.java | 10 ++++++---- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/src/org/ibex/nestedvm/RuntimeCompiler.java b/src/org/ibex/nestedvm/RuntimeCompiler.java index 443c217..94c7c1b 100644 --- a/src/org/ibex/nestedvm/RuntimeCompiler.java +++ b/src/org/ibex/nestedvm/RuntimeCompiler.java @@ -10,39 +10,30 @@ import org.ibex.nestedvm.util.*; // This need a lot of work to support binaries spanned across many classes public class RuntimeCompiler { - private static SingleClassLoader singleClassLoader; - private static int nextID; - public static Class compile(Seekable data) throws IOException, Compiler.Exn { return compile(data,null); } - public static Class compile(Seekable data, String extraoptions) throws IOException, Compiler.Exn { - int id; - synchronized(RuntimeCompiler.class) { - if(nextID == 32 || singleClassLoader == null) { - singleClassLoader = new SingleClassLoader(); - nextID = 0; - } - id = nextID++; - } - String className = "nestedvm.runtimecompiled_" + id; - System.err.println("RuntimeCompiler: Building " + className); + public static Class compile(Seekable data, String extraoptions) throws IOException, Compiler.Exn { return compile(data,extraoptions,null); } + + public static Class compile(Seekable data, String extraoptions, String sourceName) throws IOException, Compiler.Exn { + String className = "nestedvm.runtimecompiled"; byte[] bytecode; try { - bytecode = runCompiler(data,className,extraoptions,null); + bytecode = runCompiler(data,className,extraoptions,sourceName,null); } catch(Compiler.Exn e) { if(e.getMessage() != null || e.getMessage().indexOf("constant pool full") != -1) - bytecode = runCompiler(data,className,extraoptions,"lessconstants"); + bytecode = runCompiler(data,className,extraoptions,sourceName,"lessconstants"); else throw e; } - return singleClassLoader.fromBytes(className,bytecode); + return new SingleClassLoader().fromBytes(className,bytecode); } - private static byte[] runCompiler(Seekable data, String name, String options, String moreOptions) throws IOException, Compiler.Exn { + private static byte[] runCompiler(Seekable data, String name, String options, String sourceName, String moreOptions) throws IOException, Compiler.Exn { ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { ClassFileCompiler c = new ClassFileCompiler(data,name,baos); c.parseOptions("nosupportcall,maxinsnpermethod=256"); + c.setSource(sourceName); if(options != null) c.parseOptions(options); if(moreOptions != null) c.parseOptions(moreOptions); c.go(); diff --git a/src/org/ibex/nestedvm/UnixRuntime.java b/src/org/ibex/nestedvm/UnixRuntime.java index 71368d8..c88cf24 100644 --- a/src/org/ibex/nestedvm/UnixRuntime.java +++ b/src/org/ibex/nestedvm/UnixRuntime.java @@ -408,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) { @@ -417,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; @@ -484,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); -- 1.7.10.4 From e31fa57da728fa1c76760af23e62bd312a50e4df Mon Sep 17 00:00:00 2001 From: brian Date: Wed, 4 Aug 2004 04:51:58 -0700 Subject: [PATCH 08/16] cleanup elf stuff darcs-hash:20040804115158-24bed-0f05f0d6da5572f3b160883b143ea33fe72d0248.gz --- src/org/ibex/nestedvm/Compiler.java | 8 ++-- src/org/ibex/nestedvm/Interpreter.java | 8 ++-- src/org/ibex/nestedvm/Runtime.java | 3 +- src/org/ibex/nestedvm/util/ELF.java | 64 +++++++++++++++++--------------- 4 files changed, 43 insertions(+), 40 deletions(-) diff --git a/src/org/ibex/nestedvm/Compiler.java b/src/org/ibex/nestedvm/Compiler.java index 23e25c2..03515ad 100644 --- a/src/org/ibex/nestedvm/Compiler.java +++ b/src/org/ibex/nestedvm/Compiler.java @@ -194,9 +194,9 @@ public abstract class Compiler implements Registers { this.fullClassName = fullClassName; elf = new ELF(binary); - if(elf.header.type != ELF.ELFHeader.ET_EXEC) throw new IOException("Binary is not an executable"); - if(elf.header.machine != ELF.ELFHeader.EM_MIPS) throw new IOException("Binary is not for the MIPS I Architecture"); - if(elf.ident.data != ELF.ELFIdent.ELFDATA2MSB) throw new IOException("Binary is not big endian"); + if(elf.header.type != ELF.ET_EXEC) throw new IOException("Binary is not an executable"); + if(elf.header.machine != ELF.EM_MIPS) throw new IOException("Binary is not for the MIPS I Architecture"); + if(elf.ident.data != ELF.ELFDATA2MSB) throw new IOException("Binary is not big endian"); } abstract void _go() throws Exn, IOException; @@ -251,7 +251,7 @@ public abstract class Compiler implements Registers { for(int i=0;i> 2; for(int i=0;isyscall should be the contents of V0 and a, b, c, and d should be diff --git a/src/org/ibex/nestedvm/util/ELF.java b/src/org/ibex/nestedvm/util/ELF.java index db990bb..2f97071 100644 --- a/src/org/ibex/nestedvm/util/ELF.java +++ b/src/org/ibex/nestedvm/util/ELF.java @@ -7,6 +7,34 @@ package org.ibex.nestedvm.util; import java.io.*; public class ELF { + private static final int ELF_MAGIC = 0x7f454c46; // '\177', 'E', 'L', 'F' + + public static final int ELFCLASSNONE = 0; + public static final int ELFCLASS32 = 1; + public static final int ELFCLASS64 = 2; + + public static final int ELFDATANONE = 0; + public static final int ELFDATA2LSB = 1; + public static final int ELFDATA2MSB = 2; + + public static final int SHT_SYMTAB = 2; + public static final int SHT_STRTAB = 3; + public static final int SHT_NOBITS = 8; + + public static final int SHF_WRITE = 1; + public static final int SHF_ALLOC = 2; + public static final int SHF_EXECINSTR = 4; + + public static final int PF_X = 0x1; + public static final int PF_W = 0x2; + public static final int PF_R = 0x4; + + public static final int PT_LOAD = 1; + + public static final short ET_EXEC = 2; + public static final short EM_MIPS = 8; + + private Seekable data; public ELFIdent ident; @@ -37,7 +65,7 @@ public class ELF { } private int readInt() throws IOException { int x = readIntBE(); - if(ident!=null && ident.data == ELFIdent.ELFDATA2LSB) + if(ident!=null && ident.data == ELFDATA2LSB) x = ((x<<24)&0xff000000) | ((x<<8)&0xff0000) | ((x>>>8)&0xff00) | ((x>>24)&0xff); return x; } @@ -49,7 +77,7 @@ public class ELF { } private short readShort() throws IOException { short x = readShortBE(); - if(ident!=null && ident.data == ELFIdent.ELFDATA2LSB) + if(ident!=null && ident.data == ELFDATA2LSB) x = (short)((((x<<8)&0xff00) | ((x>>8)&0xff))&0xffff); return x; } @@ -61,17 +89,7 @@ public class ELF { } public class ELFIdent { - private static final int ELF_MAGIC = 0x7f454c46; // '\177', 'E', 'L', 'F' - - public static final int ELFCLASSNONE = 0; - public static final int ELFCLASS32 = 1; - public static final int ELFCLASS64 = 2; - public byte klass; - - - public static final int ELFDATANONE = 0; - public static final int ELFDATA2LSB = 1; - public static final int ELFDATA2MSB = 2; + public byte klass; public byte data; public byte osabi; public byte abiversion; @@ -93,12 +111,8 @@ public class ELF { } public class ELFHeader { - public static final short ET_EXEC = 2; - public short type; - - public static final short EM_MIPS = 8; + public short type; public short machine; - public int version; public int entry; public int phoff; @@ -139,12 +153,6 @@ public class ELF { public int flags; public int align; - public static final int PF_X = 0x1; - public static final int PF_W = 0x2; - public static final int PF_R = 0x4; - - public static final int PT_LOAD = 1; - PHeader() throws IOException { type = readInt(); offset = readInt(); @@ -178,10 +186,6 @@ public class ELF { public int addralign; public int entsize; - public static final int SHT_SYMTAB = 2; - public static final int SHT_STRTAB = 3; - public static final int SHT_NOBITS = 8; - SHeader() throws IOException { nameidx = readInt(); type = readInt(); @@ -278,10 +282,10 @@ public class ELF { if(sectionReaderActive) throw new ELFException("Can't read the symtab while a section reader is active"); SHeader sh = sectionWithName(".symtab"); - if(sh == null || sh.type != SHeader.SHT_SYMTAB) return null; + if(sh == null || sh.type != SHT_SYMTAB) return null; SHeader sth = sectionWithName(".strtab"); - if(sth == null || sth.type != SHeader.SHT_STRTAB) return null; + if(sth == null || sth.type != SHT_STRTAB) return null; byte[] strtab = new byte[sth.size]; DataInputStream dis = new DataInputStream(sth.getInputStream()); -- 1.7.10.4 From 824d572b3f496d92deb0512412c000899995f186 Mon Sep 17 00:00:00 2001 From: brian Date: Wed, 4 Aug 2004 04:52:37 -0700 Subject: [PATCH 09/16] getuser darcs-hash:20040804115237-24bed-05bc84b2b6260388c093f289f12caa5351ce24ac.gz --- src/org/ibex/nestedvm/support_aux.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/org/ibex/nestedvm/support_aux.c b/src/org/ibex/nestedvm/support_aux.c index 03bf2e9..0be4859 100644 --- a/src/org/ibex/nestedvm/support_aux.c +++ b/src/org/ibex/nestedvm/support_aux.c @@ -521,6 +521,11 @@ int vasprintf(char **ret, const char *fmt, va_list ap) { } } +// FIXME: This needs to be in a header +char *getlogin() { + return getenv("USER"); +} + /* * Other People's Code -- 1.7.10.4 From 4ed887824c95de8f6d94f4457b5e7b81c0df0707 Mon Sep 17 00:00:00 2001 From: brian Date: Tue, 7 Jun 2005 01:28:29 -0700 Subject: [PATCH 10/16] new filesystem stuff darcs-hash:20050607082829-24bed-fbb9c135cab41f12171dff880544a32d2b1a9c03.gz --- src/org/ibex/nestedvm/Runtime.java | 4 +++- src/org/ibex/nestedvm/UnixRuntime.java | 34 +++++++++++++++++++++----------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/org/ibex/nestedvm/Runtime.java b/src/org/ibex/nestedvm/Runtime.java index e909b81..74b3a12 100644 --- a/src/org/ibex/nestedvm/Runtime.java +++ b/src/org/ibex/nestedvm/Runtime.java @@ -1031,9 +1031,11 @@ public abstract class Runtime implements UsermodeConstants,Registers,Cloneable { protected final int syscall(int syscall, int a, int b, int c, int d, int e, int f) { try { int n = _syscall(syscall,a,b,c,d,e,f); - //if(n < 0) System.err.println("syscall: " + syscall + " returned " + n); + //if(n<0) throw new ErrnoException(-n); return n; } catch(ErrnoException ex) { + //System.err.println("While executing syscall: " + syscall + ":"); + //if(syscall == SYS_open) try { System.err.println("Failed to open " + cstring(a) + " errno " + ex.errno); } catch(Exception e2) { } //ex.printStackTrace(); return -ex.errno; } catch(FaultException ex) { diff --git a/src/org/ibex/nestedvm/UnixRuntime.java b/src/org/ibex/nestedvm/UnixRuntime.java index c88cf24..adf27f8 100644 --- a/src/org/ibex/nestedvm/UnixRuntime.java +++ b/src/org/ibex/nestedvm/UnixRuntime.java @@ -174,6 +174,7 @@ public abstract class UnixRuntime extends Runtime implements Cloneable { 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); + case SYS_umask: return sys_umask(a); default: return super._syscall(syscall,a,b,c,d,e,f); } @@ -202,7 +203,9 @@ public abstract class UnixRuntime extends Runtime implements Cloneable { private int sys_fchmod(int fd, int uid, int gid) { return 0; } - + private int sys_umask(int mask) { + return 0; + } private int sys_access(int cstring, int mode) throws ErrnoException, ReadFaultException { // FEATURE: sys_access @@ -505,13 +508,16 @@ public abstract class UnixRuntime extends Runtime implements Cloneable { if(p == buf.length) break OUTER; n = s.read(buf,p,buf.length-p); } - int arg; - for(arg=2;arg 0 && out[outp-1] == '/') outp--; //System.err.println("normalize: " + path + " -> " + new String(out,0,outp) + " (cwd: " + cwd + ")"); - return new String(out,0,outp); + int outStart = out[0] == '/' ? 1 : 0; + return new String(out,outStart,outp - outStart); } FStat hostFStat(final File f, Object data) { -- 1.7.10.4 From a37eae435c3d83c627c4eeddaf45014d6faf3d23 Mon Sep 17 00:00:00 2001 From: brian Date: Tue, 7 Jun 2005 02:03:16 -0700 Subject: [PATCH 11/16] update nestedvm for the new classgen api darcs-hash:20050607090316-24bed-c0bd85286883eed89b9e56f2c6340b73ddce334b.gz --- src/org/ibex/nestedvm/ClassFileCompiler.java | 222 ++++++++++++-------------- 1 file changed, 106 insertions(+), 116 deletions(-) diff --git a/src/org/ibex/nestedvm/ClassFileCompiler.java b/src/org/ibex/nestedvm/ClassFileCompiler.java index 6e67c80..32feb2e 100644 --- a/src/org/ibex/nestedvm/ClassFileCompiler.java +++ b/src/org/ibex/nestedvm/ClassFileCompiler.java @@ -44,9 +44,9 @@ public class ClassFileCompiler extends Compiler implements CGConst { private File outDir; private PrintStream warn = System.err; - private final Type.Object me; + private final Type.Class me; - private ClassGen cg; + private ClassFile cg; private MethodGen clinit, init; public ClassFileCompiler(String path, String className, OutputStream os) throws IOException { this(new Seekable.File(path),className,os); } @@ -62,7 +62,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { } private ClassFileCompiler(Seekable binary, String className) throws IOException { super(binary,className); - me = new Type.Object(fullClassName); + me = new Type.Class(fullClassName); } public void setWarnWriter(PrintStream warn) { this.warn = warn; } @@ -70,7 +70,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { protected void _go() throws Exn, IOException { try { __go(); - } catch(ClassGen.Exn e) { + } catch(ClassFile.Exn e) { e.printStackTrace(warn); throw new Exn("Class generation exception: " + e.toString()); } @@ -80,8 +80,8 @@ public class ClassFileCompiler extends Compiler implements CGConst { if(!pruneCases) throw new Exn("-o prunecases MUST be enabled for ClassFileCompiler"); // Class - Type.Object superClass = new Type.Object(runtimeClass); - cg = new ClassGen(me,superClass,ACC_PUBLIC|ACC_FINAL|ACC_SUPER); + Type.Class superClass = new Type.Class(runtimeClass); + cg = new ClassFile(me,superClass,ACC_PUBLIC|ACC_FINAL|ACC_SUPER); if(source != null) cg.setSourceFile(source); // Fields @@ -102,7 +102,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { init.add(ALOAD_0); init.add(LDC,pageSize); init.add(LDC,totalPages); - init.add(INVOKESPECIAL,new MethodRef(me,"",Type.VOID,new Type[]{Type.INT,Type.INT})); + init.add(INVOKESPECIAL,me.method("",Type.VOID,new Type[]{Type.INT,Type.INT})); init.add(RETURN); // (Z) @@ -111,7 +111,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { init.add(LDC,pageSize); init.add(LDC,totalPages); init.add(ILOAD_1); - init.add(INVOKESPECIAL,new MethodRef(me,"",Type.VOID,new Type[]{Type.INT,Type.INT,Type.BOOLEAN})); + init.add(INVOKESPECIAL,me.method("",Type.VOID,new Type[]{Type.INT,Type.INT,Type.BOOLEAN})); init.add(RETURN); // (II) @@ -120,7 +120,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { init.add(ILOAD_1); init.add(ILOAD_2); init.add(ICONST_0); - init.add(INVOKESPECIAL,new MethodRef(me,"",Type.VOID,new Type[]{Type.INT,Type.INT,Type.BOOLEAN})); + init.add(INVOKESPECIAL,me.method("",Type.VOID,new Type[]{Type.INT,Type.INT,Type.BOOLEAN})); init.add(RETURN); // (IIZ) @@ -129,20 +129,20 @@ public class ClassFileCompiler extends Compiler implements CGConst { init.add(ILOAD_1); init.add(ILOAD_2); init.add(ILOAD_3); - init.add(INVOKESPECIAL,new MethodRef(superClass,"",Type.VOID,new Type[]{Type.INT,Type.INT,Type.BOOLEAN})); + init.add(INVOKESPECIAL,superClass.method("",Type.VOID,new Type[]{Type.INT,Type.INT,Type.BOOLEAN})); if(onePage) { - cg.addField("page",Type.arrayType(Type.INT),ACC_PRIVATE|ACC_FINAL); + cg.addField("page",Type.INT.makeArray(),ACC_PRIVATE|ACC_FINAL); init.add(ALOAD_0); init.add(DUP); - init.add(GETFIELD,new FieldRef(me,"readPages",Type.arrayType(Type.INT,2))); + init.add(GETFIELD,me.field("readPages",Type.INT.makeArray(2))); init.add(LDC,0); init.add(AALOAD); - init.add(PUTFIELD,new FieldRef(me,"page",Type.arrayType(Type.INT))); + init.add(PUTFIELD,me.field("page",Type.INT.makeArray())); } if(supportCall) - cg.addField("symbols",new Type.Object(hashClass),ACC_PRIVATE|ACC_STATIC|ACC_FINAL); + cg.addField("symbols",new Type.Class(hashClass),ACC_PRIVATE|ACC_STATIC|ACC_FINAL); int highestAddr = 0; @@ -169,12 +169,12 @@ public class ClassFileCompiler extends Compiler implements CGConst { // Finish clinit if(supportCall) { - Type.Object hash = new Type.Object(hashClass); + Type.Class hash = new Type.Class(hashClass); clinit.add(NEW,hash); clinit.add(DUP); clinit.add(DUP); - clinit.add(INVOKESPECIAL,new MethodRef(hash,"",Type.VOID,Type.NO_ARGS)); - clinit.add(PUTSTATIC,new FieldRef(me,"symbols",hash)); + clinit.add(INVOKESPECIAL,hash.method("",Type.VOID,Type.NO_ARGS)); + clinit.add(PUTSTATIC,me.field("symbols",hash)); ELF.Symbol[] symbols = elf.getSymtab().symbols; for(int i=0;i",Type.VOID,new Type[]{Type.INT})); - clinit.add(INVOKEVIRTUAL,new MethodRef(hash,"put",Type.OBJECT,new Type[]{Type.OBJECT,Type.OBJECT})); + clinit.add(INVOKESPECIAL,Type.INTEGER_OBJECT.method("",Type.VOID,new Type[]{Type.INT})); + clinit.add(INVOKEVIRTUAL,hash.method("put",Type.OBJECT,new Type[]{Type.OBJECT,Type.OBJECT})); clinit.add(POP); } } @@ -201,13 +201,13 @@ public class ClassFileCompiler extends Compiler implements CGConst { int start = tramp.size(); tramp.add(ALOAD_0); - tramp.add(GETFIELD,new FieldRef(me,"state",Type.INT)); + tramp.add(GETFIELD,me.field("state",Type.INT)); tramp.add(IFEQ,tramp.size()+2); tramp.add(RETURN); tramp.add(ALOAD_0); tramp.add(ALOAD_0); - tramp.add(GETFIELD,new FieldRef(me,"pc",Type.INT)); + tramp.add(GETFIELD,me.field("pc",Type.INT)); tramp.add(LDC,methodShift); tramp.add(IUSHR); @@ -218,42 +218,32 @@ public class ClassFileCompiler extends Compiler implements CGConst { tramp.add(TABLESWITCH,tsi); for(int n=beg;n",Type.VOID,new Type[]{Type.STRING})); + tramp.add(INVOKESPECIAL,Type.STRINGBUFFER.method("",Type.VOID,new Type[]{Type.STRING})); tramp.add(ALOAD_0); - tramp.add(GETFIELD, new FieldRef(me,"r2",Type.INT)); - tramp.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"append",Type.STRINGBUFFER,new Type[]{Type.INT})); + tramp.add(GETFIELD, me.field("r2",Type.INT)); + tramp.add(INVOKEVIRTUAL,Type.STRINGBUFFER.method("append",Type.STRINGBUFFER,new Type[]{Type.INT})); tramp.add(LDC," pc: "); - tramp.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"append",Type.STRINGBUFFER,new Type[]{Type.STRING})); + tramp.add(INVOKEVIRTUAL,Type.STRINGBUFFER.method("append",Type.STRINGBUFFER,new Type[]{Type.STRING})); tramp.add(ALOAD_0); - tramp.add(GETFIELD, new FieldRef(me,"pc",Type.INT)); - tramp.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"append",Type.STRINGBUFFER,new Type[]{Type.INT})); + tramp.add(GETFIELD, me.field("pc",Type.INT)); + tramp.add(INVOKEVIRTUAL,Type.STRINGBUFFER.method("append",Type.STRINGBUFFER,new Type[]{Type.INT})); tramp.add(LDC,")"); - tramp.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"append",Type.STRINGBUFFER,new Type[]{Type.STRING})); - tramp.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"toString",Type.STRING,Type.NO_ARGS)); + tramp.add(INVOKEVIRTUAL,Type.STRINGBUFFER.method("append",Type.STRINGBUFFER,new Type[]{Type.STRING})); + tramp.add(INVOKEVIRTUAL,Type.STRINGBUFFER.method("toString",Type.STRING,Type.NO_ARGS)); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime$ExecutionException. - tramp.add(INVOKESPECIAL,new MethodRef(new Type.Object("org.ibex.nestedvm.Runtime$ExecutionException"),"",Type.VOID,new Type[]{Type.STRING})); + tramp.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); tramp.add(ATHROW); - - - if(false) { - try { - tramp.finish(); - } catch(ClassGen.Exn e) { - e.printStackTrace(warn); - throw new Exn("Generation of the trampoline method failed. Try increasing maxInsnPerMethod"); - } - } addConstReturnMethod("gp",gp.addr); addConstReturnMethod("entryPoint",elf.header.entry); @@ -265,15 +255,15 @@ public class ClassFileCompiler extends Compiler implements CGConst { } if(supportCall) { - Type.Object hashClassType = new Type.Object(hashClass); + Type.Class hashClassType = new Type.Class(hashClass); MethodGen ls = cg.addMethod("lookupSymbol",Type.INT,new Type[]{Type.STRING},ACC_PROTECTED); - ls.add(GETSTATIC,new FieldRef(me,"symbols",hashClassType)); + ls.add(GETSTATIC,me.field("symbols",hashClassType)); ls.add(ALOAD_1); - ls.add(INVOKEVIRTUAL,new MethodRef(hashClassType,"get",Type.OBJECT,new Type[]{Type.OBJECT})); + ls.add(INVOKEVIRTUAL,hashClassType.method("get",Type.OBJECT,new Type[]{Type.OBJECT})); ls.add(DUP); int b = ls.add(IFNULL); ls.add(CHECKCAST,Type.INTEGER_OBJECT); - ls.add(INVOKEVIRTUAL,new MethodRef(Type.INTEGER_OBJECT,"intValue",Type.INT,Type.NO_ARGS)); + ls.add(INVOKEVIRTUAL,Type.INTEGER_OBJECT.method("intValue",Type.INT,Type.NO_ARGS)); ls.add(IRETURN); ls.setArg(b,ls.size()); ls.add(POP); @@ -283,14 +273,14 @@ public class ClassFileCompiler extends Compiler implements CGConst { // Kind of a hack, referencing dup() gets us all the fields for free // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime$CPUState.dup - Type.Object cpuStateType = new Type.Object("org.ibex.nestedvm.Runtime$CPUState"); + Type.Class cpuStateType = new Type.Class("org.ibex.nestedvm.Runtime$CPUState"); MethodGen setCPUState = cg.addMethod("setCPUState",Type.VOID,new Type[]{cpuStateType},ACC_PROTECTED); MethodGen getCPUState = cg.addMethod("getCPUState",Type.VOID,new Type[]{cpuStateType},ACC_PROTECTED); setCPUState.add(ALOAD_1); getCPUState.add(ALOAD_1); - setCPUState.add(GETFIELD,new FieldRef(cpuStateType,"r",Type.arrayType(Type.INT))); - getCPUState.add(GETFIELD,new FieldRef(cpuStateType,"r",Type.arrayType(Type.INT))); + setCPUState.add(GETFIELD,cpuStateType.field("r",Type.INT.makeArray())); + getCPUState.add(GETFIELD,cpuStateType.field("r",Type.INT.makeArray())); setCPUState.add(ASTORE_2); getCPUState.add(ASTORE_2); @@ -299,19 +289,19 @@ public class ClassFileCompiler extends Compiler implements CGConst { setCPUState.add(ALOAD_2); setCPUState.add(LDC,i); setCPUState.add(IALOAD); - setCPUState.add(PUTFIELD,new FieldRef(me,"r"+i,Type.INT)); + setCPUState.add(PUTFIELD,me.field("r"+i,Type.INT)); getCPUState.add(ALOAD_2); getCPUState.add(LDC,i); getCPUState.add(ALOAD_0); - getCPUState.add(GETFIELD,new FieldRef(me,"r"+i,Type.INT)); + getCPUState.add(GETFIELD,me.field("r"+i,Type.INT)); getCPUState.add(IASTORE); } setCPUState.add(ALOAD_1); getCPUState.add(ALOAD_1); - setCPUState.add(GETFIELD,new FieldRef(cpuStateType,"f",Type.arrayType(Type.INT))); - getCPUState.add(GETFIELD,new FieldRef(cpuStateType,"f",Type.arrayType(Type.INT))); + setCPUState.add(GETFIELD,cpuStateType.field("f",Type.INT.makeArray())); + getCPUState.add(GETFIELD,cpuStateType.field("f",Type.INT.makeArray())); setCPUState.add(ASTORE_2); getCPUState.add(ASTORE_2); @@ -320,14 +310,14 @@ public class ClassFileCompiler extends Compiler implements CGConst { setCPUState.add(ALOAD_2); setCPUState.add(LDC,i); setCPUState.add(IALOAD); - if(singleFloat) setCPUState.add(INVOKESTATIC,new MethodRef(Type.FLOAT_OBJECT,"intBitsToFloat",Type.FLOAT,new Type[]{Type.INT})); - setCPUState.add(PUTFIELD,new FieldRef(me,"f"+i,singleFloat ? Type.FLOAT : Type.INT)); + if(singleFloat) setCPUState.add(INVOKESTATIC,Type.FLOAT_OBJECT.method("intBitsToFloat",Type.FLOAT,new Type[]{Type.INT})); + setCPUState.add(PUTFIELD,me.field("f"+i,singleFloat ? Type.FLOAT : Type.INT)); getCPUState.add(ALOAD_2); getCPUState.add(LDC,i); getCPUState.add(ALOAD_0); - getCPUState.add(GETFIELD,new FieldRef(me,"f"+i,singleFloat ? Type.FLOAT: Type.INT)); - if(singleFloat) getCPUState.add(INVOKESTATIC,new MethodRef(Type.FLOAT_OBJECT,"floatToIntBits",Type.INT,new Type[]{Type.FLOAT})); + getCPUState.add(GETFIELD,me.field("f"+i,singleFloat ? Type.FLOAT: Type.INT)); + if(singleFloat) getCPUState.add(INVOKESTATIC,Type.FLOAT_OBJECT.method("floatToIntBits",Type.INT,new Type[]{Type.FLOAT})); getCPUState.add(IASTORE); } @@ -335,13 +325,13 @@ public class ClassFileCompiler extends Compiler implements CGConst { for(int i=0;i - execute.add(INVOKESPECIAL,new MethodRef("org.ibex.nestedvm.Runtime$FaultException","",Type.VOID,new Type[]{new Type.Object("java.lang.RuntimeException")})); + execute.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$FaultException").method("",Type.VOID,new Type[]{new Type.Class("java.lang.RuntimeException")})); execute.add(ATHROW); - execute.addExceptionHandler(tryStart,tryEnd,catchInsn,new Type.Object("java.lang.RuntimeException")); - execute.addThrow(new Type.Object("org.ibex.nestedvm.Runtime$ExecutionException")); + execute.addExceptionHandler(tryStart,tryEnd,catchInsn,new Type.Class("java.lang.RuntimeException")); + execute.addThrow(new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException")); - MethodGen main = cg.addMethod("main",Type.VOID,new Type[]{Type.arrayType(Type.STRING)},ACC_STATIC|ACC_PUBLIC); + MethodGen main = cg.addMethod("main",Type.VOID,new Type[]{Type.STRING.makeArray()},ACC_STATIC|ACC_PUBLIC); main.add(NEW,me); main.add(DUP); - main.add(INVOKESPECIAL,new MethodRef(me,"",Type.VOID,Type.NO_ARGS)); + main.add(INVOKESPECIAL,me.method("",Type.VOID,Type.NO_ARGS)); main.add(LDC,fullClassName); main.add(ALOAD_0); if(unixRuntime) { - Type.Object ur = new Type.Object("org.ibex.nestedvm.UnixRuntime"); + Type.Class ur = new Type.Class("org.ibex.nestedvm.UnixRuntime"); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime.runAndExec - main.add(INVOKESTATIC,new MethodRef(ur,"runAndExec",Type.INT,new Type[]{ur,Type.STRING,Type.arrayType(Type.STRING)})); + main.add(INVOKESTATIC,ur.method("runAndExec",Type.INT,new Type[]{ur,Type.STRING,Type.STRING.makeArray()})); } else { // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime.run - main.add(INVOKEVIRTUAL,new MethodRef(me,"run",Type.INT,new Type[]{Type.STRING,Type.arrayType(Type.STRING)})); + main.add(INVOKEVIRTUAL,me.method("run",Type.INT,new Type[]{Type.STRING,Type.STRING.makeArray()})); } - main.add(INVOKESTATIC,new MethodRef(new Type.Object("java.lang.System"),"exit",Type.VOID,new Type[]{Type.INT})); + main.add(INVOKESTATIC,new Type.Class("java.lang.System").method("exit",Type.VOID,new Type[]{Type.INT})); main.add(RETURN); if(outDir != null) { @@ -415,19 +405,19 @@ public class ClassFileCompiler extends Compiler implements CGConst { sb.append((char) ((l>>>(7*(7-j)))&0x7f)); } String fieldname = "_data" + (++initDataCount); - cg.addField(fieldname,Type.arrayType(Type.INT),ACC_PRIVATE|ACC_STATIC|ACC_FINAL); + cg.addField(fieldname,Type.INT.makeArray(),ACC_PRIVATE|ACC_STATIC|ACC_FINAL); clinit.add(LDC,sb.toString()); clinit.add(LDC,segSize/4); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime.decodeData - clinit.add(INVOKESTATIC,new MethodRef(new Type.Object("org.ibex.nestedvm.Runtime"),"decodeData",Type.arrayType(Type.INT),new Type[]{Type.STRING,Type.INT})); - clinit.add(PUTSTATIC,new FieldRef(me,fieldname,Type.arrayType(Type.INT))); + clinit.add(INVOKESTATIC,new Type.Class("org.ibex.nestedvm.Runtime").method("decodeData",Type.INT.makeArray(),new Type[]{Type.STRING,Type.INT})); + clinit.add(PUTSTATIC,me.field(fieldname,Type.INT.makeArray())); init.add(ALOAD_0); - init.add(GETSTATIC,new FieldRef(me,fieldname,Type.arrayType(Type.INT))); + init.add(GETSTATIC,me.field(fieldname,Type.INT.makeArray())); init.add(LDC,addr); init.add(LDC,readOnly ? 1 : 0); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime.initPages - init.add(INVOKEVIRTUAL,new MethodRef(me,"initPages",Type.VOID,new Type[]{Type.arrayType(Type.INT),Type.INT,Type.BOOLEAN})); + init.add(INVOKEVIRTUAL,me.method("initPages",Type.VOID,new Type[]{Type.INT.makeArray(),Type.INT,Type.BOOLEAN})); addr += segSize; size -= segSize; @@ -444,7 +434,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { init.add(LDC,addr); init.add(LDC,count); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime.clearPages - init.add(INVOKEVIRTUAL,new MethodRef(me,"clearPages",Type.VOID,new Type[]{Type.INT,Type.INT})); + init.add(INVOKEVIRTUAL,me.method("clearPages",Type.VOID,new Type[]{Type.INT,Type.INT})); } // Method state info @@ -508,14 +498,14 @@ public class ClassFileCompiler extends Compiler implements CGConst { mg = cg.addMethod("run_" + toHex(startOfMethod),Type.VOID,Type.NO_ARGS,ACC_PRIVATE|ACC_FINAL); if(onePage) { mg.add(ALOAD_0); - mg.add(GETFIELD,new FieldRef(me,"page",Type.arrayType(Type.INT))); + mg.add(GETFIELD,me.field("page",Type.INT.makeArray())); mg.add(ASTORE_2); } else { mg.add(ALOAD_0); - mg.add(GETFIELD,new FieldRef(me,"readPages",Type.arrayType(Type.INT,2))); + mg.add(GETFIELD,me.field("readPages",Type.INT.makeArray(2))); mg.add(ASTORE_2); mg.add(ALOAD_0); - mg.add(GETFIELD,new FieldRef(me,"writePages",Type.arrayType(Type.INT,2))); + mg.add(GETFIELD,me.field("writePages",Type.INT.makeArray(2))); mg.add(ASTORE_3); } @@ -541,7 +531,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { fixupRegsStart(); mg.add(ALOAD_0); - mg.add(GETFIELD,new FieldRef(me,"pc",Type.INT)); + mg.add(GETFIELD,me.field("pc",Type.INT)); mg.add(LOOKUPSWITCH,lsi); } @@ -565,23 +555,23 @@ public class ClassFileCompiler extends Compiler implements CGConst { defaultTarget.setTarget(mg.size()); if(debugCompiler) { - mg.add(NEW,new Type.Object("org.ibex.nestedvm.Runtime$ExecutionException")); + mg.add(NEW,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException")); mg.add(DUP); mg.add(NEW,Type.STRINGBUFFER); mg.add(DUP); mg.add(LDC,"Jumped to invalid address: "); - mg.add(INVOKESPECIAL,new MethodRef(Type.STRINGBUFFER,"",Type.VOID,new Type[]{Type.STRING})); + mg.add(INVOKESPECIAL,Type.STRINGBUFFER.method("",Type.VOID,new Type[]{Type.STRING})); mg.add(ALOAD_0); - mg.add(GETFIELD,new FieldRef(me,"pc",Type.INT)); - mg.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"append",Type.STRINGBUFFER,new Type[]{Type.INT})); - mg.add(INVOKEVIRTUAL,new MethodRef(Type.STRINGBUFFER,"toString",Type.STRING,Type.NO_ARGS)); - mg.add(INVOKESPECIAL,new MethodRef(new Type.Object("org.ibex.nestedvm.Runtime$ExecutionException"),"",Type.VOID,new Type[]{Type.STRING})); + mg.add(GETFIELD,me.field("pc",Type.INT)); + mg.add(INVOKEVIRTUAL,Type.STRINGBUFFER.method("append",Type.STRINGBUFFER,new Type[]{Type.INT})); + mg.add(INVOKEVIRTUAL,Type.STRINGBUFFER.method("toString",Type.STRING,Type.NO_ARGS)); + mg.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); mg.add(ATHROW); } else { - mg.add(NEW,new Type.Object("org.ibex.nestedvm.Runtime$ExecutionException")); + mg.add(NEW,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException")); mg.add(DUP); mg.add(LDC,"Jumped to invalid address"); - mg.add(INVOKESPECIAL,new MethodRef(new Type.Object("org.ibex.nestedvm.Runtime$ExecutionException"),"",Type.VOID,new Type[]{Type.STRING})); + mg.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); mg.add(ATHROW); } @@ -766,11 +756,11 @@ public class ClassFileCompiler extends Compiler implements CGConst { pushRegZ(R+T0); pushRegZ(R+T1); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime.syscall - mg.add(INVOKEVIRTUAL,new MethodRef(me,"syscall",Type.INT,new Type[]{Type.INT,Type.INT,Type.INT,Type.INT,Type.INT,Type.INT,Type.INT})); + mg.add(INVOKEVIRTUAL,me.method("syscall",Type.INT,new Type[]{Type.INT,Type.INT,Type.INT,Type.INT,Type.INT,Type.INT,Type.INT})); setReg(); mg.add(ALOAD_0); - mg.add(GETFIELD,new FieldRef(me,"state",Type.INT)); + mg.add(GETFIELD,me.field("state",Type.INT)); b1 = mg.add(IFEQ); preSetPC(); mg.add(LDC,pc+4); @@ -779,10 +769,10 @@ public class ClassFileCompiler extends Compiler implements CGConst { mg.setArg(b1,mg.size()); break; case 13: // BREAK - mg.add(NEW,new Type.Object("org.ibex.nestedvm.Runtime$ExecutionException")); + mg.add(NEW,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException")); mg.add(DUP); mg.add(LDC,"BREAK Code " + toHex(breakCode)); - mg.add(INVOKESPECIAL,new MethodRef(new Type.Object("org.ibex.nestedvm.Runtime$ExecutionException"),"",Type.VOID,new Type[]{Type.STRING})); + mg.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); mg.add(ATHROW); ret |= UNREACHABLE; break; @@ -1308,7 +1298,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { // Round towards plus infinity tsi.setTarget(2,mg.size()); if(!d) mg.add(F2D); // Ugh.. java.lang.Math doesn't have a float ceil/floor - mg.add(INVOKESTATIC,new MethodRef("java.lang.Math","ceil",Type.DOUBLE,new Type[]{Type.DOUBLE})); + mg.add(INVOKESTATIC,new Type.Class("java.lang.Math").method("ceil",Type.DOUBLE,new Type[]{Type.DOUBLE})); if(!d) mg.add(D2F); b1 = mg.add(GOTO); @@ -1321,7 +1311,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { // Round towards minus infinity tsi.setTarget(3,mg.size()); if(!d) mg.add(F2D); - mg.add(INVOKESTATIC,new MethodRef("java.lang.Math","floor",Type.DOUBLE,new Type[]{Type.DOUBLE})); + mg.add(INVOKESTATIC,new Type.Class("java.lang.Math").method("floor",Type.DOUBLE,new Type[]{Type.DOUBLE})); if(!d) mg.add(D2F); tsi.setTarget(1,mg.size()); @@ -1787,13 +1777,13 @@ public class ClassFileCompiler extends Compiler implements CGConst { for(int i=0;i= F+0 && reg <= F+31 && singleFloat) { mg.add(ALOAD_0); - mg.add(GETFIELD,new FieldRef(me,regField[reg],Type.FLOAT)); - mg.add(INVOKESTATIC,new MethodRef(Type.FLOAT_OBJECT,"floatToIntBits",Type.INT,new Type[]{Type.FLOAT})); + mg.add(GETFIELD,me.field(regField[reg],Type.FLOAT)); + mg.add(INVOKESTATIC,Type.FLOAT_OBJECT.method("floatToIntBits",Type.INT,new Type[]{Type.FLOAT})); } else { mg.add(ALOAD_0); - mg.add(GETFIELD,new FieldRef(me,regField[reg],Type.INT)); + mg.add(GETFIELD,me.field(regField[reg],Type.INT)); } return h; } @@ -1861,17 +1851,17 @@ public class ClassFileCompiler extends Compiler implements CGConst { mg.add(ISTORE,getLocalForReg(reg)); regLocalWritten[reg] = true; } else if(reg >= F+0 && reg <= F+31 && singleFloat) { - mg.add(INVOKESTATIC,new MethodRef(Type.FLOAT_OBJECT,"intBitsToFloat",Type.FLOAT,new Type[]{Type.INT})); - mg.add(PUTFIELD,new FieldRef(me,regField[reg],Type.FLOAT)); + mg.add(INVOKESTATIC,Type.FLOAT_OBJECT.method("intBitsToFloat",Type.FLOAT,new Type[]{Type.INT})); + mg.add(PUTFIELD,me.field(regField[reg],Type.FLOAT)); } else { - mg.add(PUTFIELD,new FieldRef(me,regField[reg],Type.INT)); + mg.add(PUTFIELD,me.field(regField[reg],Type.INT)); } return h; } private int preSetPC() { return mg.add(ALOAD_0); } private int setPC() { - return mg.add(PUTFIELD,new FieldRef(me,"pc",Type.INT)); + return mg.add(PUTFIELD,me.field("pc",Type.INT)); } //unused - private InstructionHandle pushDouble(int reg) throws CompilationException { return pushDouble(reg,true); } @@ -1891,13 +1881,13 @@ public class ClassFileCompiler extends Compiler implements CGConst { mg.add(LDC,FFFFFFFF); mg.add(LAND); mg.add(LOR); - mg.add(INVOKESTATIC,new MethodRef(Type.DOUBLE_OBJECT,"longBitsToDouble",Type.DOUBLE,new Type[]{Type.LONG})); + mg.add(INVOKESTATIC,Type.DOUBLE_OBJECT.method("longBitsToDouble",Type.DOUBLE,new Type[]{Type.LONG})); } else if(singleFloat) { mg.add(ALOAD_0); - mg.add(GETFIELD,new FieldRef(me,regField[reg],Type.FLOAT)); + mg.add(GETFIELD,me.field(regField[reg],Type.FLOAT)); } else { pushReg(reg); - mg.add(INVOKESTATIC,new MethodRef("java.lang.Float","intBitsToFloat",Type.FLOAT,new Type[]{Type.INT})); + mg.add(INVOKESTATIC,new Type.Class("java.lang.Float").method("intBitsToFloat",Type.FLOAT,new Type[]{Type.INT})); } return h; } @@ -1915,7 +1905,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { if(d) { if(singleFloat) throw new Exn("Double operations not supported when singleFloat is enabled"); if(reg == F+31) throw new Exn("Tried to use a double in f31"); - mg.add(INVOKESTATIC,new MethodRef(Type.DOUBLE_OBJECT,"doubleToLongBits",Type.LONG,new Type[]{Type.DOUBLE})); + mg.add(INVOKESTATIC,Type.DOUBLE_OBJECT.method("doubleToLongBits",Type.LONG,new Type[]{Type.DOUBLE})); mg.add(DUP2); mg.add(LDC,32); mg.add(LUSHR); @@ -1928,10 +1918,10 @@ public class ClassFileCompiler extends Compiler implements CGConst { } else if(singleFloat) { // HACK: Clean this up preSetRegStackPos--; - mg.add(PUTFIELD,new FieldRef(me,regField[reg],Type.FLOAT)); + mg.add(PUTFIELD,me.field(regField[reg],Type.FLOAT)); } else { //h = a(fac.createInvoke("java.lang.Float","floatToRawIntBits",Type.INT,new Type[]{Type.FLOAT},INVOKESTATIC)); - mg.add(INVOKESTATIC,new MethodRef(Type.FLOAT_OBJECT,"floatToRawIntBits",Type.INT,new Type[]{Type.FLOAT})); + mg.add(INVOKESTATIC,Type.FLOAT_OBJECT.method("floatToRawIntBits",Type.INT,new Type[]{Type.FLOAT})); setReg(); } return h; @@ -1978,7 +1968,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { mg.add(ALOAD_0); mg.add(SWAP); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime.nullPointerCheck - mg.add(INVOKEVIRTUAL,new MethodRef(me,"nullPointerCheck",Type.VOID,new Type[]{Type.INT})); + mg.add(INVOKEVIRTUAL,me.method("nullPointerCheck",Type.VOID,new Type[]{Type.INT})); } if(onePage) { @@ -2012,7 +2002,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { mg.add(IASTORE); } else { // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime.unsafeMemWrite - mg.add(INVOKEVIRTUAL,new MethodRef(me,"unsafeMemWrite",Type.VOID,new Type[]{Type.INT,Type.INT})); + mg.add(INVOKEVIRTUAL,me.method("unsafeMemWrite",Type.VOID,new Type[]{Type.INT,Type.INT})); } } @@ -2053,7 +2043,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { mg.add(DUP); mg.add(ALOAD_0); mg.add(SWAP); - mg.add(INVOKEVIRTUAL,new MethodRef(me,"nullPointerCheck",Type.VOID,new Type[]{Type.INT})); + mg.add(INVOKEVIRTUAL,me.method("nullPointerCheck",Type.VOID,new Type[]{Type.INT})); } if(onePage) { @@ -2084,7 +2074,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { if(preMemReadDoPreWrite) mg.add(DUP2); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime.unsafeMemRead - mg.add(INVOKEVIRTUAL,new MethodRef(me,"unsafeMemRead",Type.INT,new Type[]{Type.INT})); + mg.add(INVOKEVIRTUAL,me.method("unsafeMemRead",Type.INT,new Type[]{Type.INT})); } } -- 1.7.10.4 From aa4018221feeb6be5cc50c7b2b214fbed0ee8caf Mon Sep 17 00:00:00 2001 From: adam Date: Sat, 2 Jul 2005 01:52:05 -0700 Subject: [PATCH 12/16] harmonize nestedvm and latest classgen changes darcs-hash:20050702085205-5007d-024c1c32d24e0509f7d19b3d50bb86f8f014858b.gz --- src/org/ibex/nestedvm/ClassFileCompiler.java | 98 +++++++++++++------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/src/org/ibex/nestedvm/ClassFileCompiler.java b/src/org/ibex/nestedvm/ClassFileCompiler.java index 32feb2e..18d6670 100644 --- a/src/org/ibex/nestedvm/ClassFileCompiler.java +++ b/src/org/ibex/nestedvm/ClassFileCompiler.java @@ -62,7 +62,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { } private ClassFileCompiler(Seekable binary, String className) throws IOException { super(binary,className); - me = new Type.Class(fullClassName); + me = Type.instance(fullClassName).asClass(); } public void setWarnWriter(PrintStream warn) { this.warn = warn; } @@ -80,25 +80,25 @@ public class ClassFileCompiler extends Compiler implements CGConst { if(!pruneCases) throw new Exn("-o prunecases MUST be enabled for ClassFileCompiler"); // Class - Type.Class superClass = new Type.Class(runtimeClass); - cg = new ClassFile(me,superClass,ACC_PUBLIC|ACC_FINAL|ACC_SUPER); + Type.Class superClass = Type.instance(runtimeClass).asClass(); + cg = new ClassFile(me,superClass,PUBLIC|FINAL|SUPER); if(source != null) cg.setSourceFile(source); // Fields - cg.addField("pc",Type.INT,ACC_PRIVATE); - cg.addField("hi",Type.INT,ACC_PRIVATE); - cg.addField("lo",Type.INT,ACC_PRIVATE); - cg.addField("fcsr",Type.INT,ACC_PRIVATE); - for(int i=1;i<32;i++) cg.addField("r" + i,Type.INT,ACC_PRIVATE); - for(int i=0;i<32;i++) cg.addField("f" + i,singleFloat ? Type.FLOAT : Type.INT,ACC_PRIVATE); + cg.addField("pc",Type.INT,PRIVATE); + cg.addField("hi",Type.INT,PRIVATE); + cg.addField("lo",Type.INT,PRIVATE); + cg.addField("fcsr",Type.INT,PRIVATE); + for(int i=1;i<32;i++) cg.addField("r" + i,Type.INT,PRIVATE); + for(int i=0;i<32;i++) cg.addField("f" + i,singleFloat ? Type.FLOAT : Type.INT,PRIVATE); // - clinit = cg.addMethod("",Type.VOID,Type.NO_ARGS,ACC_PRIVATE|ACC_STATIC); + clinit = cg.addMethod("",Type.VOID,Type.NO_ARGS,PRIVATE|STATIC); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.UnixRuntime. // - init = cg.addMethod("",Type.VOID,Type.NO_ARGS,ACC_PUBLIC); + init = cg.addMethod("",Type.VOID,Type.NO_ARGS,PUBLIC); init.add(ALOAD_0); init.add(LDC,pageSize); init.add(LDC,totalPages); @@ -106,7 +106,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { init.add(RETURN); // (Z) - init = cg.addMethod("",Type.VOID,new Type[]{Type.BOOLEAN},ACC_PUBLIC); + init = cg.addMethod("",Type.VOID,new Type[]{Type.BOOLEAN},PUBLIC); init.add(ALOAD_0); init.add(LDC,pageSize); init.add(LDC,totalPages); @@ -115,7 +115,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { init.add(RETURN); // (II) - init = cg.addMethod("",Type.VOID,new Type[]{Type.INT,Type.INT},ACC_PUBLIC); + init = cg.addMethod("",Type.VOID,new Type[]{Type.INT,Type.INT},PUBLIC); init.add(ALOAD_0); init.add(ILOAD_1); init.add(ILOAD_2); @@ -124,7 +124,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { init.add(RETURN); // (IIZ) - init = cg.addMethod("",Type.VOID,new Type[]{Type.INT,Type.INT,Type.BOOLEAN},ACC_PUBLIC); + init = cg.addMethod("",Type.VOID,new Type[]{Type.INT,Type.INT,Type.BOOLEAN},PUBLIC); init.add(ALOAD_0); init.add(ILOAD_1); init.add(ILOAD_2); @@ -132,7 +132,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { init.add(INVOKESPECIAL,superClass.method("",Type.VOID,new Type[]{Type.INT,Type.INT,Type.BOOLEAN})); if(onePage) { - cg.addField("page",Type.INT.makeArray(),ACC_PRIVATE|ACC_FINAL); + cg.addField("page",Type.INT.makeArray(),PRIVATE|FINAL); init.add(ALOAD_0); init.add(DUP); init.add(GETFIELD,me.field("readPages",Type.INT.makeArray(2))); @@ -142,7 +142,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { } if(supportCall) - cg.addField("symbols",new Type.Class(hashClass),ACC_PRIVATE|ACC_STATIC|ACC_FINAL); + cg.addField("symbols",Type.instance(hashClass),PRIVATE|STATIC|FINAL); int highestAddr = 0; @@ -169,7 +169,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { // Finish clinit if(supportCall) { - Type.Class hash = new Type.Class(hashClass); + Type.Class hash = Type.instance(hashClass).asClass(); clinit.add(NEW,hash); clinit.add(DUP); clinit.add(DUP); @@ -197,7 +197,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { ELF.SHeader text = elf.sectionWithName(".text"); // Trampoline - MethodGen tramp = cg.addMethod("trampoline",Type.VOID,Type.NO_ARGS,ACC_PRIVATE); + MethodGen tramp = cg.addMethod("trampoline",Type.VOID,Type.NO_ARGS,PRIVATE); int start = tramp.size(); tramp.add(ALOAD_0); @@ -214,7 +214,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { int beg = text.addr >>> methodShift; int end = ((text.addr + text.size + maxBytesPerMethod - 1) >>> methodShift); - MethodGen.TSI tsi = new MethodGen.TSI(beg,end-1); + MethodGen.Switch.Table tsi = new MethodGen.Switch.Table(beg,end-1); tramp.add(TABLESWITCH,tsi); for(int n=beg;n - tramp.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); + tramp.add(INVOKESPECIAL,Type.instance("org.ibex.nestedvm.Runtime$ExecutionException").asClass().method("",Type.VOID,new Type[]{Type.STRING})); tramp.add(ATHROW); addConstReturnMethod("gp",gp.addr); @@ -255,8 +255,8 @@ public class ClassFileCompiler extends Compiler implements CGConst { } if(supportCall) { - Type.Class hashClassType = new Type.Class(hashClass); - MethodGen ls = cg.addMethod("lookupSymbol",Type.INT,new Type[]{Type.STRING},ACC_PROTECTED); + Type.Class hashClassType = Type.instance(hashClass).asClass(); + MethodGen ls = cg.addMethod("lookupSymbol",Type.INT,new Type[]{Type.STRING},PROTECTED); ls.add(GETSTATIC,me.field("symbols",hashClassType)); ls.add(ALOAD_1); ls.add(INVOKEVIRTUAL,hashClassType.method("get",Type.OBJECT,new Type[]{Type.OBJECT})); @@ -273,9 +273,9 @@ public class ClassFileCompiler extends Compiler implements CGConst { // Kind of a hack, referencing dup() gets us all the fields for free // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime$CPUState.dup - Type.Class cpuStateType = new Type.Class("org.ibex.nestedvm.Runtime$CPUState"); - MethodGen setCPUState = cg.addMethod("setCPUState",Type.VOID,new Type[]{cpuStateType},ACC_PROTECTED); - MethodGen getCPUState = cg.addMethod("getCPUState",Type.VOID,new Type[]{cpuStateType},ACC_PROTECTED); + Type.Class cpuStateType = Type.instance("org.ibex.nestedvm.Runtime$CPUState").asClass(); + MethodGen setCPUState = cg.addMethod("setCPUState",Type.VOID,new Type[]{cpuStateType},PROTECTED); + MethodGen getCPUState = cg.addMethod("getCPUState",Type.VOID,new Type[]{cpuStateType},PROTECTED); setCPUState.add(ALOAD_1); getCPUState.add(ALOAD_1); @@ -337,7 +337,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { getCPUState.add(RETURN); - MethodGen execute = cg.addMethod("_execute",Type.VOID,Type.NO_ARGS,ACC_PROTECTED); + MethodGen execute = cg.addMethod("_execute",Type.VOID,Type.NO_ARGS,PROTECTED); int tryStart = execute.size(); execute.add(ALOAD_0); execute.add(INVOKESPECIAL,me.method("trampoline",Type.VOID,Type.NO_ARGS)); @@ -346,31 +346,31 @@ public class ClassFileCompiler extends Compiler implements CGConst { int catchInsn = execute.size(); execute.add(ASTORE_1); - execute.add(NEW, new Type.Class("org.ibex.nestedvm.Runtime$FaultException")); + execute.add(NEW, Type.instance("org.ibex.nestedvm.Runtime$FaultException")); execute.add(DUP); execute.add(ALOAD_1); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime$FaultException. - execute.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$FaultException").method("",Type.VOID,new Type[]{new Type.Class("java.lang.RuntimeException")})); + execute.add(INVOKESPECIAL,Type.instance("org.ibex.nestedvm.Runtime$FaultException").asClass().method("",Type.VOID,new Type[]{Type.instance("java.lang.RuntimeException")})); execute.add(ATHROW); - execute.addExceptionHandler(tryStart,tryEnd,catchInsn,new Type.Class("java.lang.RuntimeException")); - execute.addThrow(new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException")); + execute.addExceptionHandler(tryStart,tryEnd,catchInsn,Type.instance("java.lang.RuntimeException").asClass()); + execute.addThrow(Type.instance("org.ibex.nestedvm.Runtime$ExecutionException").asClass()); - MethodGen main = cg.addMethod("main",Type.VOID,new Type[]{Type.STRING.makeArray()},ACC_STATIC|ACC_PUBLIC); + MethodGen main = cg.addMethod("main",Type.VOID,new Type[]{Type.STRING.makeArray()},STATIC|PUBLIC); main.add(NEW,me); main.add(DUP); main.add(INVOKESPECIAL,me.method("",Type.VOID,Type.NO_ARGS)); main.add(LDC,fullClassName); main.add(ALOAD_0); if(unixRuntime) { - Type.Class ur = new Type.Class("org.ibex.nestedvm.UnixRuntime"); + Type.Class ur = Type.instance("org.ibex.nestedvm.UnixRuntime").asClass(); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime.runAndExec main.add(INVOKESTATIC,ur.method("runAndExec",Type.INT,new Type[]{ur,Type.STRING,Type.STRING.makeArray()})); } else { // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime.run main.add(INVOKEVIRTUAL,me.method("run",Type.INT,new Type[]{Type.STRING,Type.STRING.makeArray()})); } - main.add(INVOKESTATIC,new Type.Class("java.lang.System").method("exit",Type.VOID,new Type[]{Type.INT})); + main.add(INVOKESTATIC,Type.instance("java.lang.System").asClass().method("exit",Type.VOID,new Type[]{Type.INT})); main.add(RETURN); if(outDir != null) { @@ -382,7 +382,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { } private void addConstReturnMethod(String name, int val) { - MethodGen m = cg.addMethod(name,Type.INT,Type.NO_ARGS,ACC_PROTECTED); + MethodGen m = cg.addMethod(name,Type.INT,Type.NO_ARGS,PROTECTED); m.add(LDC,val); m.add(IRETURN); } @@ -405,12 +405,12 @@ public class ClassFileCompiler extends Compiler implements CGConst { sb.append((char) ((l>>>(7*(7-j)))&0x7f)); } String fieldname = "_data" + (++initDataCount); - cg.addField(fieldname,Type.INT.makeArray(),ACC_PRIVATE|ACC_STATIC|ACC_FINAL); + cg.addField(fieldname,Type.INT.makeArray(),PRIVATE|STATIC|FINAL); clinit.add(LDC,sb.toString()); clinit.add(LDC,segSize/4); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime.decodeData - clinit.add(INVOKESTATIC,new Type.Class("org.ibex.nestedvm.Runtime").method("decodeData",Type.INT.makeArray(),new Type[]{Type.STRING,Type.INT})); + clinit.add(INVOKESTATIC,Type.instance("org.ibex.nestedvm.Runtime").asClass().method("decodeData",Type.INT.makeArray(),new Type[]{Type.STRING,Type.INT})); clinit.add(PUTSTATIC,me.field(fieldname,Type.INT.makeArray())); init.add(ALOAD_0); init.add(GETSTATIC,me.field(fieldname,Type.INT.makeArray())); @@ -495,7 +495,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { startOfMethod = first & methodMask; endOfMethod = startOfMethod + maxBytesPerMethod; - mg = cg.addMethod("run_" + toHex(startOfMethod),Type.VOID,Type.NO_ARGS,ACC_PRIVATE|ACC_FINAL); + mg = cg.addMethod("run_" + toHex(startOfMethod),Type.VOID,Type.NO_ARGS,PRIVATE|FINAL); if(onePage) { mg.add(ALOAD_0); mg.add(GETFIELD,me.field("page",Type.INT.makeArray())); @@ -523,7 +523,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { } } - MethodGen.LSI lsi = new MethodGen.LSI(n); + MethodGen.Switch.Lookup lsi = new MethodGen.Switch.Lookup(n); System.arraycopy(buf,0,lsi.vals,0,n); System.arraycopy(targetBuf,0,lsi.targets,0,n); lsi.setDefaultTarget(defaultTarget = new MethodGen.PhantomTarget()); @@ -555,7 +555,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { defaultTarget.setTarget(mg.size()); if(debugCompiler) { - mg.add(NEW,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException")); + mg.add(NEW,Type.instance("org.ibex.nestedvm.Runtime$ExecutionException")); mg.add(DUP); mg.add(NEW,Type.STRINGBUFFER); mg.add(DUP); @@ -565,13 +565,13 @@ public class ClassFileCompiler extends Compiler implements CGConst { mg.add(GETFIELD,me.field("pc",Type.INT)); mg.add(INVOKEVIRTUAL,Type.STRINGBUFFER.method("append",Type.STRINGBUFFER,new Type[]{Type.INT})); mg.add(INVOKEVIRTUAL,Type.STRINGBUFFER.method("toString",Type.STRING,Type.NO_ARGS)); - mg.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); + mg.add(INVOKESPECIAL,Type.instance("org.ibex.nestedvm.Runtime$ExecutionException").asClass().method("",Type.VOID,new Type[]{Type.STRING})); mg.add(ATHROW); } else { - mg.add(NEW,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException")); + mg.add(NEW,Type.instance("org.ibex.nestedvm.Runtime$ExecutionException")); mg.add(DUP); mg.add(LDC,"Jumped to invalid address"); - mg.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); + mg.add(INVOKESPECIAL,Type.instance("org.ibex.nestedvm.Runtime$ExecutionException").asClass().method("",Type.VOID,new Type[]{Type.STRING})); mg.add(ATHROW); } @@ -769,10 +769,10 @@ public class ClassFileCompiler extends Compiler implements CGConst { mg.setArg(b1,mg.size()); break; case 13: // BREAK - mg.add(NEW,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException")); + mg.add(NEW,Type.instance("org.ibex.nestedvm.Runtime$ExecutionException")); mg.add(DUP); mg.add(LDC,"BREAK Code " + toHex(breakCode)); - mg.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); + mg.add(INVOKESPECIAL,Type.instance("org.ibex.nestedvm.Runtime$ExecutionException").asClass().method("",Type.VOID,new Type[]{Type.STRING})); mg.add(ATHROW); ret |= UNREACHABLE; break; @@ -1287,7 +1287,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { setDouble(); break; case 36: { // CVT.W.D - MethodGen.TSI tsi = new MethodGen.TSI(0,3); + MethodGen.Switch.Table tsi = new MethodGen.Switch.Table(0,3); preSetReg(F+fd); pushDouble(F+fs,d); pushReg(FCSR); @@ -1298,7 +1298,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { // Round towards plus infinity tsi.setTarget(2,mg.size()); if(!d) mg.add(F2D); // Ugh.. java.lang.Math doesn't have a float ceil/floor - mg.add(INVOKESTATIC,new Type.Class("java.lang.Math").method("ceil",Type.DOUBLE,new Type[]{Type.DOUBLE})); + mg.add(INVOKESTATIC,Type.instance("java.lang.Math").asClass().method("ceil",Type.DOUBLE,new Type[]{Type.DOUBLE})); if(!d) mg.add(D2F); b1 = mg.add(GOTO); @@ -1311,7 +1311,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { // Round towards minus infinity tsi.setTarget(3,mg.size()); if(!d) mg.add(F2D); - mg.add(INVOKESTATIC,new Type.Class("java.lang.Math").method("floor",Type.DOUBLE,new Type[]{Type.DOUBLE})); + mg.add(INVOKESTATIC,Type.instance("java.lang.Math").asClass().method("floor",Type.DOUBLE,new Type[]{Type.DOUBLE})); if(!d) mg.add(D2F); tsi.setTarget(1,mg.size()); @@ -1887,7 +1887,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { mg.add(GETFIELD,me.field(regField[reg],Type.FLOAT)); } else { pushReg(reg); - mg.add(INVOKESTATIC,new Type.Class("java.lang.Float").method("intBitsToFloat",Type.FLOAT,new Type[]{Type.INT})); + mg.add(INVOKESTATIC,Type.instance("java.lang.Float").asClass().method("intBitsToFloat",Type.FLOAT,new Type[]{Type.INT})); } return h; } -- 1.7.10.4 From 1ce2af81cb3a057a005c64e825e8451e3af11238 Mon Sep 17 00:00:00 2001 From: adam Date: Sat, 2 Jul 2005 01:52:05 -0700 Subject: [PATCH 13/16] UNDO: harmonize nestedvm and latest classgen changes darcs-hash:20050702085205-5007d-d68548e5de99629fb5ac1898818f178ea9907957.gz --- src/org/ibex/nestedvm/ClassFileCompiler.java | 98 +++++++++++++------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/src/org/ibex/nestedvm/ClassFileCompiler.java b/src/org/ibex/nestedvm/ClassFileCompiler.java index 18d6670..32feb2e 100644 --- a/src/org/ibex/nestedvm/ClassFileCompiler.java +++ b/src/org/ibex/nestedvm/ClassFileCompiler.java @@ -62,7 +62,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { } private ClassFileCompiler(Seekable binary, String className) throws IOException { super(binary,className); - me = Type.instance(fullClassName).asClass(); + me = new Type.Class(fullClassName); } public void setWarnWriter(PrintStream warn) { this.warn = warn; } @@ -80,25 +80,25 @@ public class ClassFileCompiler extends Compiler implements CGConst { if(!pruneCases) throw new Exn("-o prunecases MUST be enabled for ClassFileCompiler"); // Class - Type.Class superClass = Type.instance(runtimeClass).asClass(); - cg = new ClassFile(me,superClass,PUBLIC|FINAL|SUPER); + Type.Class superClass = new Type.Class(runtimeClass); + cg = new ClassFile(me,superClass,ACC_PUBLIC|ACC_FINAL|ACC_SUPER); if(source != null) cg.setSourceFile(source); // Fields - cg.addField("pc",Type.INT,PRIVATE); - cg.addField("hi",Type.INT,PRIVATE); - cg.addField("lo",Type.INT,PRIVATE); - cg.addField("fcsr",Type.INT,PRIVATE); - for(int i=1;i<32;i++) cg.addField("r" + i,Type.INT,PRIVATE); - for(int i=0;i<32;i++) cg.addField("f" + i,singleFloat ? Type.FLOAT : Type.INT,PRIVATE); + cg.addField("pc",Type.INT,ACC_PRIVATE); + cg.addField("hi",Type.INT,ACC_PRIVATE); + cg.addField("lo",Type.INT,ACC_PRIVATE); + cg.addField("fcsr",Type.INT,ACC_PRIVATE); + for(int i=1;i<32;i++) cg.addField("r" + i,Type.INT,ACC_PRIVATE); + for(int i=0;i<32;i++) cg.addField("f" + i,singleFloat ? Type.FLOAT : Type.INT,ACC_PRIVATE); // - clinit = cg.addMethod("",Type.VOID,Type.NO_ARGS,PRIVATE|STATIC); + clinit = cg.addMethod("",Type.VOID,Type.NO_ARGS,ACC_PRIVATE|ACC_STATIC); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.UnixRuntime. // - init = cg.addMethod("",Type.VOID,Type.NO_ARGS,PUBLIC); + init = cg.addMethod("",Type.VOID,Type.NO_ARGS,ACC_PUBLIC); init.add(ALOAD_0); init.add(LDC,pageSize); init.add(LDC,totalPages); @@ -106,7 +106,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { init.add(RETURN); // (Z) - init = cg.addMethod("",Type.VOID,new Type[]{Type.BOOLEAN},PUBLIC); + init = cg.addMethod("",Type.VOID,new Type[]{Type.BOOLEAN},ACC_PUBLIC); init.add(ALOAD_0); init.add(LDC,pageSize); init.add(LDC,totalPages); @@ -115,7 +115,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { init.add(RETURN); // (II) - init = cg.addMethod("",Type.VOID,new Type[]{Type.INT,Type.INT},PUBLIC); + init = cg.addMethod("",Type.VOID,new Type[]{Type.INT,Type.INT},ACC_PUBLIC); init.add(ALOAD_0); init.add(ILOAD_1); init.add(ILOAD_2); @@ -124,7 +124,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { init.add(RETURN); // (IIZ) - init = cg.addMethod("",Type.VOID,new Type[]{Type.INT,Type.INT,Type.BOOLEAN},PUBLIC); + init = cg.addMethod("",Type.VOID,new Type[]{Type.INT,Type.INT,Type.BOOLEAN},ACC_PUBLIC); init.add(ALOAD_0); init.add(ILOAD_1); init.add(ILOAD_2); @@ -132,7 +132,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { init.add(INVOKESPECIAL,superClass.method("",Type.VOID,new Type[]{Type.INT,Type.INT,Type.BOOLEAN})); if(onePage) { - cg.addField("page",Type.INT.makeArray(),PRIVATE|FINAL); + cg.addField("page",Type.INT.makeArray(),ACC_PRIVATE|ACC_FINAL); init.add(ALOAD_0); init.add(DUP); init.add(GETFIELD,me.field("readPages",Type.INT.makeArray(2))); @@ -142,7 +142,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { } if(supportCall) - cg.addField("symbols",Type.instance(hashClass),PRIVATE|STATIC|FINAL); + cg.addField("symbols",new Type.Class(hashClass),ACC_PRIVATE|ACC_STATIC|ACC_FINAL); int highestAddr = 0; @@ -169,7 +169,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { // Finish clinit if(supportCall) { - Type.Class hash = Type.instance(hashClass).asClass(); + Type.Class hash = new Type.Class(hashClass); clinit.add(NEW,hash); clinit.add(DUP); clinit.add(DUP); @@ -197,7 +197,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { ELF.SHeader text = elf.sectionWithName(".text"); // Trampoline - MethodGen tramp = cg.addMethod("trampoline",Type.VOID,Type.NO_ARGS,PRIVATE); + MethodGen tramp = cg.addMethod("trampoline",Type.VOID,Type.NO_ARGS,ACC_PRIVATE); int start = tramp.size(); tramp.add(ALOAD_0); @@ -214,7 +214,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { int beg = text.addr >>> methodShift; int end = ((text.addr + text.size + maxBytesPerMethod - 1) >>> methodShift); - MethodGen.Switch.Table tsi = new MethodGen.Switch.Table(beg,end-1); + MethodGen.TSI tsi = new MethodGen.TSI(beg,end-1); tramp.add(TABLESWITCH,tsi); for(int n=beg;n - tramp.add(INVOKESPECIAL,Type.instance("org.ibex.nestedvm.Runtime$ExecutionException").asClass().method("",Type.VOID,new Type[]{Type.STRING})); + tramp.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); tramp.add(ATHROW); addConstReturnMethod("gp",gp.addr); @@ -255,8 +255,8 @@ public class ClassFileCompiler extends Compiler implements CGConst { } if(supportCall) { - Type.Class hashClassType = Type.instance(hashClass).asClass(); - MethodGen ls = cg.addMethod("lookupSymbol",Type.INT,new Type[]{Type.STRING},PROTECTED); + Type.Class hashClassType = new Type.Class(hashClass); + MethodGen ls = cg.addMethod("lookupSymbol",Type.INT,new Type[]{Type.STRING},ACC_PROTECTED); ls.add(GETSTATIC,me.field("symbols",hashClassType)); ls.add(ALOAD_1); ls.add(INVOKEVIRTUAL,hashClassType.method("get",Type.OBJECT,new Type[]{Type.OBJECT})); @@ -273,9 +273,9 @@ public class ClassFileCompiler extends Compiler implements CGConst { // Kind of a hack, referencing dup() gets us all the fields for free // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime$CPUState.dup - Type.Class cpuStateType = Type.instance("org.ibex.nestedvm.Runtime$CPUState").asClass(); - MethodGen setCPUState = cg.addMethod("setCPUState",Type.VOID,new Type[]{cpuStateType},PROTECTED); - MethodGen getCPUState = cg.addMethod("getCPUState",Type.VOID,new Type[]{cpuStateType},PROTECTED); + Type.Class cpuStateType = new Type.Class("org.ibex.nestedvm.Runtime$CPUState"); + MethodGen setCPUState = cg.addMethod("setCPUState",Type.VOID,new Type[]{cpuStateType},ACC_PROTECTED); + MethodGen getCPUState = cg.addMethod("getCPUState",Type.VOID,new Type[]{cpuStateType},ACC_PROTECTED); setCPUState.add(ALOAD_1); getCPUState.add(ALOAD_1); @@ -337,7 +337,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { getCPUState.add(RETURN); - MethodGen execute = cg.addMethod("_execute",Type.VOID,Type.NO_ARGS,PROTECTED); + MethodGen execute = cg.addMethod("_execute",Type.VOID,Type.NO_ARGS,ACC_PROTECTED); int tryStart = execute.size(); execute.add(ALOAD_0); execute.add(INVOKESPECIAL,me.method("trampoline",Type.VOID,Type.NO_ARGS)); @@ -346,31 +346,31 @@ public class ClassFileCompiler extends Compiler implements CGConst { int catchInsn = execute.size(); execute.add(ASTORE_1); - execute.add(NEW, Type.instance("org.ibex.nestedvm.Runtime$FaultException")); + execute.add(NEW, new Type.Class("org.ibex.nestedvm.Runtime$FaultException")); execute.add(DUP); execute.add(ALOAD_1); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime$FaultException. - execute.add(INVOKESPECIAL,Type.instance("org.ibex.nestedvm.Runtime$FaultException").asClass().method("",Type.VOID,new Type[]{Type.instance("java.lang.RuntimeException")})); + execute.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$FaultException").method("",Type.VOID,new Type[]{new Type.Class("java.lang.RuntimeException")})); execute.add(ATHROW); - execute.addExceptionHandler(tryStart,tryEnd,catchInsn,Type.instance("java.lang.RuntimeException").asClass()); - execute.addThrow(Type.instance("org.ibex.nestedvm.Runtime$ExecutionException").asClass()); + execute.addExceptionHandler(tryStart,tryEnd,catchInsn,new Type.Class("java.lang.RuntimeException")); + execute.addThrow(new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException")); - MethodGen main = cg.addMethod("main",Type.VOID,new Type[]{Type.STRING.makeArray()},STATIC|PUBLIC); + MethodGen main = cg.addMethod("main",Type.VOID,new Type[]{Type.STRING.makeArray()},ACC_STATIC|ACC_PUBLIC); main.add(NEW,me); main.add(DUP); main.add(INVOKESPECIAL,me.method("",Type.VOID,Type.NO_ARGS)); main.add(LDC,fullClassName); main.add(ALOAD_0); if(unixRuntime) { - Type.Class ur = Type.instance("org.ibex.nestedvm.UnixRuntime").asClass(); + Type.Class ur = new Type.Class("org.ibex.nestedvm.UnixRuntime"); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime.runAndExec main.add(INVOKESTATIC,ur.method("runAndExec",Type.INT,new Type[]{ur,Type.STRING,Type.STRING.makeArray()})); } else { // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime.run main.add(INVOKEVIRTUAL,me.method("run",Type.INT,new Type[]{Type.STRING,Type.STRING.makeArray()})); } - main.add(INVOKESTATIC,Type.instance("java.lang.System").asClass().method("exit",Type.VOID,new Type[]{Type.INT})); + main.add(INVOKESTATIC,new Type.Class("java.lang.System").method("exit",Type.VOID,new Type[]{Type.INT})); main.add(RETURN); if(outDir != null) { @@ -382,7 +382,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { } private void addConstReturnMethod(String name, int val) { - MethodGen m = cg.addMethod(name,Type.INT,Type.NO_ARGS,PROTECTED); + MethodGen m = cg.addMethod(name,Type.INT,Type.NO_ARGS,ACC_PROTECTED); m.add(LDC,val); m.add(IRETURN); } @@ -405,12 +405,12 @@ public class ClassFileCompiler extends Compiler implements CGConst { sb.append((char) ((l>>>(7*(7-j)))&0x7f)); } String fieldname = "_data" + (++initDataCount); - cg.addField(fieldname,Type.INT.makeArray(),PRIVATE|STATIC|FINAL); + cg.addField(fieldname,Type.INT.makeArray(),ACC_PRIVATE|ACC_STATIC|ACC_FINAL); clinit.add(LDC,sb.toString()); clinit.add(LDC,segSize/4); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime.decodeData - clinit.add(INVOKESTATIC,Type.instance("org.ibex.nestedvm.Runtime").asClass().method("decodeData",Type.INT.makeArray(),new Type[]{Type.STRING,Type.INT})); + clinit.add(INVOKESTATIC,new Type.Class("org.ibex.nestedvm.Runtime").method("decodeData",Type.INT.makeArray(),new Type[]{Type.STRING,Type.INT})); clinit.add(PUTSTATIC,me.field(fieldname,Type.INT.makeArray())); init.add(ALOAD_0); init.add(GETSTATIC,me.field(fieldname,Type.INT.makeArray())); @@ -495,7 +495,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { startOfMethod = first & methodMask; endOfMethod = startOfMethod + maxBytesPerMethod; - mg = cg.addMethod("run_" + toHex(startOfMethod),Type.VOID,Type.NO_ARGS,PRIVATE|FINAL); + mg = cg.addMethod("run_" + toHex(startOfMethod),Type.VOID,Type.NO_ARGS,ACC_PRIVATE|ACC_FINAL); if(onePage) { mg.add(ALOAD_0); mg.add(GETFIELD,me.field("page",Type.INT.makeArray())); @@ -523,7 +523,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { } } - MethodGen.Switch.Lookup lsi = new MethodGen.Switch.Lookup(n); + MethodGen.LSI lsi = new MethodGen.LSI(n); System.arraycopy(buf,0,lsi.vals,0,n); System.arraycopy(targetBuf,0,lsi.targets,0,n); lsi.setDefaultTarget(defaultTarget = new MethodGen.PhantomTarget()); @@ -555,7 +555,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { defaultTarget.setTarget(mg.size()); if(debugCompiler) { - mg.add(NEW,Type.instance("org.ibex.nestedvm.Runtime$ExecutionException")); + mg.add(NEW,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException")); mg.add(DUP); mg.add(NEW,Type.STRINGBUFFER); mg.add(DUP); @@ -565,13 +565,13 @@ public class ClassFileCompiler extends Compiler implements CGConst { mg.add(GETFIELD,me.field("pc",Type.INT)); mg.add(INVOKEVIRTUAL,Type.STRINGBUFFER.method("append",Type.STRINGBUFFER,new Type[]{Type.INT})); mg.add(INVOKEVIRTUAL,Type.STRINGBUFFER.method("toString",Type.STRING,Type.NO_ARGS)); - mg.add(INVOKESPECIAL,Type.instance("org.ibex.nestedvm.Runtime$ExecutionException").asClass().method("",Type.VOID,new Type[]{Type.STRING})); + mg.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); mg.add(ATHROW); } else { - mg.add(NEW,Type.instance("org.ibex.nestedvm.Runtime$ExecutionException")); + mg.add(NEW,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException")); mg.add(DUP); mg.add(LDC,"Jumped to invalid address"); - mg.add(INVOKESPECIAL,Type.instance("org.ibex.nestedvm.Runtime$ExecutionException").asClass().method("",Type.VOID,new Type[]{Type.STRING})); + mg.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); mg.add(ATHROW); } @@ -769,10 +769,10 @@ public class ClassFileCompiler extends Compiler implements CGConst { mg.setArg(b1,mg.size()); break; case 13: // BREAK - mg.add(NEW,Type.instance("org.ibex.nestedvm.Runtime$ExecutionException")); + mg.add(NEW,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException")); mg.add(DUP); mg.add(LDC,"BREAK Code " + toHex(breakCode)); - mg.add(INVOKESPECIAL,Type.instance("org.ibex.nestedvm.Runtime$ExecutionException").asClass().method("",Type.VOID,new Type[]{Type.STRING})); + mg.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); mg.add(ATHROW); ret |= UNREACHABLE; break; @@ -1287,7 +1287,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { setDouble(); break; case 36: { // CVT.W.D - MethodGen.Switch.Table tsi = new MethodGen.Switch.Table(0,3); + MethodGen.TSI tsi = new MethodGen.TSI(0,3); preSetReg(F+fd); pushDouble(F+fs,d); pushReg(FCSR); @@ -1298,7 +1298,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { // Round towards plus infinity tsi.setTarget(2,mg.size()); if(!d) mg.add(F2D); // Ugh.. java.lang.Math doesn't have a float ceil/floor - mg.add(INVOKESTATIC,Type.instance("java.lang.Math").asClass().method("ceil",Type.DOUBLE,new Type[]{Type.DOUBLE})); + mg.add(INVOKESTATIC,new Type.Class("java.lang.Math").method("ceil",Type.DOUBLE,new Type[]{Type.DOUBLE})); if(!d) mg.add(D2F); b1 = mg.add(GOTO); @@ -1311,7 +1311,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { // Round towards minus infinity tsi.setTarget(3,mg.size()); if(!d) mg.add(F2D); - mg.add(INVOKESTATIC,Type.instance("java.lang.Math").asClass().method("floor",Type.DOUBLE,new Type[]{Type.DOUBLE})); + mg.add(INVOKESTATIC,new Type.Class("java.lang.Math").method("floor",Type.DOUBLE,new Type[]{Type.DOUBLE})); if(!d) mg.add(D2F); tsi.setTarget(1,mg.size()); @@ -1887,7 +1887,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { mg.add(GETFIELD,me.field(regField[reg],Type.FLOAT)); } else { pushReg(reg); - mg.add(INVOKESTATIC,Type.instance("java.lang.Float").asClass().method("intBitsToFloat",Type.FLOAT,new Type[]{Type.INT})); + mg.add(INVOKESTATIC,new Type.Class("java.lang.Float").method("intBitsToFloat",Type.FLOAT,new Type[]{Type.INT})); } return h; } -- 1.7.10.4 From c690989b7973d1a2e5aed45afe51f782f064a127 Mon Sep 17 00:00:00 2001 From: brian Date: Sat, 2 Jul 2005 18:10:27 -0700 Subject: [PATCH 14/16] update nestedvm for new classgen api again darcs-hash:20050703011027-24bed-bc8d5bb3bfb478b680ee06a7c570cb7668b565ce.gz --- src/org/ibex/nestedvm/ClassFileCompiler.java | 98 +++++++++++++------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/src/org/ibex/nestedvm/ClassFileCompiler.java b/src/org/ibex/nestedvm/ClassFileCompiler.java index 32feb2e..8695445 100644 --- a/src/org/ibex/nestedvm/ClassFileCompiler.java +++ b/src/org/ibex/nestedvm/ClassFileCompiler.java @@ -62,7 +62,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { } private ClassFileCompiler(Seekable binary, String className) throws IOException { super(binary,className); - me = new Type.Class(fullClassName); + me = Type.fromClass(fullClassName); } public void setWarnWriter(PrintStream warn) { this.warn = warn; } @@ -80,25 +80,25 @@ public class ClassFileCompiler extends Compiler implements CGConst { if(!pruneCases) throw new Exn("-o prunecases MUST be enabled for ClassFileCompiler"); // Class - Type.Class superClass = new Type.Class(runtimeClass); - cg = new ClassFile(me,superClass,ACC_PUBLIC|ACC_FINAL|ACC_SUPER); + Type.Class superClass = Type.fromClass(runtimeClass); + cg = new ClassFile(me,superClass,PUBLIC|FINAL|SUPER); if(source != null) cg.setSourceFile(source); // Fields - cg.addField("pc",Type.INT,ACC_PRIVATE); - cg.addField("hi",Type.INT,ACC_PRIVATE); - cg.addField("lo",Type.INT,ACC_PRIVATE); - cg.addField("fcsr",Type.INT,ACC_PRIVATE); - for(int i=1;i<32;i++) cg.addField("r" + i,Type.INT,ACC_PRIVATE); - for(int i=0;i<32;i++) cg.addField("f" + i,singleFloat ? Type.FLOAT : Type.INT,ACC_PRIVATE); + cg.addField("pc",Type.INT,PRIVATE); + cg.addField("hi",Type.INT,PRIVATE); + cg.addField("lo",Type.INT,PRIVATE); + cg.addField("fcsr",Type.INT,PRIVATE); + for(int i=1;i<32;i++) cg.addField("r" + i,Type.INT,PRIVATE); + for(int i=0;i<32;i++) cg.addField("f" + i,singleFloat ? Type.FLOAT : Type.INT,PRIVATE); // - clinit = cg.addMethod("",Type.VOID,Type.NO_ARGS,ACC_PRIVATE|ACC_STATIC); + clinit = cg.addMethod("",Type.VOID,Type.NO_ARGS,PRIVATE|STATIC); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.UnixRuntime. // - init = cg.addMethod("",Type.VOID,Type.NO_ARGS,ACC_PUBLIC); + init = cg.addMethod("",Type.VOID,Type.NO_ARGS,PUBLIC); init.add(ALOAD_0); init.add(LDC,pageSize); init.add(LDC,totalPages); @@ -106,7 +106,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { init.add(RETURN); // (Z) - init = cg.addMethod("",Type.VOID,new Type[]{Type.BOOLEAN},ACC_PUBLIC); + init = cg.addMethod("",Type.VOID,new Type[]{Type.BOOLEAN},PUBLIC); init.add(ALOAD_0); init.add(LDC,pageSize); init.add(LDC,totalPages); @@ -115,7 +115,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { init.add(RETURN); // (II) - init = cg.addMethod("",Type.VOID,new Type[]{Type.INT,Type.INT},ACC_PUBLIC); + init = cg.addMethod("",Type.VOID,new Type[]{Type.INT,Type.INT},PUBLIC); init.add(ALOAD_0); init.add(ILOAD_1); init.add(ILOAD_2); @@ -124,7 +124,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { init.add(RETURN); // (IIZ) - init = cg.addMethod("",Type.VOID,new Type[]{Type.INT,Type.INT,Type.BOOLEAN},ACC_PUBLIC); + init = cg.addMethod("",Type.VOID,new Type[]{Type.INT,Type.INT,Type.BOOLEAN},PUBLIC); init.add(ALOAD_0); init.add(ILOAD_1); init.add(ILOAD_2); @@ -132,7 +132,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { init.add(INVOKESPECIAL,superClass.method("",Type.VOID,new Type[]{Type.INT,Type.INT,Type.BOOLEAN})); if(onePage) { - cg.addField("page",Type.INT.makeArray(),ACC_PRIVATE|ACC_FINAL); + cg.addField("page",Type.INT.makeArray(),PRIVATE|FINAL); init.add(ALOAD_0); init.add(DUP); init.add(GETFIELD,me.field("readPages",Type.INT.makeArray(2))); @@ -142,7 +142,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { } if(supportCall) - cg.addField("symbols",new Type.Class(hashClass),ACC_PRIVATE|ACC_STATIC|ACC_FINAL); + cg.addField("symbols",Type.fromClass(hashClass),PRIVATE|STATIC|FINAL); int highestAddr = 0; @@ -169,7 +169,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { // Finish clinit if(supportCall) { - Type.Class hash = new Type.Class(hashClass); + Type.Class hash = Type.fromClass(hashClass); clinit.add(NEW,hash); clinit.add(DUP); clinit.add(DUP); @@ -197,7 +197,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { ELF.SHeader text = elf.sectionWithName(".text"); // Trampoline - MethodGen tramp = cg.addMethod("trampoline",Type.VOID,Type.NO_ARGS,ACC_PRIVATE); + MethodGen tramp = cg.addMethod("trampoline",Type.VOID,Type.NO_ARGS,PRIVATE); int start = tramp.size(); tramp.add(ALOAD_0); @@ -214,7 +214,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { int beg = text.addr >>> methodShift; int end = ((text.addr + text.size + maxBytesPerMethod - 1) >>> methodShift); - MethodGen.TSI tsi = new MethodGen.TSI(beg,end-1); + MethodGen.Switch.Table tsi = new MethodGen.Switch.Table(beg,end-1); tramp.add(TABLESWITCH,tsi); for(int n=beg;n - tramp.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); + tramp.add(INVOKESPECIAL,Type.fromClass("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); tramp.add(ATHROW); addConstReturnMethod("gp",gp.addr); @@ -255,8 +255,8 @@ public class ClassFileCompiler extends Compiler implements CGConst { } if(supportCall) { - Type.Class hashClassType = new Type.Class(hashClass); - MethodGen ls = cg.addMethod("lookupSymbol",Type.INT,new Type[]{Type.STRING},ACC_PROTECTED); + Type.Class hashClassType = Type.fromClass(hashClass); + MethodGen ls = cg.addMethod("lookupSymbol",Type.INT,new Type[]{Type.STRING},PROTECTED); ls.add(GETSTATIC,me.field("symbols",hashClassType)); ls.add(ALOAD_1); ls.add(INVOKEVIRTUAL,hashClassType.method("get",Type.OBJECT,new Type[]{Type.OBJECT})); @@ -273,9 +273,9 @@ public class ClassFileCompiler extends Compiler implements CGConst { // Kind of a hack, referencing dup() gets us all the fields for free // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime$CPUState.dup - Type.Class cpuStateType = new Type.Class("org.ibex.nestedvm.Runtime$CPUState"); - MethodGen setCPUState = cg.addMethod("setCPUState",Type.VOID,new Type[]{cpuStateType},ACC_PROTECTED); - MethodGen getCPUState = cg.addMethod("getCPUState",Type.VOID,new Type[]{cpuStateType},ACC_PROTECTED); + Type.Class cpuStateType = Type.fromClass("org.ibex.nestedvm.Runtime$CPUState"); + MethodGen setCPUState = cg.addMethod("setCPUState",Type.VOID,new Type[]{cpuStateType},PROTECTED); + MethodGen getCPUState = cg.addMethod("getCPUState",Type.VOID,new Type[]{cpuStateType},PROTECTED); setCPUState.add(ALOAD_1); getCPUState.add(ALOAD_1); @@ -337,7 +337,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { getCPUState.add(RETURN); - MethodGen execute = cg.addMethod("_execute",Type.VOID,Type.NO_ARGS,ACC_PROTECTED); + MethodGen execute = cg.addMethod("_execute",Type.VOID,Type.NO_ARGS,PROTECTED); int tryStart = execute.size(); execute.add(ALOAD_0); execute.add(INVOKESPECIAL,me.method("trampoline",Type.VOID,Type.NO_ARGS)); @@ -346,31 +346,31 @@ public class ClassFileCompiler extends Compiler implements CGConst { int catchInsn = execute.size(); execute.add(ASTORE_1); - execute.add(NEW, new Type.Class("org.ibex.nestedvm.Runtime$FaultException")); + execute.add(NEW, Type.fromClass("org.ibex.nestedvm.Runtime$FaultException")); execute.add(DUP); execute.add(ALOAD_1); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime$FaultException. - execute.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$FaultException").method("",Type.VOID,new Type[]{new Type.Class("java.lang.RuntimeException")})); + execute.add(INVOKESPECIAL,Type.fromClass("org.ibex.nestedvm.Runtime$FaultException").method("",Type.VOID,new Type[]{Type.fromClass("java.lang.RuntimeException")})); execute.add(ATHROW); - execute.addExceptionHandler(tryStart,tryEnd,catchInsn,new Type.Class("java.lang.RuntimeException")); - execute.addThrow(new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException")); + execute.addExceptionHandler(tryStart,tryEnd,catchInsn,Type.fromClass("java.lang.RuntimeException")); + execute.addThrow(Type.fromClass("org.ibex.nestedvm.Runtime$ExecutionException")); - MethodGen main = cg.addMethod("main",Type.VOID,new Type[]{Type.STRING.makeArray()},ACC_STATIC|ACC_PUBLIC); + MethodGen main = cg.addMethod("main",Type.VOID,new Type[]{Type.STRING.makeArray()},STATIC|PUBLIC); main.add(NEW,me); main.add(DUP); main.add(INVOKESPECIAL,me.method("",Type.VOID,Type.NO_ARGS)); main.add(LDC,fullClassName); main.add(ALOAD_0); if(unixRuntime) { - Type.Class ur = new Type.Class("org.ibex.nestedvm.UnixRuntime"); + Type.Class ur = Type.fromClass("org.ibex.nestedvm.UnixRuntime"); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime.runAndExec main.add(INVOKESTATIC,ur.method("runAndExec",Type.INT,new Type[]{ur,Type.STRING,Type.STRING.makeArray()})); } else { // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime.run main.add(INVOKEVIRTUAL,me.method("run",Type.INT,new Type[]{Type.STRING,Type.STRING.makeArray()})); } - main.add(INVOKESTATIC,new Type.Class("java.lang.System").method("exit",Type.VOID,new Type[]{Type.INT})); + main.add(INVOKESTATIC,Type.fromClass("java.lang.System").method("exit",Type.VOID,new Type[]{Type.INT})); main.add(RETURN); if(outDir != null) { @@ -382,7 +382,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { } private void addConstReturnMethod(String name, int val) { - MethodGen m = cg.addMethod(name,Type.INT,Type.NO_ARGS,ACC_PROTECTED); + MethodGen m = cg.addMethod(name,Type.INT,Type.NO_ARGS,PROTECTED); m.add(LDC,val); m.add(IRETURN); } @@ -405,12 +405,12 @@ public class ClassFileCompiler extends Compiler implements CGConst { sb.append((char) ((l>>>(7*(7-j)))&0x7f)); } String fieldname = "_data" + (++initDataCount); - cg.addField(fieldname,Type.INT.makeArray(),ACC_PRIVATE|ACC_STATIC|ACC_FINAL); + cg.addField(fieldname,Type.INT.makeArray(),PRIVATE|STATIC|FINAL); clinit.add(LDC,sb.toString()); clinit.add(LDC,segSize/4); // GCCLASS_HINT: org.ibex.nestedvm.RuntimeCompiler.compile org.ibex.nestedvm.Runtime.decodeData - clinit.add(INVOKESTATIC,new Type.Class("org.ibex.nestedvm.Runtime").method("decodeData",Type.INT.makeArray(),new Type[]{Type.STRING,Type.INT})); + clinit.add(INVOKESTATIC,Type.fromClass("org.ibex.nestedvm.Runtime").method("decodeData",Type.INT.makeArray(),new Type[]{Type.STRING,Type.INT})); clinit.add(PUTSTATIC,me.field(fieldname,Type.INT.makeArray())); init.add(ALOAD_0); init.add(GETSTATIC,me.field(fieldname,Type.INT.makeArray())); @@ -495,7 +495,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { startOfMethod = first & methodMask; endOfMethod = startOfMethod + maxBytesPerMethod; - mg = cg.addMethod("run_" + toHex(startOfMethod),Type.VOID,Type.NO_ARGS,ACC_PRIVATE|ACC_FINAL); + mg = cg.addMethod("run_" + toHex(startOfMethod),Type.VOID,Type.NO_ARGS,PRIVATE|FINAL); if(onePage) { mg.add(ALOAD_0); mg.add(GETFIELD,me.field("page",Type.INT.makeArray())); @@ -523,7 +523,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { } } - MethodGen.LSI lsi = new MethodGen.LSI(n); + MethodGen.Switch.Lookup lsi = new MethodGen.Switch.Lookup(n); System.arraycopy(buf,0,lsi.vals,0,n); System.arraycopy(targetBuf,0,lsi.targets,0,n); lsi.setDefaultTarget(defaultTarget = new MethodGen.PhantomTarget()); @@ -555,7 +555,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { defaultTarget.setTarget(mg.size()); if(debugCompiler) { - mg.add(NEW,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException")); + mg.add(NEW,Type.fromClass("org.ibex.nestedvm.Runtime$ExecutionException")); mg.add(DUP); mg.add(NEW,Type.STRINGBUFFER); mg.add(DUP); @@ -565,13 +565,13 @@ public class ClassFileCompiler extends Compiler implements CGConst { mg.add(GETFIELD,me.field("pc",Type.INT)); mg.add(INVOKEVIRTUAL,Type.STRINGBUFFER.method("append",Type.STRINGBUFFER,new Type[]{Type.INT})); mg.add(INVOKEVIRTUAL,Type.STRINGBUFFER.method("toString",Type.STRING,Type.NO_ARGS)); - mg.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); + mg.add(INVOKESPECIAL,Type.fromClass("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); mg.add(ATHROW); } else { - mg.add(NEW,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException")); + mg.add(NEW,Type.fromClass("org.ibex.nestedvm.Runtime$ExecutionException")); mg.add(DUP); mg.add(LDC,"Jumped to invalid address"); - mg.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); + mg.add(INVOKESPECIAL,Type.fromClass("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); mg.add(ATHROW); } @@ -769,10 +769,10 @@ public class ClassFileCompiler extends Compiler implements CGConst { mg.setArg(b1,mg.size()); break; case 13: // BREAK - mg.add(NEW,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException")); + mg.add(NEW,Type.fromClass("org.ibex.nestedvm.Runtime$ExecutionException")); mg.add(DUP); mg.add(LDC,"BREAK Code " + toHex(breakCode)); - mg.add(INVOKESPECIAL,new Type.Class("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); + mg.add(INVOKESPECIAL,Type.fromClass("org.ibex.nestedvm.Runtime$ExecutionException").method("",Type.VOID,new Type[]{Type.STRING})); mg.add(ATHROW); ret |= UNREACHABLE; break; @@ -1287,7 +1287,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { setDouble(); break; case 36: { // CVT.W.D - MethodGen.TSI tsi = new MethodGen.TSI(0,3); + MethodGen.Switch.Table tsi = new MethodGen.Switch.Table(0,3); preSetReg(F+fd); pushDouble(F+fs,d); pushReg(FCSR); @@ -1298,7 +1298,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { // Round towards plus infinity tsi.setTarget(2,mg.size()); if(!d) mg.add(F2D); // Ugh.. java.lang.Math doesn't have a float ceil/floor - mg.add(INVOKESTATIC,new Type.Class("java.lang.Math").method("ceil",Type.DOUBLE,new Type[]{Type.DOUBLE})); + mg.add(INVOKESTATIC,Type.fromClass("java.lang.Math").method("ceil",Type.DOUBLE,new Type[]{Type.DOUBLE})); if(!d) mg.add(D2F); b1 = mg.add(GOTO); @@ -1311,7 +1311,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { // Round towards minus infinity tsi.setTarget(3,mg.size()); if(!d) mg.add(F2D); - mg.add(INVOKESTATIC,new Type.Class("java.lang.Math").method("floor",Type.DOUBLE,new Type[]{Type.DOUBLE})); + mg.add(INVOKESTATIC,Type.fromClass("java.lang.Math").method("floor",Type.DOUBLE,new Type[]{Type.DOUBLE})); if(!d) mg.add(D2F); tsi.setTarget(1,mg.size()); @@ -1887,7 +1887,7 @@ public class ClassFileCompiler extends Compiler implements CGConst { mg.add(GETFIELD,me.field(regField[reg],Type.FLOAT)); } else { pushReg(reg); - mg.add(INVOKESTATIC,new Type.Class("java.lang.Float").method("intBitsToFloat",Type.FLOAT,new Type[]{Type.INT})); + mg.add(INVOKESTATIC,Type.fromClass("java.lang.Float").method("intBitsToFloat",Type.FLOAT,new Type[]{Type.INT})); } return h; } -- 1.7.10.4 From 8817b8182ec910e54686e834e4a21efb0ab2fde8 Mon Sep 17 00:00:00 2001 From: brian Date: Mon, 14 Nov 2005 19:03:30 -0800 Subject: [PATCH 15/16] add gmp to makefile darcs-hash:20051115030330-24bed-c019af6fea4ec3b0bfea036ccc9990444f5a8dac.gz --- Makefile | 4 ++++ upstream/Makefile | 13 ++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 3cdb291..e2edde7 100644 --- a/Makefile +++ b/Makefile @@ -407,6 +407,10 @@ ntlmauth.jar: build/tests/NtlmAuth.class $(tasks)/build_darcs_gcclass .gcclass_h cd tmp/pruned && jar cfm ../../$@ ../../.manifest.ntlm . rm -f .manifest.ntlm +gmptest: $(tasks)/build_gmp + cd upstream/build/gmp && \ + make check TESTS_ENVIRONMENT="java -cp \"$(classpath)\" org.ibex.nestedvm.RuntimeCompiler" + # # Speed tests # diff --git a/upstream/Makefile b/upstream/Makefile index 930f219..76cab29 100644 --- a/upstream/Makefile +++ b/upstream/Makefile @@ -31,6 +31,10 @@ url_regex = ftp://ftp.zoo.toronto.edu/pub/regex.shar url_linpack = http://www.math.iastate.edu/burkardt/f_src/linpack_bench/linpack_bench.f +version_gmp = 4.1.4 +url_gmp = ftp://ftp.gnu.org/gnu/gmp/gmp-$(version_gmp).tar.gz +configure_gmp = --host=mips-unknown-elf + darcs_gcclass = http://darcs.brianweb.net/gcclass darcs_classgen = http://darcs.brianweb.net/classgen @@ -208,7 +212,14 @@ tasks/build_regex: tasks/download_regex tasks/build_newlib cp libregex.a $(usr)/mips-unknown-elf/lib touch $@ - +tasks/build_gmp: tasks/patch_gmp tasks/build_libc + cd build/gmp && \ + CFLAGS="$(MIPS_CFLAGS)" LDFLAGS="$(MIPS_LDFLAGS)" \ + ./configure --prefix=$(usr) $(configure_gmp) && \ + make && \ + make install exec_prefix=$(usr)/mips-unknown-elf includedir=$(usr)/mips-unknown-elf/include + touch $@ + # # Tests # These are simply here for convenience. They aren't required -- 1.7.10.4 From 89cf090a2142029423cd82020c0b891b82e1717c Mon Sep 17 00:00:00 2001 From: brian Date: Tue, 13 Dec 2005 23:21:36 -0800 Subject: [PATCH 16/16] build unix_runtime.jar darcs-hash:20051214072136-24bed-dfd839f3f4f19e1994f106f1dc6fa2420213685b.gz --- Makefile | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Makefile b/Makefile index e2edde7..0063dcf 100644 --- a/Makefile +++ b/Makefile @@ -199,6 +199,7 @@ env.sh: Makefile $(tasks)/build_gcc $(tasks)/build_libc build/org/ibex/nestedvm/ # runtime_classes = Runtime Registers UsermodeConstants util/Seekable +unix_runtime_classes = $(runtime_classes) UnixRuntime util/Platform util/InodeCache tex.jar: $(mips_objects) $(runtime_classes:%=build/org/ibex/nestedvm/%.class) build/tests/TeX.class echo -e "Manifest-Version: 1.0\nMain-Class: Tex\n" > .manifest @@ -214,6 +215,16 @@ runtime.jar: $(runtime_classes:%=build/org/ibex/nestedvm/%.class) org/ibex/nestedvm/Runtime\$$*.class \ org/ibex/nestedvm/util/Seekable\$$*.class +unix_runtime.jar: $(unix_runtime_classes:%=build/org/ibex/nestedvm/%.class) + cd build && jar cf ../$@ \ + $(unix_runtime_classes:%=org/ibex/nestedvm/%.class) \ + org/ibex/nestedvm/Runtime\$$*.class \ + org/ibex/nestedvm/util/Seekable\$$*.class \ + org/ibex/nestedvm/UnixRuntime\$$*.class \ + org/ibex/nestedvm/util/Platform\$$*.class + cd upstream/build/classgen/build && jar -uf ../../../../$@ \ + org/ibex/classgen/util/Sort*.class + .manifest: printf "Manifest-Version: 1.0\nMain-Class: org.ibex.nestedvm.RuntimeCompiler\n" > $@ -- 1.7.10.4