15 Bprint(bioout, "Address error (I-fetch) vaddr %.8lux\n", addr);
21 iprof[(addr-textbase)/PROFGRAN]++;
26 return va[3]<<24 | va[2]<<16 | va[1]<<8 | va[0];
36 for(i = 0; i < 4; i++)
37 val = (val>>8) | (getmem_b(addr++)<<24);
48 for(i = 0; i < 2; i++)
49 val = (val>>8) | (getmem_b(addr++)<<16);
60 w = getmem_w(addr & ~3);
73 return va[3]<<24 | va[2]<<16 | va[1]<<8 | va[0];
83 w = getmem_h(addr & ~1);
96 return va[1]<<8 | va[0];
108 va += addr&(BY2PG-1);
115 return ((uvlong)getmem_w(addr+4) << 32) | getmem_w(addr);
119 putmem_h(ulong addr, ushort data)
124 Bprint(bioout, "Address error (Store) vaddr %.8lux\n", addr);
129 va += addr&(BY2PG-1);
138 putmem_w(ulong addr, ulong data)
143 Bprint(bioout, "Address error (Store) vaddr %.8lux\n", addr);
148 va += addr&(BY2PG-1);
159 putmem_b(ulong addr, uchar data)
164 va += addr&(BY2PG-1);
171 putmem_v(ulong addr, uvlong data)
173 putmem_w(addr, data); /* two stages, to catch brkchk */
174 putmem_w(addr+4, data>>32);
178 memio(char *mb, ulong mem, int size, int dir)
192 *mb++ = getmem_b(mem++);
197 Bprint(bioout, "memio: user/kernel copy too long for arm\n");
207 for(i = 0; i < size; i++)
208 putmem_b(mem++, *mb++);
221 e = &tlb.tlbent[tlb.tlbsize];
222 for(l = tlb.tlbent; l < e; l++)
229 tlb.tlbent[lnrand(tlb.tlbsize)] = vaddr;
242 es = &memory.seg[Nseg];
243 for(s = memory.seg; s < es; s++) {
244 if(addr >= s->base && addr < s->end) {
246 off = (addr-s->base)/BY2PG;
256 if(seek(text, s->fileoff+(off*BY2PG), 0) < 0)
257 fatal(1, "vaddr text seek");
258 if(read(text, *p, BY2PG) < 0)
259 fatal(1, "vaddr text read");
263 foff = s->fileoff+(off*BY2PG);
264 if(seek(text, foff, 0) < 0)
265 fatal(1, "vaddr text seek");
266 n = read(text, *p, BY2PG);
268 fatal(1, "vaddr text read");
269 if(foff + n > s->fileend) {
270 l = BY2PG - (s->fileend-foff);
271 a = *p+(s->fileend-foff);
282 Bprint(bioout, "User TLB miss vaddr 0x%.8lux\n", addr);
284 return 0; /*to stop compiler whining*/