16 Bprint(bioout, "Address error (I-fetch) vaddr %.8lux\n", addr);
23 iprof[(addr-textbase)/PROFGRAN]++;
28 return va[0]<<24 | va[1]<<16 | va[2]<<8 | va[3];
38 for(i = 0; i < 4; i++)
39 val = val<<8 | getmem_b(addr++);
49 val = val<<8 | getmem_b(addr+1);
60 Bprint(bioout, "Address error (Load) vaddr %.8lux\n", addr);
69 return va[0]<<24 | va[1]<<16 | va[2]<<8 | va[3];;
78 Bprint(bioout, "Address error (Load) vaddr %.8lux\n", addr);
87 return va[0]<<8 | va[1];
104 putmem_w(ulong addr, ulong data)
109 Bprint(bioout, "Address error (Store) vaddr %.8lux\n", addr);
114 va += addr&(BY2PG-1);
124 putmem_b(ulong addr, uchar data)
129 va += addr&(BY2PG-1);
136 putmem_h(ulong addr, short data)
141 Bprint(bioout, "Address error (Store) vaddr %.8lux\n", addr);
146 va += addr&(BY2PG-1);
154 memio(char *mb, ulong mem, int size, int dir)
168 *mb++ = getmem_b(mem++);
173 Bprint(bioout, "memio: user/kernel copy too long for mipsim\n");
183 for(i = 0; i < size; i++)
184 putmem_b(mem++, *mb++);
197 e = &tlb.tlbent[tlb.tlbsize];
198 for(l = tlb.tlbent; l < e; l++)
205 tlb.tlbent[lnrand(tlb.tlbsize)] = vaddr;
218 es = &memory.seg[Nseg];
219 for(s = memory.seg; s < es; s++) {
220 if(addr >= s->base && addr < s->end) {
222 off = (addr-s->base)/BY2PG;
232 if(seek(text, s->fileoff+(off*BY2PG), 0) < 0)
233 fatal(1, "vaddr text seek");
234 if(read(text, *p, BY2PG) < 0)
235 fatal(1, "vaddr text read");
239 foff = s->fileoff+(off*BY2PG);
240 if(seek(text, foff, 0) < 0)
241 fatal(1, "vaddr text seek");
242 n = read(text, *p, BY2PG);
244 fatal(1, "vaddr text read");
245 if(foff + n > s->fileend) {
246 l = BY2PG - (s->fileend-foff);
247 a = *p+(s->fileend-foff);
268 Bprint(bioout, "User TLB miss vaddr 0x%.8lux\n", addr);
275 badvaddr(ulong addr, int n)