|
|
1.1 root 1: /*
2: * various memory-reading primitives
3: */
4:
5: #include "ps.h"
6:
7: /*
8: * read the memory page corresponding to a VAX pte
9: *
10: * trickiness:
11: * the call to memrd assumes memory == /dev/mem, not /dev/kmem
12: * if mode == 0, this is wrong.
13: * but if mode == 0, rdpage is called only when the process is
14: * entirely swapped out, and hence its pages are all in the swap area
15: * this could use some cleaning up
16: */
17: rdpage(up, pgno, pte, buf)
18: register struct user *up;
19: int pgno;
20: register struct pte *pte;
21: char *buf;
22: {
23:
24: if (pte->pg_v /* in memory */
25: || (pte->pg_fod == 0 && pte->pg_pfnum)) /* or unreferenced but in memory */
26: return (memrd(memory, buf, NBPG, ctob(pte->pg_pfnum)));
27: if (pte->pg_fod) { /* assume fill-zero */
28: memset(buf, 0, NBPG);
29: return (NBPG);
30: }
31: /*
32: * page is in the swap area
33: * assume stack segment
34: */
35: return (memrd(drum, buf, NBPG,
36: ctob(up->u_smap.dm_map[0] + DMMIN - pgno - 1)));
37: }
38:
39: /*
40: * read a chunk of something at some offset in some file
41: */
42:
43: memrd(fd, buf, size, off)
44: int fd;
45: char *buf;
46: int size;
47: long off;
48: {
49:
50: lseek(fd, off, 0);
51: return (read(fd, buf, size));
52: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.