X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fnestedvm%2FInterpreter.java;h=e39ecfa6083a008de2117b161ae3f50261ef75c5;hb=6d6d9f59a2e6fe3b9e5b3563efcf0124bea4a672;hp=d0e737983164f478365b4e478a077650af2ccb09;hpb=b5282b0a1a8ca5212c75623610be6d0483fd35bd;p=nestedvm.git diff --git a/src/org/ibex/nestedvm/Interpreter.java b/src/org/ibex/nestedvm/Interpreter.java index d0e7379..e39ecfa 100644 --- a/src/org/ibex/nestedvm/Interpreter.java +++ b/src/org/ibex/nestedvm/Interpreter.java @@ -470,9 +470,10 @@ public class Interpreter extends UnixRuntime implements Cloneable { } 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; + default: throw new ReadFaultException(addr); } if((tmp&0x8000)!=0) tmp |= 0xffff0000; // sign extend r[rt] = tmp; @@ -523,9 +524,10 @@ public class Interpreter extends UnixRuntime implements Cloneable { } 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; + default: throw new ReadFaultException(addr); } break; } @@ -571,9 +573,10 @@ public class Interpreter extends UnixRuntime implements Cloneable { } 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; + default: throw new WriteFaultException(addr); } try { writePages[addr>>>pageShift][(addr>>>2)&(PAGE_WORDS-1)] = tmp; @@ -669,9 +672,9 @@ public class Interpreter extends UnixRuntime implements Cloneable { 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; @@ -691,7 +694,7 @@ public class Interpreter extends UnixRuntime implements Cloneable { int pageWords = (1<> 2; for(int i=0;i