|
|
1.1 root 1: /*
2: * ptrace goo for reading and writing
3: * cray version: io is addressed by words. careful.
4: */
5:
6: #include "defs.h"
7: #include "space.h"
8: #include "ptrace.h"
9: #include "machine.h"
10:
11: #define min(a, b) (((a) < (b)) ? (a) : (b))
12: extern int errno;
13:
14: ptri(addr, space, buf, size)
15: ADDR addr;
16: int space;
17: register char *buf;
18: int size;
19: {
20: PTWORD w;
21: register char *p, *q;
22: register int n;
23: register int off;
24: int rf;
25:
26: switch (space & SPTYPE) {
27: default:
28: case INSTSP:
29: rf = P_RDI;
30: break;
31:
32: case DATASP:
33: rf = P_RDD;
34: break;
35:
36: case UBLKSP:
37: rf = P_RDU;
38: break;
39: }
40: for (p = buf, n = size; n > 0; n--)
41: *p++ = 0;
42: off = waoff(addr);
43: while (size) {
44: errno = 0;
45: w = ptrace(rf, pid, batowa(addr), 0);
46: if (errno) {
47: errflg = "process address not found";
48: return (0);
49: }
50: p = (char *)&w + off;
51: for (n = min(size, sizeof(w) - off); n > 0; size--, n--)
52: *buf++ = *p++;
53: addr += sizeof(w);
54: off = 0;
55: }
56: return (1);
57: }
58:
59: ptro(addr, space, buf, size)
60: ADDR addr;
61: int space;
62: register char *buf;
63: int size;
64: {
65: PTWORD w;
66: register char *p;
67: register int n;
68: register int off;
69: int rf, wf;
70:
71: switch (space & SPTYPE) {
72: default:
73: case INSTSP:
74: rf = P_RDI;
75: wf = P_WRI;
76: break;
77:
78: case DATASP:
79: rf = P_RDD;
80: wf = P_WRD;
81: break;
82:
83: case UBLKSP:
84: rf = P_RDU;
85: wf = P_WRU;
86: break;
87: }
88: off = waoff(addr);
89: while (size) {
90: errno = 0;
91: w = ptrace(rf, pid, batowa(addr), 0);
92: if (errno) {
93: errflg = "process address not found";
94: return (0);
95: }
96: p = (char *)&w + off;
97: for (n = min(size, sizeof(w) - off); n > 0; size--, n--)
98: *p++ = *buf++;
99: errno = 0;
100: ptrace(wf, pid, batowa(addr), w);
101: if (errno) {
102: errflg = "process address not found";
103: return (0);
104: }
105: addr += sizeof(w);
106: }
107: return (1);
108: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.