clarify licensing
[nestedvm.git] / src / org / ibex / nestedvm / Interpreter.java
index df9a111..2e8252f 100644 (file)
@@ -1,3 +1,7 @@
+// Copyright 2000-2005 the Contributors, as shown in the revision logs.
+// Licensed under the Apache 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
 // Copyright 2003 Brian Alliet
 // Based on org.xwt.imp.MIPS by Adam Megacz
 // Portions Copyright 2003 Adam Megacz
@@ -466,9 +470,10 @@ public class Interpreter extends UnixRuntime implements Cloneable {
                 } catch(RuntimeException e) {
                     tmp = memRead(addr&~3);
                 }
                 } catch(RuntimeException e) {
                     tmp = memRead(addr&~3);
                 }
-                switch(addr&2) {
+                switch(addr&3) {
                     case 0: tmp = (tmp>>>16)&0xffff; break;
                     case 2: tmp = (tmp>>> 0)&0xffff; break;
                     case 0: tmp = (tmp>>>16)&0xffff; break;
                     case 2: tmp = (tmp>>> 0)&0xffff; break;
+                    default: throw new ReadFaultException(addr);
                 }
                 if((tmp&0x8000)!=0) tmp |= 0xffff0000; // sign extend
                 r[rt] = tmp;
                 }
                 if((tmp&0x8000)!=0) tmp |= 0xffff0000; // sign extend
                 r[rt] = tmp;
@@ -519,9 +524,10 @@ public class Interpreter extends UnixRuntime implements Cloneable {
                 } catch(RuntimeException e) {
                     tmp = memRead(addr&~3);
                 }
                 } catch(RuntimeException e) {
                     tmp = memRead(addr&~3);
                 }
-                switch(addr&2) {
+                switch(addr&3) {
                     case 0: r[rt] = (tmp>>>16)&0xffff; break;
                     case 2: r[rt] = (tmp>>> 0)&0xffff; break;
                     case 0: r[rt] = (tmp>>>16)&0xffff; break;
                     case 2: r[rt] = (tmp>>> 0)&0xffff; break;
+                    default: throw new ReadFaultException(addr);
                 }
                 break;
             }
                 }
                 break;
             }
@@ -567,9 +573,10 @@ public class Interpreter extends UnixRuntime implements Cloneable {
                 } catch(RuntimeException e) {
                     tmp = memRead(addr&~3);
                 }
                 } catch(RuntimeException e) {
                     tmp = memRead(addr&~3);
                 }
-                switch(addr&2) {
+                switch(addr&3) {
                     case 0: tmp = (tmp&0x0000ffff) | ((r[rt]&0xffff)<<16); break;
                     case 2: tmp = (tmp&0xffff0000) | ((r[rt]&0xffff)<< 0); break;
                     case 0: tmp = (tmp&0x0000ffff) | ((r[rt]&0xffff)<<16); break;
                     case 2: tmp = (tmp&0xffff0000) | ((r[rt]&0xffff)<< 0); break;
+                    default: throw new WriteFaultException(addr);
                 }
                 try {
                     writePages[addr>>>pageShift][(addr>>>2)&(PAGE_WORDS-1)] = tmp;
                 }
                 try {
                     writePages[addr>>>pageShift][(addr>>>2)&(PAGE_WORDS-1)] = tmp;
@@ -665,9 +672,9 @@ public class Interpreter extends UnixRuntime implements Cloneable {
         ELF elf = new ELF(data);
         symtab = elf.getSymtab();
         
         ELF elf = new ELF(data);
         symtab = elf.getSymtab();
         
-        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");
         
         entryPoint = elf.header.entry;
         
         
         entryPoint = elf.header.entry;
         
@@ -687,7 +694,7 @@ public class Interpreter extends UnixRuntime implements Cloneable {
         int pageWords = (1<<pageShift) >> 2;
         for(int i=0;i<pheaders.length;i++) {
             ELF.PHeader ph = pheaders[i];
         int pageWords = (1<<pageShift) >> 2;
         for(int i=0;i<pheaders.length;i++) {
             ELF.PHeader ph = pheaders[i];
-            if(ph.type != ELF.PHeader.PT_LOAD) continue;
+            if(ph.type != ELF.PT_LOAD) continue;
             int memsize = ph.memsz;
             int filesize = ph.filesz;
             if(memsize == 0) continue;
             int memsize = ph.memsz;
             int filesize = ph.filesz;
             if(memsize == 0) continue;