summaryrefslogtreecommitdiff
path: root/lldb/test/API/functionalities/postmortem/FreeBSDKernel/tools/libfbsdvmcore-print-offsets.patch
blob: 55dd8bcacf12cebb6fbb08e2df17545511b8360d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
diff --git a/lib/fvc.c b/lib/fvc.c
index e6b96c1..4033f78 100644
--- a/lib/fvc.c
+++ b/lib/fvc.c
@@ -297,6 +297,7 @@ fvc_read(fvc_t *kd, fvc_addr_t kva, void *buf, size_t len)
 			_fvc_syserr(kd, kd->program, "fvc_read");
 			break;
 		}
+		printf("%% RD: %zu %d\n", pa, cc);
 		/*
 		 * If ka_kvatop returns a bogus value or our core file is
 		 * truncated, we might wind up seeking beyond the end of the
@@ -331,3 +332,8 @@ fvc_kerndisp(fvc_t *kd)
 
 	return (kd->arch->ka_kerndisp(kd));
 }
+
+ssize_t xpread(int fd, void *buf, size_t count, off_t offset) {
+	printf("%% RD: %zu %zu\n", offset, count);
+	return pread(fd, buf, count, offset);
+}
diff --git a/lib/fvc.h b/lib/fvc.h
index 8680079..ff1e0f0 100644
--- a/lib/fvc.h
+++ b/lib/fvc.h
@@ -54,6 +54,8 @@ typedef unsigned char fvc_vm_prot_t;
 #define	FVC_VM_PROT_WRITE		((fvc_vm_prot_t) 0x02)
 #define	FVC_VM_PROT_EXECUTE		((fvc_vm_prot_t) 0x04)
 
+ssize_t xpread(int fd, void *buf, size_t count, off_t offset);
+
 struct fvc_page {
 	unsigned int	kp_version;
 	fvc_addr_t	kp_paddr;
diff --git a/lib/fvc_amd64.c b/lib/fvc_amd64.c
index 4d27998..69f1807 100644
--- a/lib/fvc_amd64.c
+++ b/lib/fvc_amd64.c
@@ -205,7 +205,7 @@ _amd64_vatop(fvc_t *kd, fvc_addr_t va, off_t *pa)
 		_fvc_err(kd, kd->program, "_amd64_vatop: pdpe_pa not found");
 		goto invalid;
 	}
-	if (pread(kd->pmfd, &pdpe, sizeof(pdpe), ofs) != sizeof(pdpe)) {
+	if (xpread(kd->pmfd, &pdpe, sizeof(pdpe), ofs) != sizeof(pdpe)) {
 		_fvc_syserr(kd, kd->program, "_amd64_vatop: read pdpe");
 		goto invalid;
 	}
@@ -237,7 +237,7 @@ _amd64_vatop(fvc_t *kd, fvc_addr_t va, off_t *pa)
 		_fvc_syserr(kd, kd->program, "_amd64_vatop: pde_pa not found");
 		goto invalid;
 	}
-	if (pread(kd->pmfd, &pde, sizeof(pde), ofs) != sizeof(pde)) {
+	if (xpread(kd->pmfd, &pde, sizeof(pde), ofs) != sizeof(pde)) {
 		_fvc_syserr(kd, kd->program, "_amd64_vatop: read pde");
 		goto invalid;
 	}
@@ -269,7 +269,7 @@ _amd64_vatop(fvc_t *kd, fvc_addr_t va, off_t *pa)
 		_fvc_err(kd, kd->program, "_amd64_vatop: pte_pa not found");
 		goto invalid;
 	}
-	if (pread(kd->pmfd, &pte, sizeof(pte), ofs) != sizeof(pte)) {
+	if (xpread(kd->pmfd, &pte, sizeof(pte), ofs) != sizeof(pte)) {
 		_fvc_syserr(kd, kd->program, "_amd64_vatop: read");
 		goto invalid;
 	}
diff --git a/lib/fvc_minidump_aarch64.c b/lib/fvc_minidump_aarch64.c
index 4b8477a..a1c5b42 100644
--- a/lib/fvc_minidump_aarch64.c
+++ b/lib/fvc_minidump_aarch64.c
@@ -86,7 +86,7 @@ _aarch64_minidump_initvtop(fvc_t *kd)
 		return (-1);
 	}
 	kd->vmst = vmst;
-	if (pread(kd->pmfd, &vmst->hdr, sizeof(vmst->hdr), 0) !=
+	if (xpread(kd->pmfd, &vmst->hdr, sizeof(vmst->hdr), 0) !=
 	    sizeof(vmst->hdr)) {
 		_fvc_err(kd, kd->program, "cannot read dump header");
 		return (-1);
diff --git a/lib/fvc_minidump_amd64.c b/lib/fvc_minidump_amd64.c
index 93e8238..0d2237f 100644
--- a/lib/fvc_minidump_amd64.c
+++ b/lib/fvc_minidump_amd64.c
@@ -126,7 +126,7 @@ _amd64_minidump_initvtop(fvc_t *kd)
 		return (-1);
 	}
 	kd->vmst = vmst;
-	if (pread(kd->pmfd, &vmst->hdr, sizeof(vmst->hdr), 0) !=
+	if (xpread(kd->pmfd, &vmst->hdr, sizeof(vmst->hdr), 0) !=
 	    sizeof(vmst->hdr)) {
 		_fvc_err(kd, kd->program, "cannot read dump header");
 		return (-1);
@@ -269,7 +269,7 @@ _amd64_minidump_vatop(fvc_t *kd, fvc_addr_t va, off_t *pa)
 				    (uintmax_t)a);
 				goto invalid;
 			}
-			if (pread(kd->pmfd, &pt, AMD64_PAGE_SIZE, ofs) !=
+			if (xpread(kd->pmfd, &pt, AMD64_PAGE_SIZE, ofs) !=
 			    AMD64_PAGE_SIZE) {
 				_fvc_err(kd, kd->program,
 				    "cannot read page table entry for %ju",
diff --git a/lib/fvc_minidump_i386.c b/lib/fvc_minidump_i386.c
index 61cc3db..b3ab955 100644
--- a/lib/fvc_minidump_i386.c
+++ b/lib/fvc_minidump_i386.c
@@ -94,7 +94,7 @@ _i386_minidump_initvtop(fvc_t *kd)
 		return (-1);
 	}
 	kd->vmst = vmst;
-	if (pread(kd->pmfd, &vmst->hdr, sizeof(vmst->hdr), 0) !=
+	if (xpread(kd->pmfd, &vmst->hdr, sizeof(vmst->hdr), 0) !=
 	    sizeof(vmst->hdr)) {
 		_fvc_err(kd, kd->program, "cannot read dump header");
 		return (-1);
diff --git a/lib/fvc_private.c b/lib/fvc_private.c
index 0069a54..fc798fe 100644
--- a/lib/fvc_private.c
+++ b/lib/fvc_private.c
@@ -130,7 +130,7 @@ _fvc_is_minidump(fvc_t *kd)
 {
 	char minihdr[8];
 
-	if (pread(kd->pmfd, &minihdr, 8, 0) == 8 &&
+	if (xpread(kd->pmfd, &minihdr, 8, 0) == 8 &&
 	    memcmp(&minihdr, "minidump", 8) == 0)
 		return (1);
 	return (0);
@@ -256,6 +256,7 @@ _fvc_pmap_get(fvc_t *kd, u_long idx, size_t len)
 
 	if ((off_t)off >= kd->pt_sparse_off)
 		return (NULL);
+	printf("%% RD: %zu %zu\n", kd->page_map_off+off, len);
 	return (void *)((uintptr_t)kd->page_map + off);
 }
 
@@ -270,8 +271,13 @@ _fvc_map_get(fvc_t *kd, u_long pa, unsigned int page_size)
 		return NULL;
 
 	addr = (uintptr_t)kd->page_map + off;
-	if (off >= kd->pt_sparse_off)
+	if (off >= kd->pt_sparse_off) {
+
 		addr = (uintptr_t)kd->sparse_map + (off - kd->pt_sparse_off);
+		printf("%% RD: %zu %u\n", off, page_size);
+	}
+	else
+		printf("%% RD: %zu %u\n", kd->page_map_off+off, page_size);
 	return (void *)addr;
 }
 
@@ -289,6 +295,7 @@ _fvc_pt_init(fvc_t *kd, size_t dump_avail_size, off_t dump_avail_off,
 	if (dump_avail_size > 0) {
 		kd->dump_avail = mmap(NULL, kd->dump_avail_size, PROT_READ,
 		    MAP_PRIVATE, kd->pmfd, dump_avail_off);
+		printf("%% RD: %zu %zu\n", dump_avail_off, dump_avail_size);
 	} else {
 		/*
 		 * Older version minidumps don't provide dump_avail[],
@@ -309,7 +316,7 @@ _fvc_pt_init(fvc_t *kd, size_t dump_avail_size, off_t dump_avail_off,
 		    map_len);
 		return (-1);
 	}
-	rd = pread(kd->pmfd, kd->pt_map, map_len, map_off);
+	rd = xpread(kd->pmfd, kd->pt_map, map_len, map_off);
 	if (rd < 0 || rd != (ssize_t)map_len) {
 		_fvc_err(kd, kd->program, "cannot read %zu bytes for bitmap",
 		    map_len);